2013-08-19 17 views
3

我一直在試圖避免將任何窗口句柄存儲爲全局。到目前爲止,我一直很好。Win32 C++可以使用過程發送額外信息

我現在正在使用鍵盤掛鉤程序,並且我正在嘗試查找是否有方法將我的主窗口句柄傳遞給它。

如果它不能以一種簡單的方式完成,我可以使主窗口句柄全局。

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

有沒有一種方法,我可以包括的參數之一內的手柄?

謝謝。

回答

1

不,沒有。掛鉤參數是固定的,並且它們全部被OS使用。您必須在全球存儲您的句柄。如果您在掛鉤多個進程的DLL中實現掛鉤過程,則需要將該全局存儲在共享內存中,以便每個DLL實例都可以訪問它。

4

看來你正在尋找一種方法將狀態對象傳遞給你的KeyboardProc。您可以按照here所述的方式使用thunk對象。這樣,KeyboardProc可以是您的C++類的非靜態成員方法,不含全局變量。這有點破解,但它很有說服力。 ATL Library使用類似的技術(CStdCallThunk in atlstdthunk.h)。由於certain issues with DEP(數據執行保護),你最好使用thunk的ATL實現。

相關問題