2 * PROJECT: ReactOS Keyboard Layout Switcher
3 * FILE: base/applications/kbswitch/kbsdll/kbsdll.c
4 * PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org>
8 #include "../kbswitch.h"
10 HHOOK hWinHook
= NULL
;
11 HHOOK hShellHook
= NULL
;
12 HINSTANCE hInstance
= NULL
;
13 HWND hKbSwitchWnd
= NULL
;
16 PostMessageToMainWnd(UINT Msg
, WPARAM wParam
, LPARAM lParam
)
18 PostMessage(hKbSwitchWnd
, Msg
, wParam
, lParam
);
22 WinHookProc(int code
, WPARAM wParam
, LPARAM lParam
)
26 return CallNextHookEx(hWinHook
, code
, wParam
, lParam
);
33 HWND hwndFocus
= (HWND
)wParam
;
34 if (hwndFocus
&& hwndFocus
!= hKbSwitchWnd
)
36 PostMessageToMainWnd(WM_WINDOW_ACTIVATE
, wParam
, lParam
);
42 return CallNextHookEx(hWinHook
, code
, wParam
, lParam
);
46 ShellHookProc(int code
, WPARAM wParam
, LPARAM lParam
)
50 return CallNextHookEx(hShellHook
, code
, wParam
, lParam
);
57 PostMessageToMainWnd(WM_LANG_CHANGED
, wParam
, lParam
);
62 return CallNextHookEx(hShellHook
, code
, wParam
, lParam
);
66 KbSwitchSetHooks(VOID
)
68 hWinHook
= SetWindowsHookEx(WH_CBT
, WinHookProc
, hInstance
, 0);
69 hShellHook
= SetWindowsHookEx(WH_SHELL
, ShellHookProc
, hInstance
, 0);
71 if (!hWinHook
|| !hShellHook
)
80 KbSwitchDeleteHooks(VOID
)
84 UnhookWindowsHookEx(hWinHook
);
89 UnhookWindowsHookEx(hShellHook
);
95 DllMain(IN HINSTANCE hinstDLL
,
97 IN LPVOID lpvReserved
)
101 case DLL_PROCESS_ATTACH
:
103 hInstance
= hinstDLL
;
104 hKbSwitchWnd
= FindWindow(szKbSwitcherName
, NULL
);