2012-01-06 18 views
9

X11 Panosunu izlemeliyim. Şu an için X11 Pano Yazılımını Alın

, ben o zaman ben metin panodan döndü karma ve ben geçen check karma hesapla ile karşılaştırın, Pano Seçim her 5 saniyede isteyin. karma Ben analiz metin içeriğini ve bazı şeyler yapmak ...

, aynı değilse benim yöntemi sevmiyorum. Windows'dayım ve winapi ile, pano değiştiğinde programınızı bildiren çekirdek ve daha verimli!

Sadece pano değiştiğinde X11 WinAPI olarak programınızı bildirebilir mümkündür olmadığını bilmek istiyorum

? X11 ile pano değişikliklerini kontrol etmenin daha verimli yolu nedir?

cevap

0

İşte iyi bir referans var: GetSelectionOwner (İLKÖĞRETİM ve panoya) SelectionRequest göndererek seçim

  • olsun kopyasını kullanarak seçimle http://www.jwz.org/doc/x-cut-and-paste.html

  • +3

    Bu soruya cevap vermiyor. –

    2
    1. Bul penceresi SelectionClear olay için başvurunuz
    2. izle bildirmek
    3. SelectionClear olaydan kimliği kullanarak seçimle
    4. güncelleme penceresi, git 2. adım
    +0

    Seçim sahibi kapatıldığında ne yaparsınız? – retroj

    1

    Xfixes uzantısından Kullanım XFixesSelectSelectionInput() ve XFixesSelectionNotify olayı bekleyin.

    Örnek: Bu işleri

    // gcc -o xclipwatch xclipwatch.c -lX11 -lXfixes 
    ... 
    #include <X11/extensions/Xfixes.h> 
    ... 
    void WatchSelection(Display *display, Window window, const char *bufname) 
    { 
        int event_base, error_base; 
        XEvent event; 
        Atom bufid = XInternAtom(display, bufname, False); 
    
        assert(XFixesQueryExtension(display, &event_base, &error_base)); 
        XFixesSelectSelectionInput(display, DefaultRootWindow(display), bufid, XFixesSetSelectionOwnerNotifyMask); 
    
        while (True) 
        { 
        XNextEvent(display, &event); 
    
        if (event.type == event_base + XFixesSelectionNotify && 
         ((XFixesSelectionNotifyEvent*)&event)->selection == bufid) 
        { 
         if (!PrintSelection(display, window, bufname, "UTF8_STRING")) 
         PrintSelection(display, window, bufname, "STRING"); 
    
         fflush(stdout); 
        } 
        } 
    } 
    ... 
    

    hem bufname == "CLIPBOARD" ve bufname == "PRIMARY" seçimi için.

    Ayrıca PrintSelection() fonksiyonunu in this answer görüyoruz.