27 #define WM_NOTIFYICONMSG (WM_USER + 248) 109 _T(
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID);
122 if (szDispName[0] ==
'@')
128 if ((szDispName[
i] ==
',') && (szDispName[
i + 1] ==
'-'))
132 szIndex[
k] = szDispName[
j];
134 szDispName[
i - 1] =
'\0';
137 else szDispName[
i] = szDispName[
i + 1];
182 if (szLCID[0] !=
TEXT(
'E') && szLCID[0] !=
TEXT(
'e'))
186 _T(
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID);
222 if (pLoadIcon->
hIcon)
266 HBITMAP hbmColor, hbmMono, hBmpOld;
276 if (szImeFile && szImeFile[0])
289 szBuf[0] = szBuf[1] =
_T(
'?');
301 if (!
hdc || !hbmColor || !hbmMono)
432 if (uLayoutNum == 0 || uLayoutNum > 0xFF)
435 _ultot(uLayoutNum, szLayoutNum, 10);
443 if (hwndTarget && !bNoActivate)
454 INPUTLANGCHANGE_SYSCHARSET, (
LPARAM)hKl);
479 for (dwIndex = 0; ; dwIndex++)
481 dwSize =
sizeof(szLayoutNum);
522 ULONG dwIndex,
dwSize, uLayoutNum, uMaxLayoutNum = 0;
529 for (dwIndex = 0; ; dwIndex++)
531 dwSize =
sizeof(szLayoutNum);
540 uLayoutNum =
_ttoi(szLayoutNum);
541 if (uMaxLayoutNum < uLayoutNum)
542 uMaxLayoutNum = uLayoutNum;
549 return uMaxLayoutNum;
595 if (uLayoutNum > uMaxNum)
600 _ultot(uLayoutNum, szLayoutNum, 10);
627 HWND hwndTarget = hwndFore;
628 if (hwndTarget ==
NULL)
636 return (hwndIME ? hwndIME : hwndTarget);
655 for (
i = 0;
i < nCount; ++
i)
695 static UINT s_uTaskbarRestart;
697 HMENU hLeftPopupMenu;
749 if (!s_hRightPopupMenu)
776 TEXT(
"control.exe"),
TEXT(
"input.dll"),
792 if (hwndTarget ==
NULL)
802 hwndTargetSave = hwndTarget;
843 if (
wParam == SPI_SETNONCLIENTMETRICS)
862 if (
Message == s_uTaskbarRestart)
869 if (
wParam == HSHELL_LANGUAGE)
871 else if (
wParam == HSHELL_WINDOWACTIVATED)
924 hwnd =
CreateWindow(
szKbSwitcherName,
NULL, 0, 0, 0, 1, 1,
HWND_DESKTOP,
NULL,
hInstance,
NULL);
HGDIOBJ WINAPI GetStockObject(_In_ int)
static const WCHAR szName[]
#define EnumResourceNames
HKL WINAPI ActivateKeyboardLayout(_In_ HKL, _In_ UINT)
LANGID WINAPI GetUserDefaultUILanguage(void)
HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
static BOOL GetLayoutID(LPCTSTR szLayoutNum, LPTSTR szLCID, SIZE_T LCIDLength)
BOOL WINAPI IsWindow(_In_opt_ HWND)
HDC WINAPI GetDC(_In_opt_ HWND)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
BOOL WINAPI DestroyIcon(_In_ HICON)
HWND GetTargetWindow(HWND hwndFore)
#define HKEY_CURRENT_USER
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define ExpandEnvironmentStrings
#define SystemParametersInfo
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
DWORD WINAPI GetLastError(VOID)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
static VOID AddTrayIcon(HWND hwnd)
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
static HICON CreateTrayIcon(LPTSTR szLCID, LPCTSTR szImeFile OPTIONAL)
BOOL(WINAPI * PKBSWITCHSETHOOKS)(VOID)
static BOOL RememberLastActive(HWND hwnd, HWND hwndFore)
DWORD WINAPI GetSysColor(_In_ int)
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks
#define LoadKeyboardLayout
static VOID ActivateLayout(HWND hwnd, ULONG uLayoutNum, HWND hwndTarget OPTIONAL, BOOL bNoActivate)
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
static HBITMAP BitmapFromIcon(HICON hIcon)
static BOOL GetSystemLibraryPath(LPTSTR szPath, SIZE_T cchPath, LPCTSTR FileName)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
#define LOCALE_NOUSEROVERRIDE
COLORREF WINAPI SetDCBrushColor(_In_ HDC hdc, _In_ COLORREF crColor)
struct tagLOAD_ICON * PLOAD_ICON
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
size_t __cdecl _tcslen(const _TCHAR *str)
struct tagLOAD_ICON LOAD_ICON
static VOID GetLayoutIDByHkl(HKL hKl, LPTSTR szLayoutID, SIZE_T LayoutIDLength)
static HICON FakeExtractIcon(LPCTSTR szIconPath, INT cxIcon, INT cyIcon)
#define COLOR_HIGHLIGHTTEXT
INT WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdShow)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
BOOL WINAPI SetProcessDefaultLayout(DWORD dwDefaultLayout)
VOID(WINAPI * PKBSWITCHDELETEHOOKS)(VOID)
static BOOL GetImeFile(LPTSTR szImeFile, SIZE_T cchImeFile, LPCTSTR szLCID)
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)
#define LOCALE_SABBREVLANGNAME
HICON WINAPI CreateIconIndirect(_In_ PICONINFO)
#define WM_WINDOW_ACTIVATE
static VOID UpdateTrayIcon(HWND hwnd, LPTSTR szLCID, LPTSTR szName)
int WINAPI GetSystemMetrics(_In_ int)
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI RegisterShellHookWindow(_In_ HWND)
#define LANGIDFROMLCID(l)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define GetSystemDirectory
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define RegisterWindowMessage
#define LOAD_LIBRARY_AS_DATAFILE
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
static ULONG GetMaxLayoutNum(VOID)
PKBSWITCHSETHOOKS KbSwitchSetHooks
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOL WINAPI DeleteDC(_In_ HDC)
#define KLF_SETFORPROCESS
int CDECL _ttoi(const _TCHAR *str)
UINT UpdateLanguageDisplay(HWND hwnd, HKL hKl)
PKEYBOARD_LAYOUT GetKeyboardLayout()
static BOOL GetLayoutName(LPCTSTR szLayoutNum, LPTSTR szName, SIZE_T NameLength)
#define CreateFontIndirect
HWND WINAPI GetForegroundWindow(void)
#define SPI_GETICONTITLELOGFONT
static HMENU BuildLeftPopupMenu(VOID)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
HMENU WINAPI CreatePopupMenu(void)
UINT UpdateLanguageDisplayCurrent(HWND hwnd, HWND hwndFore)
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define GetProcAddress(x, y)
#define ERROR_ALREADY_EXISTS
static UINT GetCurLayoutNum(HKL hKL)
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
_Out_opt_ PICONINFO IconInfo
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
static BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LPARAM lParam)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define RegCloseKey(hKey)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static VOID DeleteTrayIcon(HWND hwnd)
#define HKEY_LOCAL_MACHINE
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
ULONG GetNextLayout(VOID)
PULONG MinorVersion OPTIONAL