Mam przezroczystą, podobną do znaku wodnego aplikację, która jest napisana z XLib w C. Aktualnie, jeśli klikniesz gdziekolwiek na aplikacji nic się nie dzieje, ale chciałbym, aby przekazała myszą dane do tego, co znajduje się poniżej. na przykład Jeśli klikniesz X, aby zamknąć okno znajdujące się pod aplikacją, zamknij aplikację, a nie rób nic.Klikaj przez przezroczyste okna xlib
Odpowiedz
Myślę, że może być pomocna XQueryTree
. Wykonaj go w oknie głównym i uzyskaj listę okien podrzędnych, znajdź ich lokalizacje i przekaż nazwę XEvent
myszy/klawiatury do odpowiedniego okna.
Uwaga: Musisz dbać o aktywne/nieaktywne okna, aktywny/nieaktywny obszar okna, podrzędność innego okna, rozmiar i lokalizację x/y innych okien . Kod będzie na tym bałagan.
Jeśli nie chcesz, aby twoje okno "znaku wodnego" otrzymywało jakiekolwiek dane wejściowe, a zamiast tego wprowadzi je do okna pod nim, wtedy zajrzę do implementation behind gtk_widget_input_shape_combine_region
. Poprzednio użyłem jego poprzednika gtk_widget_input_shape_combine_mask
, aby spowodować, że wszystkie części wyskakującego okienka nie będą otrzymywać żadnych zdarzeń.
Wychodzę z mojej strefy komfortu tutaj, ale wygląda na to, że XShapeCombineRectangles jest odpowiednim połączeniem (połączony do_shape_combine_region
jest wywoływany z shape = ShapeInput
dla tego przypadku).
Próbowałem go z oknem GDK, ale to nie zadziałało. –
Po wypróbowaniu tego dla okna xlib zadziałało (nawet wymóg, że można kliknąć "X", aby zamknąć podstawowe okno jest spełnione). –
Trzeba wdrożyć mały menedżer okien, który będzie nasłuchiwał wszystkich wydarzenia na domyślnym korzenia indow użyciu XSelectInput.
Następnie wykonaj polling na fd = connectionNember (display).
Zawsze, gdy otrzymasz zdarzenie. Sprawdź, czy jest to zdarzenie Mouse, to dostarczy Ci x, y. Możesz znaleźć poprawne okno, przechodząc przez stos okien.
Następnie użyj XGrabPinter, aby zgłosić zdarzenie do podstawowego okna.
- 1. Okna w Xlib
- 2. Xlib Jak to działa (usuwanie dekoracji okna)?
- 3. Jak rozpoznać okna X11 najwyższego poziomu przy użyciu xlib?
- 4. Jak mogę przenieść/zmienić rozmiar okna za pomocą python-xlib?
- 5. Dynamiczne linki Knockout.js nie klikaj
- 6. Java przezroczyste okno
- 7. Iframe przezroczyste tło
- 8. Zapisywanie Xlib XImage do PNG
- 9. Jak przywrócić okno z Xlib?
- 10. kakao: jak zrobić przezroczyste przezroczyste webView?
- 11. Jak "wyczyścić" przezroczyste okno WinAPI
- 12. UWP: MapControl Przezroczyste tło
- 13. jak rzucić blokowanie xlib za XNextEvent
- 14. Jak czekać na VSYNC w aplikacji Xlib?
- 15. Bezramowe i przezroczyste okno qt5
- 16. C# - Przezroczyste okno, aby pokonać Keyloggery
- 17. Jak zrobić przezroczyste okno na Linuksie
- 18. Google Adsense przezroczyste tło
- 19. Java Graphics2D przezroczyste tło
- 20. Przezroczyste tło dla WKWebView
- 21. Jak AppBarLayout tło przezroczyste
- 22. SVG przezroczyste tło sieciowe
- 23. Przezroczyste tło WKWebView (NSView)
- 24. Tło przycisku jako przezroczyste
- 25. Przezroczyste obiekty w Threejs
- 26. Ustawianie przezroczystego okna głównego
- 27. Własne przezroczyste urządzenie Android ActionBar
- 28. Przeniesienie okna przez przeciągnięcie tła (movableByWindowBackground)
- 29. Przezroczyste zaokrąglone obramowanie w Chrome
- 30. Jak zrobić tło UINavigationBar przezroczyste?
Więc chciałbym używać XQueryTree aby uzyskać identyfikator okna następnie XGetWindowAttributes i sprawdzić zakładkę, jeśli jest na kolanach wyślę zdarzenia myszy do tego okna? Również w jaki sposób wysłać lub przekazać zdarzenie myszy do okna? – Corey
Nie jestem w 100% pewny, ale "XSendEvent" powinien nad tym pracować. – bikram990
Spójrz na to również "http://stackoverflow.com/questions/14656615/xlib-xsendevent-click-event-do-work-inside-of-some-windows-on-ubuntu-12-04 ? rq = 1 'i to również "http://www.semicomplete.com/blog/geekery/xsendevent-xdotool-and-ld_preload.html" – bikram990