आवेदन जो क्लिपबोर्ड सामग्री और इसके MIME प्रकार को दिखाने की अनुमति देता है?


9

मैं एक ऐसे एप्लिकेशन की खोज कर रहा हूं जो मुझे क्लिपबोर्ड की सामग्री का विवरण दिखा सके।

कुछ डेटा को क्लिपबोर्ड में कॉपी करते समय, डेटा एक विशिष्ट MIME प्रकार से जुड़ा होता है। सामान्य पाठ है text/plain, बाइनरी डेटा को कॉपी किया जा सकता है application/octet-stream, आदि। मेरे पास एक एप्लिकेशन है जो बाइनरी डेटा को कॉपी करता है , इसे अपने स्वयं के MIME प्रकार के रूप में टैग करता है, और मैं यह देखना चाहता हूं कि यह किस प्रकार का है, और इसका क्या डेटा है।

मैं क्लिपबोर्ड सामग्री को केवल लक्ष्य नोटपैड जैसे अनुप्रयोग में नहीं डाल सकता, क्योंकि लक्ष्य को MIME प्रकार के क्लिपबोर्ड ऑब्जेक्ट के होने की उम्मीद है text/plain

क्लिपबोर्ड में वर्तमान में मौजूद MIME प्रकार की वस्तुओं की गणना करने वाला एक अनुप्रयोग भी पर्याप्त होगा।

जवाबों:


7

उपयोग करें xclip:

xclip -o -t TARGETS

सभी उपलब्ध प्रकारों को देखना। उदाहरण के लिए:

  1. आप वेब ब्राउज़र से कुछ कॉपी करें
  2. उपलब्ध प्रकारों की जांच करें
$ x -o -t TARGETS
TIMESTAMP
लक्ष्य
एकाधिक
पाठ / html
पाठ / _moz_htmlcontext
पाठ / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
पाठ
STRING
पाठ / x-moz-यूआरएल-priv
  1. जिस सामग्री में आपकी रुचि हो, उसके लिए सामग्री प्राप्त करें: xclip -o -t text/html

Xclip द्वारा डिफ़ॉल्ट डिफ़ॉल्ट क्लिपबोर्ड "प्राथमिक" है। -selection clipboardस्पष्ट रूप से कॉपी की गई सामग्री देखने के लिए उपयोग करें । देखें सुपरयुसर . com/questions/90257/…
रमन

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' करें अगर आप विंडोज पर हैं, आदि।

यदि आपके पास 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
इस समाधान को पोस्ट करने के लिए धन्यवाद। क्या आप भविष्य के आगंतुकों के लिए इसे संकलित करने के बारे में थोड़ा विस्तार जोड़ सकते हैं?
स्लम

2
@ एसएलएम, एंटोनोन, मैंने आपके कोड को सरल / छोटा कर दिया है, इस तरह से संकलन करना भी आसान होना चाहिए: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.