Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenkbsdll.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Keyboard Layout Switcher 00003 * FILE: kbswitch/kbsdll/kbsdll.c 00004 * PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org> 00005 * 00006 */ 00007 00008 #include "../kbswitch.h" 00009 00010 HHOOK hKeyboardHook, hLangHook, hWinHook; 00011 HINSTANCE hInstance; 00012 HWND hKbSwitchWnd; 00013 00014 static VOID 00015 SendMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam) 00016 { 00017 PostMessage(hKbSwitchWnd, Msg, wParam, lParam); 00018 } 00019 00020 /* Not used yet */ 00021 LRESULT CALLBACK 00022 KeyboardHookProc(int code, WPARAM wParam, LPARAM lParam) 00023 { 00024 return CallNextHookEx(hKeyboardHook, code, wParam, lParam); 00025 } 00026 00027 LRESULT CALLBACK 00028 LangHookProc(int code, WPARAM wParam, LPARAM lParam) 00029 { 00030 PMSG msg; 00031 msg = (PMSG) lParam; 00032 00033 switch (msg->message) 00034 { 00035 case WM_INPUTLANGCHANGEREQUEST: 00036 { 00037 SendMessageToMainWnd(WM_LANG_CHANGED, wParam, msg->lParam); 00038 } 00039 break; 00040 00041 case WM_HOTKEY: 00042 { 00043 if (msg->hwnd) 00044 { 00045 SendMessageToMainWnd(WM_LOAD_LAYOUT, (WPARAM)msg->hwnd, msg->lParam); 00046 } 00047 } 00048 break; 00049 } 00050 00051 return CallNextHookEx(hLangHook, code, wParam, lParam); 00052 } 00053 00054 LRESULT CALLBACK 00055 WinHookProc(int code, WPARAM wParam, LPARAM lParam) 00056 { 00057 int id = GlobalAddAtom(_T("KBSWITCH")); 00058 00059 switch (code) 00060 { 00061 case HCBT_SETFOCUS: 00062 { 00063 if ((HWND)wParam != NULL) 00064 { 00065 if ((HWND)wParam != hKbSwitchWnd) 00066 { 00067 SendMessageToMainWnd(WM_WINDOW_ACTIVATE, wParam, lParam); 00068 } 00069 } 00070 } 00071 break; 00072 00073 case HCBT_CREATEWND: 00074 { 00075 RegisterHotKey((HWND)wParam, id, MOD_ALT, VK_F10); 00076 } 00077 break; 00078 00079 case HCBT_DESTROYWND: 00080 { 00081 UnregisterHotKey((HWND)wParam, id); 00082 } 00083 break; 00084 } 00085 00086 GlobalDeleteAtom(id); 00087 00088 return CallNextHookEx(hWinHook, code, wParam, lParam); 00089 } 00090 00091 BOOL WINAPI 00092 KbSwitchSetHooks(VOID) 00093 { 00094 hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHookProc, hInstance, 0); 00095 hLangHook = SetWindowsHookEx(WH_GETMESSAGE, LangHookProc, hInstance, 0); 00096 hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, hInstance, 0); 00097 00098 if ((hKeyboardHook)&&(hLangHook)&&(hWinHook)) 00099 return TRUE; 00100 else 00101 return FALSE; 00102 } 00103 00104 VOID WINAPI 00105 KbSwitchDeleteHooks(VOID) 00106 { 00107 if (hKeyboardHook) UnhookWindowsHookEx(hKeyboardHook); 00108 if (hLangHook) UnhookWindowsHookEx(hLangHook); 00109 if (hWinHook) UnhookWindowsHookEx(hWinHook); 00110 } 00111 00112 BOOL WINAPI 00113 DllMain(IN HINSTANCE hinstDLL, 00114 IN DWORD dwReason, 00115 IN LPVOID lpvReserved) 00116 { 00117 switch (dwReason) 00118 { 00119 case DLL_PROCESS_ATTACH: 00120 hInstance = hinstDLL; 00121 hKbSwitchWnd = FindWindow(szKbSwitcherName, NULL); 00122 if (!hKbSwitchWnd) return FALSE; 00123 break; 00124 } 00125 00126 return TRUE; 00127 } Generated on Sun May 27 2012 04:16:45 for ReactOS by
1.7.6.1
|