簡體   English   中英

SetWindowsHook支持32位和64位應用程序

[英]SetWindowsHook to support both 32 bit and 64 bit application

我在應用程序中使用Windows鈎子來確定是否已重新調整另一個應用程序的大小。 然后,我將根據其他應用程序的新大小采取一些措施。

這在純32位環境和純64位環境(鈎子dll如MSDN文檔中分別編譯為64位和32位)中正常工作。

但是,這就是問題所在。 由於在Window 64位操作系統中混合使用32位和64位應用程序,因此,如果啟動應用程序的64位版本,則無法監視32位應用程序,反之亦然。

有什么好的方法可以做到這一點。 這可能是完全不同的機制。

不幸的是,您只能將32位DLL注入到32位進程,而將64位DLL注入到64位進程。 這意味着您將需要2個版本的DLL。 最重要的是,必須從同一系列的可移植可執行文件中調用SetWindowsHookEx()(也就是說,對於32位進程,它必須從32位代碼中調用;對於64位進程,則必須從32位代碼中調用)。

鑒於您的應用程序是64位的,因此您必須啟動32位程序的實例並設置它的鈎子。 您可能希望將其中之一作為child ,以便在您感興趣的事件被捕獲時通知parent

從文檔:

SetWindowsHookEx可用於將DLL注入另一個進程。 無法將32位DLL注入到64位進程中,並且不能將64位DLL注入到32位進程中。 如果應用程序需要在其他進程中使用鈎子,則需要32位應用程序調用SetWindowsHookEx才能將32位DLL注入32位進程,而64位應用程序調用SetWindowsHookEx可以注入64位。 DLL轉換為64位進程。 32位和64位DLL必須具有不同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM