2012-05-31 56 views
2

我正嘗試在Mono和X11中實現全局熱鍵。不幸的是,應用程序使用System.Windows.Forms,所以我不能使用this question中提出的GDK#事件過濾器。Mono中的全局熱鍵

使用XGrabKey的作品,但我遇到了事件循環的問題。關閉應用程序時,處理X11事件循環的線程仍掛在XNextEvent中。有沒有辦法解決這個問題?我寧願不訴諸XPending投票。我可以以某種方式取消XNextEvent或發送虛擬事件嗎?

我在根窗口打電話給XGrabKey,所以很遺憾我沒有得到像DestroyNotifyUnmapNotify這樣的事件。

+0

爲什麼你的程序沒有平臺特定部分?那麼你可以使用GDK/GTK。 Anyhoo .. – IanNorton

+0

嗯,這是平臺特定部分的一部分,因爲顯然使用'XGrabKey'在Windows上不起作用。但是從SWF遷移到Gtk#不是一種選擇,爲此只需引入整個Gtk#似乎是過度殺傷性的。 – bseibold

+0

我知道這是非常舊的帖子,但我處於相同的情況,似乎你設法讓它工作,你有任何地方這個代碼可用?或者可以將它作爲解決方案發布? – Gusman

回答

1

使用​​發送XClientMessageEvent。創建您自己的原子並設置該事件的成員,以便可能在根窗口上監視XClientMessageEvent的其他應用程序不受影響。

在你的事件循環中,檢查這個原子,如果你得到它,退出。

+0

聽起來不錯,我會盡快嘗試。 – bseibold

+0

我現在做了類似的事情。因爲無論如何我都需要一個窗口,所以我使用窗口的'DestroyNotify'事件而不是'ClientMessage'。建議的解決方案應該也可以工作。 – bseibold