2010-10-19 26 views
0

什麼樣的Windows應用程序可以接收系統事件? 我的意思是像用戶關閉的事件。 Windows窗體,WPF應用程序和Windows服務可以做到這一點。但我不知道有其他人。什麼樣的Windows應用程序可以接收系統事件?

+0

什麼樣的封閉事件? – 2010-10-19 16:02:56

+0

是否有特定類型的Windows應用程序試圖捕獲系統事件? – 2010-10-19 16:04:02

+0

我已經使用Windows窗體應用程序和WPF應用程序完成了此操作。我在Vista上使用WPF版本,在Win 7上使用Windows Forms版本時遇到了一些問題;但那是另一回事。我只是想知道是否可以在C#中使用(即)控制檯應用程序?謝謝 – 2010-10-19 16:22:53

回答

2

基於Windows窗體和WPF的圖形應用程序原生地監聽一些Windows API事件。命令行和其他類型可以訂閱這些事件,但您必須編寫該代碼。

UPDATE:

這裏是接收來自託管應用程序的Win32 API事件的文章:

http://www.codeproject.com/KB/cs/interopevents.aspx

請注意,您的應用程序必須運行接收的事件,因此,如果你想從控制檯應用程序執行此操作,您的應用程序必須啓動並保持運行狀態,直到某個外部信號導致它關閉。

+0

請您引導我參加一個教程或關於如何使用控制檯應用程序完成的任務?非常感謝你! – 2010-10-19 16:14:49

+0

+1爲他做OP的研究。 – 2010-10-19 17:10:05

+0

@Wonko_the_Sane那麼我應該問什麼樣的問題呢?你很確定像你一樣判斷你的人!你是一位出色的開發人員!恭喜! – 2010-10-20 06:37:29

1

像這樣的事件需要一個窗口和一個消息循環。該窗口由SystemEvents處理,消息循環自動存在於WPF或winforms應用程序中。

如果您在其他類型的應用程序中使用它,例如服務或控制檯模式應用程序,則可以創建專用線程。您將看到該線程返回到調試器(Debug + Windows + Threads),名稱爲「.NET SystemEvents」。當您的應用程序在非交互式Windows工作站(如服務)中運行或者您的Main方法沒有[STAThread]屬性(如控制檯應用程序)時,會發生這種情況。

代碼中沒有什麼特別需要訂閱事件。但要小心你的事件處理程序將在這個幫助程序線程上運行,與關鍵字同步可能是必要的。

相關問題