fix generation of wxEVT_CHAR_HOOK events which, incredibly, seems to have never worked because of incorrect parameter being passed to SetWindowsHookEx()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59700 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -6287,28 +6287,8 @@ extern wxWindow *wxGetWindowFromHWND(WXHWND hWnd)
|
|||||||
// Windows keyboard hook. Allows interception of e.g. F1, ESCAPE
|
// Windows keyboard hook. Allows interception of e.g. F1, ESCAPE
|
||||||
// in active frames and dialogs, regardless of where the focus is.
|
// in active frames and dialogs, regardless of where the focus is.
|
||||||
static HHOOK wxTheKeyboardHook = 0;
|
static HHOOK wxTheKeyboardHook = 0;
|
||||||
static FARPROC wxTheKeyboardHookProc = 0;
|
|
||||||
int APIENTRY _EXPORT
|
|
||||||
wxKeyboardHook(int nCode, WORD wParam, DWORD lParam);
|
|
||||||
|
|
||||||
void wxSetKeyboardHook(bool doIt)
|
int APIENTRY
|
||||||
{
|
|
||||||
if ( doIt )
|
|
||||||
{
|
|
||||||
wxTheKeyboardHookProc = MakeProcInstance((FARPROC) wxKeyboardHook, wxGetInstance());
|
|
||||||
wxTheKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) wxTheKeyboardHookProc, wxGetInstance(),
|
|
||||||
|
|
||||||
GetCurrentThreadId()
|
|
||||||
// (DWORD)GetCurrentProcess()); // This is another possibility. Which is right?
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UnhookWindowsHookEx(wxTheKeyboardHook);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int APIENTRY _EXPORT
|
|
||||||
wxKeyboardHook(int nCode, WORD wParam, DWORD lParam)
|
wxKeyboardHook(int nCode, WORD wParam, DWORD lParam)
|
||||||
{
|
{
|
||||||
DWORD hiWord = HIWORD(lParam);
|
DWORD hiWord = HIWORD(lParam);
|
||||||
@@ -6352,6 +6332,29 @@ wxKeyboardHook(int nCode, WORD wParam, DWORD lParam)
|
|||||||
return (int)CallNextHookEx(wxTheKeyboardHook, nCode, wParam, lParam);
|
return (int)CallNextHookEx(wxTheKeyboardHook, nCode, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxSetKeyboardHook(bool doIt)
|
||||||
|
{
|
||||||
|
if ( doIt )
|
||||||
|
{
|
||||||
|
wxTheKeyboardHook = ::SetWindowsHookEx
|
||||||
|
(
|
||||||
|
WH_KEYBOARD,
|
||||||
|
(HOOKPROC)wxKeyboardHook,
|
||||||
|
NULL, // must be NULL for process hook
|
||||||
|
::GetCurrentThreadId()
|
||||||
|
);
|
||||||
|
if ( !wxTheKeyboardHook )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("SetWindowsHookEx(wxKeyboardHook)"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // uninstall
|
||||||
|
{
|
||||||
|
if ( wxTheKeyboardHook )
|
||||||
|
::UnhookWindowsHookEx(wxTheKeyboardHook);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif // !__WXMICROWIN__
|
#endif // !__WXMICROWIN__
|
||||||
|
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
|
Reference in New Issue
Block a user