2009-05-27 115 views
0

是否有某種祕密到64位系統上的兩個掛鉤64 & 32位進程?應用程序掛鉤:: x64操作系統

在這我目前正在寫我需要能夠掛鉤64位進程的應用程序。掛鉤32位進程在64位32位系統上工作得很好,但在試圖掛接64位應用程序時沒有收到消息。

之前有人告訴我,我不應該做這樣的事情,讓我解釋說,這是一件很必要的事情,我做..如果沒有設置全局鉤子系統我的應用程序將是無用的/沒有意義的。

這個應用程序是用C#/ WPF但,使用C++的dll做實際掛鉤。我試過編譯64位系統的DLL,儘管它仍然沒有做它應該做的事情。編譯並在32位系統上運行時,它的工作原理與其應該完全相同。

*編輯::我講的是掛鉤的窗口消息 - WH_CBT & WH_SHELL消息

+0

你說的是掛鉤的Win32窗口消息? – 2009-05-27 17:36:01

回答

3

爲了勾32位和64位處理,你需要確保:

  1. 您有32位DLL掛鉤32位進程和64位DLL掛鉤64位進程
  2. SetWindowsHookEx()從32位代碼調用掛鉤32位進程和從64位代碼來掛鉤64位進程。

後者基本上意味着您必須創建32位和64位可執行文件,它們都調用SetWindowsHookEx(),分別提供32位和64位DLL作爲hMod參數。

如果你的應用是32位的,你將不得不產卵64位進程,將調用調用SetWindowsHookEx()和可能別的什麼也不做,直到你解開。請注意,如果此進程退出/終止,Windows將自動取消設置鉤子,因此它必須始終保持活動狀態,無論何時您需要鉤子,可能是整個應用程序的生命週期 - 在這種情況下,您可以使您的64位進程WaitForSingleObject()直到您的主應用程序進程退出/終止並在WaitForSingleObject()完成後解除並退出。