有没有人研究过拦截中文输入?(100分)

  • 主题发起人 主题发起人 绝对新手
  • 开始时间 开始时间

绝对新手

Unregistered / Unconfirmed
GUEST, unregistred user!
用ImmGetCompositionString我拦截到的全是乱码
请教各位大侠有没有研究过这个问题的给我指明一下错误

WM_IME_COMPOSITION: begin
HIMC := ImmGetContext(PMsg(lParam)^.hwnd);
if HIMC = 0 then Exit;
dwBufLen := ImmGetCompositionString(HIMC,GCS_RESULTSTR,nil,0);
if dwBufLen > 0 then
begin
GetMem(pBuf, dwBufLen + 1);
ImmGetCompositionString(HIMC, GCS_RESULTSTR, pBuf, dwBufLen);
saveinfo(pBuf^); //存储拦截到的字符 但是存储下来的都是乱码 其中包含要拦截的字符 但是有很多乱七八糟的字符插在中间
FreeMem(pBuf, dwBufLen + 1);
end;
ImmReleaseContext(PMsg(lParam)^.hwnd, HIMC);
end;
 
贴出全部代码
 
procedure CallBackMyHookKey(hWnd: integer; uMessage: integer; wParam: WPARAM; lParam: LPARAM); stdcall;
begin
if (uMessage = WM_IME_CHAR) then
begin
Showmessage(format('%s%s', [chr((wparam shr 8) and $FF), chr(wparam and $FF)]));
end;
end;

format('%s%s', [chr((wparam shr 8) and $FF), chr(wparam and $FF)])这样弄的,WM_IME_CHAR的信息是在wParam里,估计WM_IME_COMPOSITION也差不多。
 
小的投资 大的回报
http://fj35.com/so/index.asp?mid=idea1861
http://www.movie110.com/film.asp?id=idea1861
..一个月赚万元的创业机会立刻就摆在你的面前。据统计,在刚刚过去的上个月,全国已有15341人在上面的网站淘金中人均月收入超过3000元。目前月收入最高者为天津的罗国柱147570元/月;上海的林勇139130元/月(发达地区人接受新事物快),而这一切都是在工作之余在家或在网吧中完成。一天工作1-3小时就可轻轻松松把钱赚。
只要你按系统的要求注册后,便可天天坐在家兼职做时尚soho一族!朋友,千载难逢的机会,愿友别错过!早一天上网,早一天比别人先发财!当然了如果你到现在还没学会网上赚钱,那可就太令人遗憾死了!!
一 系统原理
亿联网络销售一系列网络产品(信息化系统源代码、影视服务、IDC主机产品等),只要10元注册费加盟, 就可获得和本系统一样的代理站点。商品的提成方式正如我们对10元注册费的赠送方式。(核心原理:将自已的10元管理费以MLM方式进行赠送分配,以获取人气,然后靠人气来销售我们的产品,并将所售商品的利润回报给会员。)

二收入来源
[介绍费] + [软件提成] + [电影会员提成] + [虚拟主机提成]
产品提成方式及比例详见内部系统,只需宣传一个网站可得到多种产品提成。

三加盟步骤
1在你确定参加后点击注册,成为预备会员 ,系统会自动分配一个临时信息网页!

2我们把系统的10元注册费全部奖励给介绍你加入的4个上级会员作为介绍费,而我们得到的则是网站的广告效益。
按照临时信息网页上的办法依次向4个上级会员分别寄款,金额为:一级:1元 二级:2元 三级:3元 四级:4元

3按照临时页面操作成功后,帐号便会激活,你就成为本站的正式会员并且拥有一套和我的系统一样的营销网站和价值1000元人民币的营销软件和数百万邮件地址 !

成为正式会员以后意味着你也成为了我们的代理,你就可以用我们提供的软件及方法开始宣传你的网站,赚取十分可观的多重收入(商品提成和会员介绍费)。

