我正在寻找一个可以显示剪贴板内容详细信息的应用程序。
将某些数据复制到剪贴板时,该数据与特定的 MIME 类型相关联。普通文本是text/plain
,二进制数据可以复制为application/octet-stream
等。我有一个复制二进制数据的应用程序,将其标记为自己的 MIME 类型,我想看看它是什么类型,以及它有什么数据。
我不能只是将剪贴板内容粘贴到类似记事本的目标应用程序中,因为目标期望剪贴板对象的 MIME 类型为text/plain
.
枚举剪贴板中所有当前存在的 MIME 类型对象的应用程序也足够了。
答案1
使用xclip
:
xclip -o -t TARGETS
查看所有可用类型。例如:
- 从您的网络浏览器复制一些内容
- 研究可用类型
$ xclip -o -t 目标 时间戳 目标 多种的 文本/html 文本/_moz_htmlcontext 文本/_moz_htmlinfo UTF8_STRING 复合文本 文本 细绳 文本/x-moz-url-priv
- 获取您感兴趣的内容:
xclip -o -t text/html
答案2
好的,我实际上已经编写了一些可以满足我需要的代码。好消息是,在 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
改为,并考虑升级您的编译器;)。