return version;\r
}\r
\r
+bool getTIPFilename(REFCLSID clsid, WCHAR* filename, DWORD len) {\r
+ // Format registry path for CLSID\r
+ WCHAR reg_path[100];\r
+ _snwprintf(reg_path, ARRAYSIZE(reg_path),\r
+ L"CLSID\\{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\\InProcServer32",\r
+ clsid.Data1, clsid.Data2, clsid.Data3,\r
+ clsid.Data4[0], clsid.Data4[1], clsid.Data4[2], clsid.Data4[3],\r
+ clsid.Data4[4], clsid.Data4[5], clsid.Data4[6], clsid.Data4[7]);\r
+ HKEY reg_key = NULL;\r
+ RegOpenKeyW(HKEY_CLASSES_ROOT, reg_path, ®_key);\r
+ if (!reg_key) return false;\r
+ DWORD type = REG_NONE;\r
+ DWORD l = 0;\r
+ bool result = false;\r
+ if ((ERROR_SUCCESS == RegQueryValueExW(reg_key, 0, 0, &type, 0, &l)) &&\r
+ (type == REG_SZ) && (l > 0) && (len >= l)) {\r
+ if (ERROR_SUCCESS ==\r
+ RegQueryValueExW(reg_key, 0, 0, 0, (LPBYTE)filename, &len)) {\r
+ filename[len] = '\0';\r
+ result = true;\r
+ }\r
+ }\r
+ RegCloseKey(reg_key);\r
+ return result;\r
+}\r
+\r
typedef UINT (WINAPI* GetReadingString_funcType)(HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT);\r
\r
void handleOpenStatus(HWND hwnd) {\r
version=getIMEVersion(kbd_layout,filename);\r
}\r
}\r
+ else if(getTIPFilename(curTSFClsID, filename, MAX_PATH)) {\r
+ // Look up filename of active TIP\r
+ IMEFile=LoadLibrary(filename);\r
+ if(IMEFile) {\r
+ GetReadingString=(GetReadingString_funcType)GetProcAddress(IMEFile, "GetReadingString");\r
+ }\r
+ }\r
if(GetReadingString) {\r
// Use GetReadingString() API if available\r
UINT len = 0;\r
break;\r
\r
case IMN_PRIVATE:\r
- if(!isTSFThread(true)) handleReadingStringUpdate(hwnd);\r
+ handleReadingStringUpdate(hwnd);\r
break;\r
}\r
break;\r
\r
using namespace std;\r
\r
+CLSID curTSFClsID={0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
bool isUIElementMgrSafe=false;\r
\r
\r
STDMETHODIMP TsfSink::OnActivated(REFCLSID rClsID, REFGUID rProfGUID, BOOL activated) {\r
const CLSID null_clsid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
if (!activated) {\r
+ curTSFClsID=null_clsid;\r
hasActiveProfile=false;\r
return S_OK;\r
}\r
//Re-enable IME conversion mode update reporting as input lang change window message disabled it while completing the switch\r
+ curTSFClsID=rClsID;\r
disableIMEConversionModeUpdateReporting=false;\r
if (IsEqualCLSID(rClsID, null_clsid)) {\r
hasActiveProfile = false;\r