From 86f3b4692c9c905b9c48e9e9c65d64a7cfda38bc Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sun, 20 Apr 2008 10:41:34 +0000 Subject: [PATCH] - Add application for keyboard layouts switching (not finished) svn path=/trunk/; revision=33053 --- reactos/base/applications/applications.rbuild | 3 + reactos/base/applications/kbswitch/kbswitch.c | 187 ++++++++++++++++++ reactos/base/applications/kbswitch/kbswitch.h | 6 + .../applications/kbswitch/kbswitch.rbuild | 20 ++ .../base/applications/kbswitch/kbswitch.rc | 6 + .../applications/kbswitch/res/kbswitch.ico | Bin 0 -> 33982 bytes reactos/base/applications/kbswitch/resource.h | 2 + 7 files changed, 224 insertions(+) create mode 100644 reactos/base/applications/kbswitch/kbswitch.c create mode 100644 reactos/base/applications/kbswitch/kbswitch.h create mode 100644 reactos/base/applications/kbswitch/kbswitch.rbuild create mode 100644 reactos/base/applications/kbswitch/kbswitch.rc create mode 100644 reactos/base/applications/kbswitch/res/kbswitch.ico create mode 100644 reactos/base/applications/kbswitch/resource.h diff --git a/reactos/base/applications/applications.rbuild b/reactos/base/applications/applications.rbuild index 5171e945b45..d1fa08ac53c 100644 --- a/reactos/base/applications/applications.rbuild +++ b/reactos/base/applications/applications.rbuild @@ -25,6 +25,9 @@ + + + diff --git a/reactos/base/applications/kbswitch/kbswitch.c b/reactos/base/applications/kbswitch/kbswitch.c new file mode 100644 index 00000000000..6f7630481bc --- /dev/null +++ b/reactos/base/applications/kbswitch/kbswitch.c @@ -0,0 +1,187 @@ +#include + +#define WM_NOTIFYICONMSG (WM_USER + 248) +#define BUFSIZE 256 + +HINSTANCE hInst; +HWND hwnd; + +static VOID +AddTrayIcon(HWND hwnd, HICON hIcon) +{ + NOTIFYICONDATA tnid; + + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = 1; + tnid.uFlags = NIF_ICON | NIF_MESSAGE; + tnid.uCallbackMessage = WM_NOTIFYICONMSG; + tnid.hIcon = hIcon; + + Shell_NotifyIcon(NIM_ADD, &tnid); + + if (hIcon) DestroyIcon(hIcon); +} + +static VOID +DelTrayIcon(HWND hwnd) +{ + NOTIFYICONDATA tnid; + + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = 1; + + Shell_NotifyIcon(NIM_DELETE, &tnid); +} + +static BOOL +GetLayoutName(LPCTSTR lcid, LPTSTR name) +{ + HKEY hKey; + DWORD dwBufLen; + TCHAR szBuf[BUFSIZE]; + + _stprintf(szBuf, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"),lcid); + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)szBuf, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + dwBufLen = BUFSIZE; + if (RegQueryValueEx(hKey,_T("Layout Text"),NULL,NULL,(LPBYTE)name,&dwBufLen) == ERROR_SUCCESS) + { + RegCloseKey(hKey); + return TRUE; + } + } + + return FALSE; +} + +static VOID +ActivateLayout(INT LayoutID) +{ + TCHAR szLayoutID[MAX_PATH], szNewLayout[MAX_PATH]; + HKEY hKey; + DWORD dwBufLen; + + _stprintf(szLayoutID, _T("%d"), LayoutID); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + dwBufLen = MAX_PATH; + if (RegQueryValueEx(hKey, szLayoutID, NULL, NULL, (LPBYTE)szNewLayout, &dwBufLen) == ERROR_SUCCESS) + { + MessageBox(0, szNewLayout, _T(""), MB_OK); + RegCloseKey(hKey); + } + } +} + +static VOID +ShowPopupMenu(HWND hwnd, POINT pt) +{ + HMENU hMenu; + HKEY hKey; + DWORD dwIndex = 0, dwSize, dwType; + LONG Ret; + TCHAR szBuf[MAX_PATH], szPreload[MAX_PATH], szName[MAX_PATH]; + + hMenu = CreatePopupMenu(); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"), + 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + dwSize = MAX_PATH; + Ret = RegEnumValue(hKey, dwIndex, szBuf, &dwSize, NULL, &dwType, NULL, NULL); + if (Ret == ERROR_SUCCESS) + { + while (Ret == ERROR_SUCCESS) + { + dwSize = MAX_PATH; + RegQueryValueEx(hKey, szBuf, NULL, NULL, (LPBYTE)szPreload, &dwSize); + + GetLayoutName(szPreload, szName); + AppendMenu(hMenu, MF_STRING, _ttoi(szBuf), szName); + + dwIndex++; + + dwSize = MAX_PATH; + Ret = RegEnumValue(hKey, dwIndex, szBuf, &dwSize, NULL, &dwType, NULL, NULL); + } + } + } + + TrackPopupMenu(hMenu, 0, pt.x, pt.y, 0, hwnd, NULL); + DestroyMenu(hMenu); + RegCloseKey(hKey); +} + +LRESULT CALLBACK +WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) +{ + POINT pt; + + switch (Message) + { + case WM_CREATE: + AddTrayIcon(hwnd, LoadIcon(hInst, MAKEINTRESOURCE(IDI_MAIN))); + break; + + case WM_NOTIFYICONMSG: + switch (lParam) + { + case WM_LBUTTONDBLCLK: + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + { + GetCursorPos(&pt); + ShowPopupMenu(hwnd, pt); + } + break; + } + break; + + case WM_COMMAND: + ActivateLayout(LOWORD(wParam)); + break; + + case WM_DESTROY: + DelTrayIcon(hwnd); + PostQuitMessage(0); + break; + } + + return DefWindowProc(hwnd, Message, wParam, lParam); +} + +INT WINAPI +wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdShow) +{ + WNDCLASS WndClass = {0}; + MSG msg; + + hInst = hInstance; + + WndClass.style = 0; + WndClass.lpfnWndProc = (WNDPROC)WndProc; + WndClass.cbClsExtra = 0; + WndClass.cbWndExtra = 0; + WndClass.hInstance = hInstance; + WndClass.hIcon = NULL; + WndClass.hCursor = NULL; + WndClass.hbrBackground = NULL; + WndClass.lpszMenuName = NULL; + WndClass.lpszClassName = L"kbswitch"; + + if (!RegisterClass(&WndClass)) return 0; + + hwnd = CreateWindow(L"kbswitch", L"kbswitch", 0, 0, 0, 1, 1, HWND_DESKTOP, NULL, hInstance, NULL); + + while(GetMessage(&msg,NULL,0,0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return 0; +} diff --git a/reactos/base/applications/kbswitch/kbswitch.h b/reactos/base/applications/kbswitch/kbswitch.h new file mode 100644 index 00000000000..f281629b1b8 --- /dev/null +++ b/reactos/base/applications/kbswitch/kbswitch.h @@ -0,0 +1,6 @@ +#include +#include +#include +#include + +#include "resource.h" diff --git a/reactos/base/applications/kbswitch/kbswitch.rbuild b/reactos/base/applications/kbswitch/kbswitch.rbuild new file mode 100644 index 00000000000..7cb3ad6726c --- /dev/null +++ b/reactos/base/applications/kbswitch/kbswitch.rbuild @@ -0,0 +1,20 @@ + + + + . + 0x600 + 0x500 + 0x501 + kernel32 + advapi32 + ntdll + user32 + gdi32 + shell32 + comctl32 + msimg32 + shlwapi + kbswitch.c + kbswitch.rc + + \ No newline at end of file diff --git a/reactos/base/applications/kbswitch/kbswitch.rc b/reactos/base/applications/kbswitch/kbswitch.rc new file mode 100644 index 00000000000..ca5c22b6caf --- /dev/null +++ b/reactos/base/applications/kbswitch/kbswitch.rc @@ -0,0 +1,6 @@ +#include "resource.h" +#include + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +IDI_MAIN ICON "res/kbswitch.ico" diff --git a/reactos/base/applications/kbswitch/res/kbswitch.ico b/reactos/base/applications/kbswitch/res/kbswitch.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ec540dd2a7c5d8034fac64be772a9f6f1b6c207 GIT binary patch literal 33982 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 literal 0 HcmV?d00001 diff --git a/reactos/base/applications/kbswitch/resource.h b/reactos/base/applications/kbswitch/resource.h new file mode 100644 index 00000000000..48937260e9b --- /dev/null +++ b/reactos/base/applications/kbswitch/resource.h @@ -0,0 +1,2 @@ +/* Icons */ +#define IDI_MAIN 100