可以显示剪贴板内容及其MIME类型的应用程序吗?


9

我正在寻找一个可以向我显示剪贴板内容详细信息的应用程序。

将某些数据复制到剪贴板时,该数据与特定的MIME类型相关联。普通文本是text/plain,二进制数据可以复制为application/octet-stream,等等。我有一个应用程序可以复制二进制数据,将其标记为自己的MIME类型,我想看看它是什么类型,以及它有什么数据。

我不能只是将剪贴板内容粘贴到类似记事本的目标应用程序中,因为目标希望剪贴板对象的MIME类型为text/plain

枚举剪贴板中所有当前存在的MIME类型对象的应用程序也将足够。

Answers:


6

用途xclip

xclip -o -t TARGETS

查看所有可用的类型。例如:

  1. 从您的网络浏览器复制内容
  2. 调查可用的类型
$ xclip -o -t目标
时间戳
目标
多
文字/ HTML
文字/ _moz_html上下文
文字/ _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
文本
串
文字/ x-moz-url-priv
  1. 获取您感兴趣的内容: xclip -o -t text/html

3

好的,我实际上已经写了一些满足我需要的代码。好在Qt中这很容易。

建筑信息在此文章的底部。

xclipshow.cpp:

#include <QApplication>
#include <QTimer>
#include <QClipboard>
#include <QMimeData>
#include <QDebug>
#include <QStringList>

class App: public QObject {
    Q_OBJECT
private:
    void main();
public:
    App(): QObject() { }
public slots:
    void qtmain() { main(); emit finished(); }
signals:
    void finished();
};

void App::main() {
    QClipboard *clip = QApplication::clipboard();

    for(QString& formatName: clip->mimeData()->formats()) {
        std::string s;
        s = formatName.toStdString();

        QByteArray arr = clip->mimeData()->data(formatName);
        printf("name=%s, size=%d: ", s.c_str(), arr.size());

        for(int i = 0; i < arr.size(); i++) {
            printf("%02x ", (unsigned char) arr.at(i));
        }

        printf("\n");
    }
}

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    App *task = new App();
    QObject::connect(task, SIGNAL(finished()), & app, SLOT(quit()));
    QTimer::singleShot(0, task, SLOT(qtmain()));
    return app.exec();
}

#include "xclipshow.moc"

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
project(xclipshow)
find_package(Qt5Widgets)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(SRC
    xclipshow.cpp)

add_definitions(-std=c++11)
add_executable(xclipshow ${SRC})
qt5_use_modules(xclipshow Widgets Core)

按照@slm的注释中的要求构建信息:这取决于您使用的系统。此代码需要Qt5和CMake进行编译。如果两者兼有,则只需运行:

BUILD_DIR=<path to an empty temporary dir, which will contain the executable file>
SRC_DIR=<path to the directory which contains xclipshow.cpp>

$ cd $BUILD_DIR
$ cmake $SRC_DIR
$ make

如果使用的是FreeBSD,则为“ gmake”;如果使用的是Windows,则为“ mingw32-make”,等等。

如果您没有Qt5或CMake,则可以尝试摆脱Qt4和手动编译的困扰:

$ moc xclipshow.cpp > xclipshow.moc
$ g++ xclipshow.cpp -o xclipshow `pkg-config --cflags --libs QtGui` -I. --std=c++11

如果您获取有关无效--std=c++11选项的信息,请尝试尝试--std=c++0x并考虑升级编译器;)。


1
感谢您发布此解决方案。您能否添加一些有关如何为将来的访问者进行编译的详细信息?
slm

2
@slm,安东尼,我已经简化/缩短了您的代码,应该也更容易那样编译:gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.