求救!搞了一整体的获取输入法候选字问题!

664email 2009-09-10 09:33:01
我的获取输入法候选字的代码,能获取到候选字字数,但为何获取到不到正确的候选文字?

#include "stdafx.h"
#include "imm.h"
#include "windows.h"
//and imm32.lib

HWND hWnd = 0;
HIMC hIMC = 0;
DWORD dwSize = 0;
LPCANDIDATELIST lpCL = NULL;

hWnd = GetForegroundWindow();
hIMC = ImmGetContext(hWnd);
if (dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
{
lpCL = (LPCANDIDATELIST)GlobalAlloc(GPTR,dwSize);
TCHAR *pStartOfStruct = (TCHAR *)lpCL;
ImmGetCandidateList(hIMC,0x0,lpCL,dwSize);
TCHAR szString[3] = {0};
for (UINT i=0; i < lpCL->dwCount; i++)
{
MessageBoxA(hWnd,((char*)lpCL + lpCL->dwOffset[i]),"",0); //这里显示的文字不是我要的文字
}
GlobalFree((HANDLE)lpCL);
}
ImmReleaseContext(hWnd,hIMC);
...全文
260 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhp1888 2012-01-06
  • 打赏
  • 举报
回复
我是搞输入法的,LZ发错地方了,我现在才看到。

LZ搞定了就好了。

[Quote=引用 5 楼 zhouyl372 的回复:]
楼主 你这个dwPageSize是什么
[/Quote]

回LS:
LPCANDIDATELIST pList是输入法“选字窗口”的指针,pList->dwPageStart是开始页号,pList->dwPageSize是总共有多少页。

另外,
ImmGetCandidateList()等“Imm”打头的函数是输入法专用API接口,要调它,需包含“imm.h”。
zhouyl372 2011-09-27
  • 打赏
  • 举报
回复
楼主 你这个dwPageSize是什么
664email 2009-09-11
  • 打赏
  • 举报
回复
沉得真快
664email 2009-09-11
  • 打赏
  • 举报
回复
自己调试多半天,总算搞定!发布代码来给帮忙顶的 wwwxhb 兄弟,谢谢了

结贴,给自己分

HWND hWnd = 0;
HIMC hIMC = 0;
unsigned long dwCount, dwSize, i, j;
char* pBuf = NULL;
TCHAR* pStr = NULL;
LPCANDIDATELIST pList;

hWnd = GetForegroundWindow();
hIMC = ImmGetContext(hWnd);
dwSize = ImmGetCandidateListCount(hIMC, &dwCount);
pBuf = new char[dwSize];
pList = (LPCANDIDATELIST)pBuf;
for (i = 0; i < dwCount; i++)
{
ImmGetCandidateList(hIMC, i, pList, dwSize);
for (j = 0; j < pList->dwPageSize; j++) {
pStr = (TCHAR*)(pBuf + pList->dwOffset[pList->dwPageStart + j]);
MessageBoxW(hWnd,pStr,L"Unicode",0);
}
}
delete[] pBuf;
ImmReleaseContext(hWnd,hIMC);
wwwxhb 2009-09-10
  • 打赏
  • 举报
回复
帮顶
664email 2009-09-10
  • 打赏
  • 举报
回复
自己顶

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