我不知道为什么我无法获得 "Hanja list" of ImmGetCandidateList() func

I don't know why can't I get "Hanja list" of ImmGetCandidateList() func

我尝试了一些代码在韩国 os win7 和 win10 中获取 "Hanja List" 的 ImmGetCandidateList()。

我正在制作游戏。我需要游戏中的汉字列表。 当我在 Windows7 中 运行 时,我可以使用 ImmGetCandidateList() 获取汉字列表。 但是,当我在 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;
}

我做了一个简单的win32项目用于输入法测试。 我尝试了两种方式。

focused outside of textfield

focused textfiedl

当我专注于 Textfield 之外时。 dwBufLen 大于零。 但是,当我关注 Textfield. dwBufLen 为零。我可以看到默认候选 window.

我想当默认候选 window 禁用时,我可以获得汉字列表。

当我聚焦 Textfield 时如何获得汉字列表。

我需要在 MyProject 中使用的汉字候选列表。

感谢您阅读我的文章ost。 :)

当我集成DxDsample的TSFsystem时。它在 Win10 中工作。

如果有人遇到问题,请尝试。