2011-05-13 65 views
2

我想從我的應用程序中存儲來自其他應用程序的事件。事件示例:打開Word時,最小化或打開文件。從其他程序存儲事件

這樣的事情可能嗎?

+5

除非另一個應用程序通過任何機制公開它,否則你就不幸運。 – leppie 2011-05-13 11:29:52

+5

@leppie:是MSDN官方文檔中的「運氣不好」嗎? :) – alex 2011-05-13 11:30:50

+3

@alex:當更簡單的措辭可能會做時,MSDN有一種特殊的方式。 – 2011-05-13 11:49:51

回答

0

使用EventLog

必須EnableRaisingEvents屬性設置爲true

而且當一個事件添加到指定的事件日誌 EntryWritten事件處理程序將提高

這是處理OS 事件最簡單的方式

示例代碼

private void frmMain_Load(object sender, EventArgs e) 
{ 
    System.Diagnostics.EventLog s = new System.Diagnostics.EventLog("Application", ".", ""); 
    s.EnableRaisingEvents = true; 
    s.EntryWritten += delegate(object st, System.Diagnostics.EntryWrittenEventArgs ew) 
    { 
     MessageBox.Show(ew.Entry.Message); 
    }; 
} 
1

Running a programopening a file是OS事件(它們涉及安全檢查),可以使用Windows內置審計功能捕獲。這些是在這裏脫離主題,直接向ServerFault.com提出進一步的問題

最小化程序是一個應用程序消息的例子,以獲得那些你需要使用SetWindowsHookEx安裝鉤子。從.NET 4開始(它引入了並行運行時支持),這可以用C#完成,但不推薦。您需要注意的一個重大問題是您的事件捕獲代碼絕不能自行生成事件,否則您將啓動連鎖反應,導致所有正在運行的程序崩潰。

+0

如何在代碼關閉主題中捕獲和響應審計事件? – 2011-05-13 12:25:06

+0

@C:操作系統配置在這裏是無關緊要的。不需要編程來設置審計策略。審計事件由Windows捕獲並存儲在事件日誌中。 – 2011-05-13 12:27:29

+0

thanx很多! ...現在你能給我一個代碼示例嗎? – 2011-05-13 16:17:53

相關問題