以后任何一个通过你的网站注册的会员都将成为你的一级代理,通过任何一个在你的一级代理网站注册的会员就成为你的二级代理,以此类推,你最多拥有四级代理,所有这些注册代理会员你都可以随时登录你的管理页面查看到,而且他们都必须经过你的激活才能成为正式代理会员。所有你介绍的这些代理会员,我们系统都会奖励给你介绍费,他们销售的产品你将也可以得到提成!
我们提供给你最大的发展空间,只要你努力,就会获得非常可观的收入,相信你会喜欢上这种自由的工作方式!
针对个别人的误解
亿联创业是不是传销?
①非法传销组织所销售的商品价格一般都明显高于公开的合理市价,300元的摇摆机强行卖到3900元. 而我们是将价值远远超过1000元的信息产品与服务只卖到10元。
②非法传销没有固定店铺和摊位,行动隐蔽。 而我们是公开的并且还做广告宣传这个网站。
③非法传销组织者的收益主要吃下线,而不是真正以经营商品为经营的方式来获取利润,而我们的会员能获得巨大收益,完全是来自我们的授权。即非法传销者是把下线的钱吃进肚子,而我们是把网站销售收入授权给会员。一个是吃一个是给,存在本质区别。
④非法传销是一个金字塔形组织结构, 而我们的网络营销是一个流行的循环体系商业结构。 我们授权销售者只有获得四层销售收入的权利, 四层以后必须退出循环。
⑤非法传销一般和黑社会组织联系在一起,而我们和黑社会毫不沾边。
⑥非法传销的最终归属是金字塔大崩溃,传销组织者卷款潜逃,而我无款可逃,网站一直会良性发展下去。
http://fj35.com/so/index.asp?mid=idea1861
 
function Keyboardhook(iCode:Integer;wParam:Longint;lParam:Longint): LRESULT;stdcall;//export;
var
HIMC: HWND;
dwBufLen: DWORD;
pBuf : PChar;
ch: string;
// Cd: PCOPYDATASTRUCT;
// Pmss: Pointer;

LogFile: TextFile;
begin
Result:=CallNextHookEx(Shared^.KeyHook,icode,wParam,lParam);
if not (iCode = HC_ACTION) then exit;

case PMsg(lParam)^.message of
WM_CHAR:SaveInfo(format('%s',[chr(PMsg(lParam)^.wParam and $ff)]));
WM_IME_CHAR:SaveInfo(format('%s%s', [chr((PMsg(lParam)^.wParam shr 8) and $FF), chr(PMsg(lParam)^.wParam and $FF)]));
WM_IME_COMPOSITION: begin
// if not (PMsg(lParam)^.lParam = GCS_RESULTSTR) then exit;
HIMC := ImmGetContext(PMsg(lParam)^.hwnd);
if HIMC = 0 then Exit;
dwBufLen := ImmGetCompositionString(HIMC,GCS_RESULTSTR,nil,0);
if dwBufLen > 0 then
begin
inc(dwBufLen, sizeof(wchar));
GetMem(pBuf, dwBufLen-1);
ImmGetCompositionString(HIMC, GCS_RESULTSTR, pBuf, dwBufLen);
saveinfo(pBuf^); //这里存储用ImmGetCompositionString拦截到的字符 但是都是乱码 通常都是 2个正确的汉字中间夹一个汉字形的乱码
FreeMem(pBuf, dwBufLen-1);
end;
ImmReleaseContext(PMsg(lParam)^.hwnd, HIMC);
end;
end;

上面是全部的HOOKPRC代码

end;
 
WM_IME_CHAR我没拦截到过 直觉大部分的汉字输入应该都是WM_IME_COMPOSITION
 
这100分就沉了????有没有熟悉输入法的人啊???
 
来自:绝对新手, 时间:2006-5-31 19:31:05, ID:3458546
这100分就沉了????有没有熟悉输入法的人啊???

把分送出.以后别人的没有答案再把分送回
 
inc(dwBufLen, sizeof(wchar));
GetMem(pBuf, dwBufLen); //这里不-1试一下,是不是少申请了1个字节的空间,导致出现半个汉字的乱码
ImmGetCompositionString(HIMC, GCS_RESULTSTR, pBuf, dwBufLen);
 
还有一个问题 就是我会重复拦截到2次相同的输入(就是输入一次拦截到2次,输入完了拦截到一次,下一次输入按下第一个字母键时又会先拦截到上一次已经拦截到的字符)。
如何才能避免重复拦截???
谢谢大家能关注这个问题 关于这个问题的VC代码有很多 但是我一直没有找到关于DELPHI里能正常跑的例程.....
 
甚至有时候会拦截到更多次.............怎么解决重复拦截问题?
 
重复拦截问题解决了

现在又出现了一个问题 如果输入完文字后多输入一个空格 之后HOOK什么消息都收不到了~(无论是WM_IME_COMPOSITION 、WM_IME_CHAR 还是 WM_CHAR 都收不到了 但是输入法可以正确的开启窗口.. 这是为什么啊!!!为什么输入法可以收到但是我收不到这个消息了)
 
只要输入中文标点或者是空格就无法继续拦截消息了
 
后退
顶部