修訂 | 98c0a1605ea8514bb51fe6d478b443c686dd2553 (tree) |
---|---|
時間 | 2018-04-01 16:34:34 |
作者 | Kazuhiro Fujieda <fujieda@user...> |
Commiter | Kazuhiro Fujieda |
Reduce invocations of CoInitializeEx
@@ -32,15 +32,19 @@ void TSFHandler::InitSink() | ||
32 | 32 | { |
33 | 33 | if (TLS::GetTSFHandler()) |
34 | 34 | return; |
35 | - HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); | |
36 | - if (FAILED(hr)) { | |
37 | - DebugLog("CoInitializeEx failed."); | |
38 | - return; | |
39 | - } | |
40 | - if (hr == S_FALSE) | |
41 | - CoUninitialize(); | |
42 | 35 | ITfThreadMgr *thread; |
43 | - if (FAILED(CoCreateInstance(CLSID_TF_ThreadMgr, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&thread)))) { | |
36 | + HRESULT hr = CoCreateInstance(CLSID_TF_ThreadMgr, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&thread)); | |
37 | + if (hr == CO_E_NOTINITIALIZED) { | |
38 | + hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); | |
39 | + if (FAILED(hr)) { | |
40 | + DebugLog("CoInitializeEx failed."); | |
41 | + return; | |
42 | + } | |
43 | + if (hr == S_FALSE) | |
44 | + CoUninitialize(); | |
45 | + hr = CoCreateInstance(CLSID_TF_ThreadMgr, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&thread)); | |
46 | + } | |
47 | + if (FAILED(hr)) { | |
44 | 48 | DebugLog("CoCreateInstance for ThreadMgr failed."); |
45 | 49 | return; |
46 | 50 | } |
@@ -243,7 +243,6 @@ void CXkeymacsDll::ShowHookState() | ||
243 | 243 | LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) |
244 | 244 | { |
245 | 245 | SetKeyboardHook(); |
246 | - TSFHandler::InitSink(); | |
247 | 246 | if (nCode >= 0) { |
248 | 247 | const CWPSTRUCT *cwps = reinterpret_cast<CWPSTRUCT *>(lParam); |
249 | 248 | switch (cwps->message) { |
@@ -341,6 +340,7 @@ LRESULT CALLBACK CXkeymacsDll::ShellProc(int nCode, WPARAM wParam, LPARAM lParam | ||
341 | 340 | void CXkeymacsDll::InitKeyboardProc() |
342 | 341 | { |
343 | 342 | AppName::Init(); |
343 | + TSFHandler::InitSink(); | |
344 | 344 | if (m_CurrentConfig == NULL || |
345 | 345 | _tcsnicmp(m_CurrentConfig->AppName, AppName::GetAppName(), 0xF) || // PROCESSENTRY32 has only 0xF bytes of Name |
346 | 346 | !CUtils::IsMatchWindowText(m_CurrentConfig->WindowText)) { |