我一直在試圖避免將任何窗口句柄存儲爲全局。到目前爲止,我一直很好。Win32 C++可以使用過程發送額外信息
我現在正在使用鍵盤掛鉤程序,並且我正在嘗試查找是否有方法將我的主窗口句柄傳遞給它。
如果它不能以一種簡單的方式完成,我可以使主窗口句柄全局。
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
有沒有一種方法,我可以包括的參數之一內的手柄?
謝謝。
我一直在試圖避免將任何窗口句柄存儲爲全局。到目前爲止,我一直很好。Win32 C++可以使用過程發送額外信息
我現在正在使用鍵盤掛鉤程序,並且我正在嘗試查找是否有方法將我的主窗口句柄傳遞給它。
如果它不能以一種簡單的方式完成,我可以使主窗口句柄全局。
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
有沒有一種方法,我可以包括的參數之一內的手柄?
謝謝。
不,沒有。掛鉤參數是固定的,並且它們全部被OS使用。您必須在全球存儲您的句柄。如果您在掛鉤多個進程的DLL中實現掛鉤過程,則需要將該全局存儲在共享內存中,以便每個DLL實例都可以訪問它。
看來你正在尋找一種方法將狀態對象傳遞給你的KeyboardProc
。您可以按照here所述的方式使用thunk對象。這樣,KeyboardProc
可以是您的C++類的非靜態成員方法,不含全局變量。這有點破解,但它很有說服力。 ATL Library使用類似的技術(CStdCallThunk
in atlstdthunk.h)。由於certain issues with DEP(數據執行保護),你最好使用thunk的ATL實現。