#include <Imm.h>\r
#include <Shlwapi.h>\r
#include <TlHelp32.h>\r
-#include <msctf.h>\r
+#include <vector>\r
\r
#ifdef _DEBUG\r
#undef THIS_FILE\r
}\r
}\r
\r
- TCHAR szFilename[MAX_PATH];\r
- TCHAR szDescription[WINDOW_TEXT_LENGTH];\r
- GetIMEInfo(szFilename, szDescription);\r
- szListItem.Format(IDS_APPLICATION_LIST_ITEM, szDescription, szFilename);\r
- if (IsNotSameString(cApplicationList, szListItem))\r
- cApplicationList->AddString(szListItem);\r
+ AddIMEInfo(cApplicationList);\r
\r
// Add Dialog\r
cApplicationList->InsertString(0, CString(MAKEINTRESOURCE(IDS_DIALOG_TITLE)));\r
cApplicationList->SelectString(-1, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));\r
}\r
\r
-void CProfile::GetIMEInfo(const LPTSTR szFilename, const LPTSTR szDescription)\r
+void CProfile::AddIMEInfo(CComboBox *cApplicationList)\r
{\r
- _tcscpy_s(szFilename, MAX_PATH, _T("IME")); // IDS_IME_FILE_NAME;\r
- _tcscpy_s(szDescription, WINDOW_TEXT_LENGTH, _T("Input Method Editor"));\r
- HKL hKL = GetKeyboardLayout(0);\r
- if (!ImmIsIME(hKL))\r
+ const UINT n = GetKeyboardLayoutList(0, NULL);\r
+ if (!n)\r
return;\r
- TCHAR buf[MAX_PATH]; // larger than WINDOW_TEXT_LENGTH\r
- if (ImmGetDescription(hKL, buf, WINDOW_TEXT_LENGTH)) {\r
- _tcscpy_s(szDescription, WINDOW_TEXT_LENGTH, buf);\r
- goto filename;\r
- }\r
- // try TSF\r
- CoInitialize(NULL);\r
- HRESULT hr;\r
- ITfInputProcessorProfiles *pProfiles;\r
- hr = CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, reinterpret_cast<LPVOID*>(&pProfiles));\r
- if (SUCCEEDED(hr)) {\r
- const LANGID langid = GetUserDefaultLangID();\r
- CLSID clsid;\r
- GUID guid;\r
- hr = pProfiles->GetDefaultLanguageProfile(langid, GUID_TFCAT_TIP_KEYBOARD, &clsid, &guid);\r
- if (SUCCEEDED(hr)) {\r
- BSTR bstr;\r
- hr = pProfiles->GetLanguageProfileDescription(clsid, langid, guid, &bstr);\r
- if (SUCCEEDED(hr)) {\r
-#ifdef _MBCS\r
- WideCharToMultiByte(CP_ACP, 0, bstr, -1, szDescription, MAX_PATH, NULL, NULL);\r
-#else\r
- wcscpy_s(szDescription, WINDOW_TEXT_LENGTH, bstr);\r
-#endif\r
- SysFreeString(bstr);\r
- }\r
+ std::vector<HKL> hkls(n);\r
+ GetKeyboardLayoutList(n, &hkls[0]);\r
+ TCHAR szFileName[MAX_PATH];\r
+ TCHAR szDescription[WINDOW_TEXT_LENGTH];\r
+ for (std::vector<HKL>::const_iterator p = hkls.begin(); p != hkls.end(); ++p)\r
+ if (ImmGetDescription(*p, szDescription, WINDOW_TEXT_LENGTH) &&\r
+ ImmGetIMEFileName(*p, szFileName, MAX_PATH)) {\r
+ CString item;\r
+ item.Format(IDS_APPLICATION_LIST_ITEM, szDescription, szFileName);\r
+ if (IsNotSameString(cApplicationList, item))\r
+ cApplicationList->AddString(item);\r
}\r
- pProfiles->Release();\r
- }\r
- CoUninitialize();\r
-filename:\r
- if (ImmGetIMEFileName(hKL, buf, MAX_PATH))\r
- _tcscpy_s(szFilename, MAX_PATH, buf);\r
}\r
\r
void CProfile::GetTaskList()\r