แอปพลิเคชั่นที่อนุญาตให้แสดงเนื้อหาของคลิปบอร์ดและประเภท MIME หรือไม่


9

ฉันกำลังค้นหาแอปพลิเคชันที่สามารถแสดงรายละเอียดของเนื้อหาของคลิปบอร์ด

เมื่อคัดลอกข้อมูลบางส่วนไปยังคลิปบอร์ดข้อมูลจะเชื่อมโยงกับประเภท MIME ที่ระบุ ข้อความปกติคือtext/plainข้อมูลไบนารีสามารถคัดลอกเป็นapplication/octet-streamฯลฯ ฉันมีแอปพลิเคชันที่คัดลอกข้อมูลไบนารีติดแท็กเป็นประเภท MIME ของตัวเองและฉันต้องการดูว่าเป็นประเภทใดและมีข้อมูลอะไร

ฉันไม่สามารถเพียงแค่วางเนื้อหาคลิปบอร์ดเข้าสู่เป้าหมาย Notepad เหมือนแอปพลิเคเพราะเป้าหมายคาดว่าชนิด MIME text/plainของวัตถุคลิปบอร์ดจะเป็น

แอปพลิเคชันที่ระบุวัตถุประเภท MIME ปัจจุบันที่มีอยู่ทั้งหมดในคลิปบอร์ดจะเพียงพอ

คำตอบ:


6

ใช้xclip:

xclip -o -t TARGETS

เพื่อดูประเภทที่มีทั้งหมด ตัวอย่างเช่น:

  1. คัดลอกบางสิ่งจากเว็บเบราว์เซอร์ของคุณ
  2. ตรวจสอบประเภทที่มีอยู่
$ xclip -o -t เป้าหมาย
ลงเวลา
เป้าหมาย
หลาย
text / html
ข้อความ / _moz_htmlcontext
ข้อความ / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
ข้อความ
STRING
ข้อความ / 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

หรือ 'gmake' หากคุณใช้ FreeBSD หรือ 'mingw32-make' หากคุณใช้ Windows ฯลฯ

หากคุณไม่มี 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, antonone, ฉันได้ย่อ / ย่อรหัสของคุณแล้วควรรวบรวมได้ง่ายขึ้นด้วยเช่นกัน: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.