void UnregisterServer() { char achIMEKey[ARRAYSIZE(c_szInfoKeyPrefix) + CLSID_STRLEN]; if (!CLSIDToStringA(c_clsidTextService, achIMEKey + ARRAYSIZE(c_szInfoKeyPrefix) - 1)) return; memcpy(achIMEKey, c_szInfoKeyPrefix, sizeof(c_szInfoKeyPrefix) - 1); RecurseDeleteKeyA(HKEY_CLASSES_ROOT, achIMEKey); // On Windows 8, we need to manually delete the registry key for our TIP char tipKey[ARRAYSIZE(c_szTipKeyPrefix) + CLSID_STRLEN]; if (!CLSIDToStringA(c_clsidTextService, tipKey + ARRAYSIZE(c_szTipKeyPrefix) - 1)) return; memcpy(tipKey, c_szTipKeyPrefix, sizeof(c_szTipKeyPrefix) - 1); RecurseDeleteKeyA(HKEY_CLASSES_ROOT, tipKey); }
BOOL RegisterServer() { DWORD dw; HKEY hKey; HKEY hSubKey; BOOL fRet; char achIMEKey[ARRAYSIZE(c_szInfoKeyPrefix) + CLSID_STRLEN]; TCHAR achFileName[MAX_PATH]; if (!CLSIDToStringA(c_clsidTextService, achIMEKey + ARRAYSIZE(c_szInfoKeyPrefix) - 1)) return FALSE; memcpy(achIMEKey, c_szInfoKeyPrefix, sizeof(c_szInfoKeyPrefix)-sizeof(TCHAR)); if (fRet = RegCreateKeyEx(HKEY_CLASSES_ROOT, (LPCSTR)achIMEKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dw) == ERROR_SUCCESS) { fRet &= RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE *)TEXTSERVICE_DESC_A, (lstrlen((LPCSTR)(TEXTSERVICE_DESC_A)+1))*sizeof(TCHAR)) == ERROR_SUCCESS; if (fRet &= RegCreateKeyEx(hKey, c_szInProcSvr32, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hSubKey, &dw) == ERROR_SUCCESS) { dw = GetModuleFileNameA(g_hInst, (LPCH)(achFileName), ARRAYSIZE(achFileName)); fRet &= RegSetValueEx(hSubKey, NULL, 0, REG_SZ, (BYTE *)achFileName, (lstrlen(achFileName)+1)*sizeof(TCHAR)) == ERROR_SUCCESS; fRet &= RegSetValueEx(hSubKey, c_szModelName, 0, REG_SZ, (BYTE *)TEXTSERVICE_MODEL, (lstrlen(TEXTSERVICE_MODEL)+1)*sizeof(TCHAR)) == ERROR_SUCCESS; RegCloseKey(hSubKey); } RegCloseKey(hKey); } return fRet; }
void UnregisterServer() { char achIMEKey[ARRAYSIZE(c_szInfoKeyPrefix) + CLSID_STRLEN]; if (!CLSIDToStringA(c_clsidTextService, achIMEKey + ARRAYSIZE(c_szInfoKeyPrefix) - 1)) return; memcpy(achIMEKey, c_szInfoKeyPrefix, sizeof(c_szInfoKeyPrefix) - 1); RecurseDeleteKeyA(HKEY_CLASSES_ROOT, achIMEKey); }