我尝试了一些代码来获取韩国os win7和win10中的ImmGetCandidateList()的“汉字列表”。
我正在制作游戏。我需要一个汉字列表在游戏中。 当我在Windows7中运行时,我可以使用ImmGetCandidateList()获取Hanja List。 但是,当我在Windows10中运行时,我无法获得HanjaList。
我不知道为什么会这样。
码
DWORD dwBufLen = 0;
LPCANDIDATELIST pCandiList = (LPCANDIDATELIST)new CHAR[1024];
HHOOK gHook;
LRESULT CALLBACK WinHookCallBack(INT nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT* lpWp = (CWPSTRUCT*)lParam;
switch (lpWp->message)
{
case WM_IME_NOTIFY:
{
if (lpWp->wParam == IMN_OPENCANDIDATE)
{
return 0;
}
HIMC hImc = ImmGetContext(hWnd);
memset(pCandiList, 0, sizeof(CHAR) * 1024);
dwBufLen = ImmGetCandidateList(hImc, 0, pCandiList, 0);
ImmReleaseContext(hWnd, hImc);
}break;
default:
break;
}
return CallNextHookEx(gHook, nCode, lpWp->wParam, lpWp->lParam);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
HWND hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("edit"), TEXT("test"), WS_CHILD | WS_VISIBLE, 100, 20, 140, 20, hWnd, NULL, NULL, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
gHook = SetWindowsHookEx(WH_CALLWNDPROC, WinHookCallBack, GetModuleHandle(NULL), GetWindowThreadProcessId(hWnd, NULL));
HWND hWndIME = ImmGetDefaultIMEWnd(hWnd);
ShowOwnedPopups(hWndIME, false);
return TRUE;
}
我为IME测试做了一个简单的win32项目。 我尝试了两种方式。
当我专注于Textfield之外。 dwBufLen大于零。 但是,当我专注于Textfield时。 dwBufLen为零。我可以看到默认的候选窗口。
我认为当默认候选窗口禁用时,我可以获得一个汉字列表。
当我关注Textfield时,如何获得汉字列表。
我需要一个汉字候选列表才能在MyProject中使用。
感谢您阅读我的帖子。 :)
答案 0 :(得分:0)
当我集成DxDsample的TSF系统时。它正在Win10中工作。
如果有人遇到问题,请尝试。