有没有能输入中文字符串的 SendKeys 方法?(200分)

  • 主题发起人 主题发起人 HookBoy
  • 开始时间 开始时间
H

HookBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
本来利用 sndkey32 的 SendKeys 来做发送键及英文字符很好,<br>但是却没有办法进行中文字符的传送。找了很多的函数,却执行不了。大多出现乱码。<br>所以想问问大家有没有能输入中文字符串的 SendKeys 方法?
 
试试下面的代码<br>========================<br>procedure SendKeys(focushld: HWND; sSend: string);<br>var<br>i:integer;<br>ch: byte;<br>begin<br>i := 1;<br>while i &lt;= Length(sSend) do<br>begin<br>ch := byte(sSend);<br>if Windows.IsDBCSLeadByte(ch) then<br>begin<br>Inc(i); <br>SendMessage(focushld, WM_IME_CHAR, MakeWord(byte(sSend), ch), 0);<br>end<br>else<br>SendMessage(focushld, WM_IME_CHAR, word(ch), 0);<br>Inc(i);<br>end;<br>end;<br>//实例--------------------<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>pt: TPOINT;<br>win: HWND;<br>begin<br>sleep(3000);<br>GetCursorPos(pt);<br>win := WindowFromPoint(pt);<br>sendkeys(win,'汉字');<br>end;<br><br>
 
greatwzq:<br>&nbsp; HI,我本来用了剪贴板来做的,感觉很不好。<br>&nbsp; 谢谢你。<br>&nbsp; 给分了, 200分你独得了。交个朋友。
 
接受答案了.
 
greatwzq:<br>不好,你的代码中有这么一个问题,focushld 不好找,它是无法通过<br>GetForegroundwindow<br>来获得的,必须是确切的 EDIT 的 Handle,这样会非常麻烦,因为这个Handle往往是很难找的<br>要么通过<br>GetCaretPos<br>来做?<br>有难度啊。<br>greatwzq能不能再解答一下。
 
我用下面的方法调用,可是不行。 &nbsp;<br>procedure TForm1.Button5Click(Sender: TObject);<br>var<br>&nbsp; focushld,Win: HWND;<br>&nbsp; Pos: TPoint;<br>begin<br>&nbsp; focushld:=findWindow(nil,'未定标题 - 记事本');<br>&nbsp; SetForegroundwindow(focushld);<br>&nbsp; GetCaretPos( Pos );<br>&nbsp; Win:=WindowFromPoint( Pos );<br>&nbsp; sendkeys(Win,'汉字');<br>end;<br>不知道怎么办才好了。
 
GetCursorPos函数检取光标的位置,以屏幕坐标表示,而GetCaretPos函数将插入标记的<br>位置信息拷贝到指定的POINT结构中,是按客户区坐标表示的!
 
后退
顶部