ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

kbsdll.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.