[USER32] Simplify CliSaveImeHotKey (#7199)

Code diet. RegCreateKeyExW will
create sub-keys recursively, so
this code is okay.
JIRA issue: CORE-19268
Simplify registry key creation code.
This commit is contained in:
Katayama Hirofumi MZ 2024-07-31 03:50:29 +09:00 committed by GitHub
parent dcf0788f59
commit 063e5e2514
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -211,68 +211,45 @@ CliSaveImeHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKL, BOOL bD
{ {
WCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
LONG error; LONG error;
HKEY hControlPanel = NULL, hInputMethod = NULL, hHotKeys = NULL, hKey = NULL; HKEY hKey;
BOOL ret = FALSE, bRevertOnFailure = FALSE; BOOL ret = FALSE, bRevertOnFailure = FALSE;
StringCchPrintfW(szName, _countof(szName),
L"Control Panel\\Input Method\\Hot Keys\\%08lX", dwID);
if (bDelete) if (bDelete)
{ {
StringCchPrintfW(szName, _countof(szName),
L"Control Panel\\Input Method\\Hot Keys\\%08lX", dwID);
error = RegDeleteKeyW(HKEY_CURRENT_USER, szName); error = RegDeleteKeyW(HKEY_CURRENT_USER, szName);
return (error == ERROR_SUCCESS); return (error == ERROR_SUCCESS);
} }
// Open "Control Panel" error = RegCreateKeyExW(HKEY_CURRENT_USER, szName, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL);
error = RegCreateKeyExW(HKEY_CURRENT_USER, L"Control Panel", 0, NULL, 0, KEY_ALL_ACCESS,
NULL, &hControlPanel, NULL);
if (error == ERROR_SUCCESS) if (error == ERROR_SUCCESS)
{ {
// Open "Input Method" bRevertOnFailure = TRUE;
error = RegCreateKeyExW(hControlPanel, L"Input Method", 0, NULL, 0, KEY_ALL_ACCESS,
NULL, &hInputMethod, NULL); // Set "Virtual Key"
error = RegSetValueExW(hKey, L"Virtual Key", 0, REG_BINARY,
(LPBYTE)&uVirtualKey, sizeof(uVirtualKey));
if (error == ERROR_SUCCESS) if (error == ERROR_SUCCESS)
{ {
// Open "Hot Keys" // Set "Key Modifiers"
error = RegCreateKeyExW(hInputMethod, L"Hot Keys", 0, NULL, 0, KEY_ALL_ACCESS, error = RegSetValueExW(hKey, L"Key Modifiers", 0, REG_BINARY,
NULL, &hHotKeys, NULL); (LPBYTE)&uModifiers, sizeof(uModifiers));
if (error == ERROR_SUCCESS) if (error == ERROR_SUCCESS)
{ {
// Open "Key" // Set "Target IME"
StringCchPrintfW(szName, _countof(szName), L"%08lX", dwID); error = RegSetValueExW(hKey, L"Target IME", 0, REG_BINARY,
error = RegCreateKeyExW(hHotKeys, szName, 0, NULL, 0, KEY_ALL_ACCESS, (LPBYTE)&hKL, sizeof(hKL));
NULL, &hKey, NULL);
if (error == ERROR_SUCCESS) if (error == ERROR_SUCCESS)
{ {
bRevertOnFailure = TRUE; // Success!
ret = TRUE;
// Set "Virtual Key" bRevertOnFailure = FALSE;
error = RegSetValueExW(hKey, L"Virtual Key", 0, REG_BINARY,
(LPBYTE)&uVirtualKey, sizeof(uVirtualKey));
if (error == ERROR_SUCCESS)
{
// Set "Key Modifiers"
error = RegSetValueExW(hKey, L"Key Modifiers", 0, REG_BINARY,
(LPBYTE)&uModifiers, sizeof(uModifiers));
if (error == ERROR_SUCCESS)
{
// Set "Target IME"
error = RegSetValueExW(hKey, L"Target IME", 0, REG_BINARY,
(LPBYTE)&hKL, sizeof(hKL));
if (error == ERROR_SUCCESS)
{
// Success!
ret = TRUE;
bRevertOnFailure = FALSE;
}
}
}
RegCloseKey(hKey);
} }
RegCloseKey(hHotKeys);
} }
RegCloseKey(hInputMethod);
} }
RegCloseKey(hControlPanel); RegCloseKey(hKey);
} }
if (bRevertOnFailure) if (bRevertOnFailure)