keybd_event 模似键盘, 怎么打中文

骄傲青蛙 2009-10-21 01:12:32
模似键盘, 怎么输出字符串, 怎么输出中文 ?
...全文
784 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
骄傲青蛙 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 hjkto 的回复:]
在qq里好用,没想到在代码中不好用
后来找到了爱字的正确ascii码值:45230
解决了
[/Quote]

这几天, 我忙着别的事情, 暂时没空研究这个, 不知你有什么成果 , 我看到了一半
hjkto 2009-10-23
  • 打赏
  • 举报
回复
在qq里好用,没想到在代码中不好用
后来找到了爱字的正确ascii码值:45230
解决了
hjkto 2009-10-23
  • 打赏
  • 举报
回复
我也找到原因了
哪个爱字的ascii码错了,我是用系统自带的字符映射器和百度搜索到的,在qq和
无条件为你 2009-10-23
  • 打赏
  • 举报
回复
19楼的代码可以打中文,看来楼主的问题离解决不远了。

我是三楼的,既然楼主已经加分,我再多给些提示:

打中文时需要注意中文与字母或数字混杂在一起的情况。本来我想直接给你贴出代码,可是考虑到楼上已经有这么多人回答了比较接近正常答案的回复,我再贴出代码也未必能拿到你给的全部分。因此再给你一些提示算了。这样也激发楼的一点钻研精神。

hjkto 2009-10-23
  • 打赏
  • 举报
回复
52946 这个“我”字,是怎么得来的
我用系统的字符映射器,“我”字应该是25105

求解?
hjkto 2009-10-23
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.SetFocus;
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_NUMPAD5, MapVirtualKey(VK_NUMPAD5, 0), 0, 0);
keybd_event(VK_NUMPAD5, MapVirtualKey(VK_NUMPAD5, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), 0, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), 0, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), 0, 0);
keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), 0, 0);
keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
sleep(100);
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), 0, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), 0, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), 0, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD3, MapVirtualKey(VK_NUMPAD3, 0), 0, 0);
keybd_event(VK_NUMPAD3, MapVirtualKey(VK_NUMPAD3, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD3, MapVirtualKey(VK_NUMPAD3, 0), 0, 0);
keybd_event(VK_NUMPAD3, MapVirtualKey(VK_NUMPAD3, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
end;

end.
为什么,第二个字“爱”字,打出来是r呢?
gwhdaxia 2009-10-23
  • 打赏
  • 举报
回复
应该还要去判断下是汉字还是字母,还挺麻烦的
gwhdaxia 2009-10-23
  • 打赏
  • 举报
回复
str := '问';
tmpstr := Inttostr(byte(str[1]) shl 8 + byte(str[2])) ;
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);

while length(tmpstr)>0 do
begin
itmp := StrToInt(LeftStr(tmpstr,1))+96;
tmpstr := RightStr(tmpstr,Length(tmpstr)-1);
keybd_event(itmp, MapVirtualKey(itmp, 0), 0, 0);
keybd_event(itmp, MapVirtualKey(itmp, 0), KEYEVENTF_KEYUP, 0);
end;

keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
hjkto 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 coolesting 的回复:]
引用 15 楼 hjkto 的回复:
引用 14 楼 byteh 的回复:
keybd_event模拟输出字符还行,打中文思路不对,考虑各种输入法的编码和键盘布局了吗?


3楼说行,你就试了半个晚上,也没弄成
郁闷



有难度, 看帖

http://topic.csdn.net/u/20090121/16/fdb85822-9d4d-47e2-8662-75b08d968bb0.html
[/Quote]

人家做到了
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.SetFocus;
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_NUMPAD5, MapVirtualKey(VK_NUMPAD5, 0), 0, 0);
keybd_event(VK_NUMPAD5, MapVirtualKey(VK_NUMPAD5, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), 0, 0);
keybd_event(VK_NUMPAD2, MapVirtualKey(VK_NUMPAD2, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), 0, 0);
keybd_event(VK_NUMPAD9, MapVirtualKey(VK_NUMPAD9, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), 0, 0);
keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), 0, 0);
keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
end;

end.
看来,还是你自己把问题解决了!
佩服楼主
骄傲青蛙 2009-10-23
  • 打赏
  • 举报
回复
模似剪粘板
http://www.cnblogs.com/feiyucq/archive/2009/08/09/1542456.html
骄傲青蛙 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hjkto 的回复:]
引用 14 楼 byteh 的回复:
keybd_event模拟输出字符还行,打中文思路不对,考虑各种输入法的编码和键盘布局了吗?


3楼说行,你就试了半个晚上,也没弄成
郁闷
[/Quote]


有难度, 看帖

http://topic.csdn.net/u/20090121/16/fdb85822-9d4d-47e2-8662-75b08d968bb0.html
lek608 2009-10-23
  • 打赏
  • 举报
回复
这是我模拟输入R字母和鼠标事件的一段程序:你可以参考
if (hParent <> 0) then
ShellExecute(handle,'open',Pchar(filestr),nil,nil,sw_shownormal);
sleep(2000);
keybd_event(ord(82), MapVirtualKey(ord(82), 0 ),0, 0 );
keybd_event(ord(82), MapVirtualKey(ord(82), 0 ),KEYEVENTF_KEYUP, 0 );
sleep(2000);
SetCursorPos(0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
keymouseblock(0);
hjkto 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 byteh 的回复:]
keybd_event模拟输出字符还行,打中文思路不对,考虑各种输入法的编码和键盘布局了吗?
[/Quote]

3楼说行,你就试了半个晚上,也没弄成
郁闷
byteh 2009-10-23
  • 打赏
  • 举报
回复
keybd_event模拟输出字符还行,打中文思路不对,考虑各种输入法的编码和键盘布局了吗?
hjkto 2009-10-23
  • 打赏
  • 举报
回复
按3楼的思路给你写了一下,没有成功,看来,没哪么简单!!
shaoyiping 2009-10-22
  • 打赏
  • 举报
回复
哥哥我一般用 SetWindowText(HWND hwnd,LPCTSTR lpStrjng);

winstonbonaparte 2009-10-22
  • 打赏
  • 举报
回复
語法稍為不一樣,有些屬性可能也不一樣。其它沒啥的
骄傲青蛙 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]
我有一个VB的例子,你看得懂VB不?要是需要,给我消息
[/Quote]

发来参考, 但VB转换为delphi, 不知那些系统自带的功能会有不
hjkto 2009-10-22
  • 打赏
  • 举报
回复
按住alt+39277出现 饭,alt+26742出现 桶
hjkto 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 coolesting 的回复:]
我想把Eidi1.text的内容, 用keybd_event打出去,
[/Quote]

你的想法,我也赞成,但我也不会,每天帮你顶一下,就当支持。

写程序,怎么复杂怎么写
加载更多回复(7)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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