2009-10-19 70 views
1

我想知道任何/所有程序何時被主動使用。C#中windows鉤子的替代品?

要通過Windows鉤子來做到這一點,我會使用一個非託管的C++ dll與C#交談。有一篇文章解釋了這個過程here

我想知道,但如果有任何替代使用系統鉤子雖然。

+0

沒有那麼做,最終你將不得不與非託管代碼交互的任何內置的.NET庫。你可以做的最好的事情是使用隱藏這些細節的庫。 – BobbyShaftoe 2009-10-19 17:56:39

回答

1

C++不需要設置全局窗口鉤子,你只需要調用所需winapis。

假設您只對具有與進程關聯的窗口的應用程序感興趣,全局鉤子將比輪詢更高效且更可靠。例如,CMD提示可能不會生成GWH事件。

最終最可靠和最有效的機制是全系統注入,一個好的開始將是Microsoft Research的Detours庫。 Jefffrey Richter的經典「高級Windows編程」一書詳細介紹了這一點,它提供了3種注入機制(包括如何設置全系統掛鉤)。同樣,這不需要C++,並且當應用程序正在使用時,不一定會告訴你。最終,全球窗口掛鉤將最有意義。

2

我還沒有看過這個圖書館的所有細節,但它可能會幫助你。

Managed Windows API