mirror of
https://github.com/reactos/reactos.git
synced 2025-05-19 00:54:18 +00:00
[MSCTF][SDK] Implement InitLangChangeHotKey (#6234)
Supporting TIPs and Language Bar... JIRA issue: CORE-19361 - Implement InitLangChangeHotKey function. - Add some global variables about hot-keys. - Fix CicRegKey in <cicero/cicreg.h>.
This commit is contained in:
parent
7f1df040ed
commit
ec0695c26b
2 changed files with 130 additions and 5 deletions
|
@ -78,6 +78,14 @@ CicMutex g_mutexTMD;
|
||||||
// File mapping
|
// File mapping
|
||||||
CicFileMappingStatic g_SharedMemory;
|
CicFileMappingStatic g_SharedMemory;
|
||||||
|
|
||||||
|
// Hot-Keys
|
||||||
|
UINT g_uLangHotKeyModifiers = 0;
|
||||||
|
UINT g_uLangHotKeyVKey = 0;
|
||||||
|
UINT g_uLangHotKeyVKey2 = 0;
|
||||||
|
UINT g_uKeyTipHotKeyModifiers = 0;
|
||||||
|
UINT g_uKeyTipHotKeyVKey = 0;
|
||||||
|
UINT g_uKeyTipHotKeyVKey2 = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -346,11 +354,126 @@ TF_IsCtfmonRunning(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
VOID InitLangChangeHotKey(VOID)
|
BOOL InitLangChangeHotKey(VOID)
|
||||||
{
|
{
|
||||||
//FIXME
|
CicRegKey regKey;
|
||||||
|
TCHAR szLanguage[2], szLayout[2];
|
||||||
|
LSTATUS error;
|
||||||
|
|
||||||
|
szLanguage[0] = szLayout[0] = TEXT('3');
|
||||||
|
szLanguage[1] = szLayout[1] = TEXT('\0');
|
||||||
|
|
||||||
|
error = regKey.Open(HKEY_CURRENT_USER, "Keyboard Layout\\Toggle");
|
||||||
|
if (error == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
error = regKey.QuerySz(TEXT("Language Hotkey"), szLanguage, _countof(szLanguage));
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if (g_dwOSInfo & CIC_OSINFO_NT)
|
||||||
|
{
|
||||||
|
error = regKey.QuerySz(TEXT("Hotkey"), szLanguage, _countof(szLanguage));
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
szLanguage[0] = TEXT('1');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error = regKey.QuerySz(NULL, szLanguage, _countof(szLanguage));
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
szLanguage[0] = TEXT('1');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PRIMARYLANGID(GetSystemDefaultLCID()) == LANG_CHINESE)
|
||||||
|
szLanguage[0] = TEXT('1');
|
||||||
|
}
|
||||||
|
|
||||||
|
error = regKey.QuerySz(TEXT("Layout Hotkey"), szLayout, _countof(szLayout));
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
szLayout[0] = TEXT('1');
|
||||||
|
if (szLanguage[0] != TEXT('2'))
|
||||||
|
szLayout[0] = TEXT('2');
|
||||||
|
if (GetSystemMetrics(SM_MIDEASTENABLED))
|
||||||
|
szLayout[0] = TEXT('3');
|
||||||
|
}
|
||||||
|
|
||||||
|
szLanguage[1] = TEXT('\0');
|
||||||
|
szLayout[1] = TEXT('\0');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (szLanguage[0] == szLayout[0])
|
||||||
|
{
|
||||||
|
if (szLanguage[0] == TEXT('1'))
|
||||||
|
szLayout[0] = TEXT('2');
|
||||||
|
else if (szLanguage[0] == TEXT('2'))
|
||||||
|
szLayout[0] = TEXT('1');
|
||||||
|
else
|
||||||
|
szLayout[0] = TEXT('3');
|
||||||
|
}
|
||||||
|
|
||||||
|
::EnterCriticalSection(&g_csInDllMain);
|
||||||
|
|
||||||
|
switch (szLanguage[0])
|
||||||
|
{
|
||||||
|
case TEXT('2'):
|
||||||
|
g_uLangHotKeyModifiers = MOD_SHIFT | MOD_CONTROL;
|
||||||
|
g_uLangHotKeyVKey2 = VK_CONTROL;
|
||||||
|
g_uLangHotKeyVKey = VK_SHIFT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('3'):
|
||||||
|
g_uLangHotKeyVKey = 0;
|
||||||
|
g_uLangHotKeyModifiers = 0;
|
||||||
|
g_uLangHotKeyVKey2 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('4'):
|
||||||
|
g_uLangHotKeyVKey = VK_NUMPAD0;
|
||||||
|
g_uLangHotKeyModifiers = 0;
|
||||||
|
g_uLangHotKeyVKey2 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('1'):
|
||||||
|
default:
|
||||||
|
g_uLangHotKeyModifiers = MOD_SHIFT | MOD_ALT;
|
||||||
|
g_uLangHotKeyVKey2 = VK_MENU;
|
||||||
|
g_uLangHotKeyVKey = VK_SHIFT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (szLayout[0])
|
||||||
|
{
|
||||||
|
case TEXT('2'):
|
||||||
|
g_uKeyTipHotKeyModifiers = MOD_SHIFT | MOD_CONTROL;
|
||||||
|
g_uKeyTipHotKeyVKey = VK_SHIFT;
|
||||||
|
g_uKeyTipHotKeyVKey2 = VK_CONTROL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('3'):
|
||||||
|
g_uKeyTipHotKeyModifiers = 0;
|
||||||
|
g_uKeyTipHotKeyVKey = 0;
|
||||||
|
g_uKeyTipHotKeyVKey2 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('4'):
|
||||||
|
g_uKeyTipHotKeyModifiers = 0;
|
||||||
|
g_uKeyTipHotKeyVKey = VK_OEM_3;
|
||||||
|
g_uKeyTipHotKeyVKey2 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEXT('1'):
|
||||||
|
default:
|
||||||
|
g_uKeyTipHotKeyModifiers = 0x40 | MOD_SHIFT;
|
||||||
|
g_uKeyTipHotKeyVKey = VK_SHIFT;
|
||||||
|
g_uKeyTipHotKeyVKey2 = VK_MENU;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
::LeaveCriticalSection(&g_csInDllMain);
|
||||||
|
|
||||||
|
TRACE("HotKey: %c, %c\n", szLanguage[0], szLayout[0]);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -408,6 +531,8 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
|
||||||
}
|
}
|
||||||
|
|
||||||
cicGetOSInfo(&g_uACP, &g_dwOSInfo);
|
cicGetOSInfo(&g_uACP, &g_dwOSInfo);
|
||||||
|
TRACE("cicGetOSInfo: %u, 0x%lX\n", g_uACP, g_dwOSInfo);
|
||||||
|
|
||||||
InitUniqueString();
|
InitUniqueString();
|
||||||
|
|
||||||
//FIXME
|
//FIXME
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
return ::RegSetValueEx(m_hKey, pszValueName, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue));
|
return ::RegSetValueEx(m_hKey, pszValueName, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
LSTATUS QuerySz(LPCTSTR pszValueName, LPWSTR pszValue, DWORD cchValueMax);
|
LSTATUS QuerySz(LPCTSTR pszValueName, LPTSTR pszValue, DWORD cchValueMax);
|
||||||
|
|
||||||
LSTATUS SetSz(LPCTSTR pszValueName, LPCTSTR pszValue)
|
LSTATUS SetSz(LPCTSTR pszValueName, LPCTSTR pszValue)
|
||||||
{
|
{
|
||||||
|
@ -124,7 +124,7 @@ CicRegKey::Create(
|
||||||
}
|
}
|
||||||
|
|
||||||
inline LSTATUS
|
inline LSTATUS
|
||||||
CicRegKey::QuerySz(LPCTSTR pszValueName, LPWSTR pszValue, DWORD cchValueMax)
|
CicRegKey::QuerySz(LPCTSTR pszValueName, LPTSTR pszValue, DWORD cchValueMax)
|
||||||
{
|
{
|
||||||
DWORD cchSaveMax = cchValueMax;
|
DWORD cchSaveMax = cchValueMax;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue