2012-05-31 2 views
2

모노 및 X11에서 글로벌 단축키를 구현하려고합니다. 불행히도 응용 프로그램은 System.Windows.Forms을 사용하므로 this question에서 제안 된 GDK # 이벤트 필터를 사용할 수 없습니다.모노의 글로벌 단축키

XGrabKey을 사용하고 있지만 이벤트 루프에 문제가 있습니다. 응용 프로그램을 닫을 때 X11 이벤트 루프를 처리하는 스레드는 여전히 XNextEvent에 있습니다. 그 주위에 방법이 있습니까? 차라리 XPending으로 투표하는 것이 좋습니다. 어떻게 든 XNextEvent을 취소하거나 가짜 이벤트를 보낼 수 있습니까?

나는 루트 창에서 XGrabKey을 호출하므로 불행히도 DestroyNotify 또는 UnmapNotify과 같은 이벤트가 표시되지 않습니다.

+0

프로그램의 특정 플랫폼 부분이없는 이유는 무엇입니까? GDK/GTK를 사용할 수 있습니다. Anyhoo .. – IanNorton

+0

분명히 XGrabKey를 사용하는 것이 Windows에서는 작동하지 않기 때문에 이것은 플랫폼 특정 부분의 일부입니다. 하지만 SWF에서 Gtk 로의 마이그레이션은 옵션이 아니므로 Gtk # 전체를 과도하게 사용하는 것 같습니다. – bseibold

+0

나는 이것이 매우 오래된 게시물 인 것을 알고있다. 그러나 나는 같은 상황에 처해있다. 당신이이 코드를 사용할 수있는 곳이 있는가? 아니면 솔루션으로 게시 할 수 있습니까? – Gusman

답변

1

XClientMessageEvent을 보내려면 XSendEvent을 사용하십시오. 자신의 아톰을 만들어 Atom 이벤트의 멤버를 설정하면 루트 창에서 XClientMessageEvent을 볼 수있는 다른 앱이 영향을받지 않습니다.

이벤트 루프에서이 원자를 확인하고 종료하면 종료하십시오.

+0

좋은 소리, 최대한 빨리 시도하겠습니다. – bseibold

+0

나는 지금 비슷한 것을했다. 어쨌든 창이 필요하므로'ClientMessage' 대신에 창의'DestroyNotify' 이벤트를 사용하고 있습니다. 제안 된 솔루션도 작동합니다. – bseibold