我写的手写程序是用的鼠标钩子,用钩子返回需要手写的窗口的句柄。比如:我要在记事本中用手写输入,我用鼠标在记事本里面点击一下,然后,HOOK程序就把记事本所有的输入窗口的句柄返回给手写程序,然后,在手写程序上面手写字符,用SENDMESSAGE发送消息到记事本的输入窗口,这一步都是完整的实现了,在一般的窗口输入,都没得问题,在QQ窗口输入也没有问题,现在的问题是不能在WORD 正文里面输入字符,在WORD的某些窗口是可以手写输入的,就是不能在正文输入,在网上找了N久,都没有找到相关的资料,请朋友们帮帮忙。看看是不是我哪里的逻辑有问题,或者朋友们帮我给个思路看看。在此,先谢谢了。
现在我把所有的分数都给出。正好100分。谢谢各位了。
现在我把所有的分数都给出。正好100分。谢谢各位了。
解决方案 »
- 数据存储问题
- 问下delphi程序做好后,想打包成安装包,能同时安装数据库,不知道那位有什么好的办法都教我一下
- Excel导数据到SQL问题
- 关于对ORACLE数据库触发器的操作
- 如何FastReport2.5套打报表功能?
- 特殊用途--让系统时间走快,有没有办法?
- "Interface not Supported"!!! ---- 一个关于环境设置的问题
- ****** 如何实现绘图时层的概念?**********
- 关于Delphi学习的经典问题。高手请进。
- Packed record 和 Record的区别,欢迎讨论Delphi的内存管理
- Delphi 中如何刷新DBGrid!!!
- 如何持久化一个TPersistent类
ole方式,输入正文内容肯定是没问题的。。
希望对你有帮助。
这个并不能精确取到某一个窗口的。呵呵。
只能取得最前台的窗口的句柄的。
1.对不同的WinControl采用不同的方法,或者利用GetActiveOleObject
2.通用的办法
procedure SendkeyInput(keys:string);//SendInput
procedure IOKeysPress(KeysString:string);//WINIO
procedure SendKeysMsg(h:hwnd;s:string);//wm_char
function SendKeys(SendKeysString:PChar;Wait:Boolean):Boolean;//keybd_event
当然还有NTIO和驱动我没实现
推荐你用
procedure SendKeysMsg(h:hwnd;s:string);
var
i:integer;
ch:byte;
begin
if h=0 then Exit;
i:=1;
while i<=Length(s) do
begin
ch:=byte(s[i]);
if IsDBCSLeadByte(ch) then
begin
Inc(i);
SendMessage(h,WM_IME_CHAR,MakeWord(Byte(s[i]),ch),0);
end
else SendMessage(h,WM_IME_CHAR,word(ch),0);
Inc(i);
end;
end;