如何用DELPHI编程实现delphi 键盘模拟拟功能

最简单好用的驱动级虚拟鼠标虚拟键盘 — 编程爱好者社区
主题:最简单好用的驱动级虚拟鼠标虚拟键盘
[专家分:0]
支持&WINXP&,&WIN2003&,&WIN2008&,&VISTA&,&WIN7&,32位和64位操作系统。适用&VB6,&DELPHI,&VC,&BC,&VB.NET,&C#,&易语言等各种编程语言写的应用程序调用。一键安装和卸载,实现模拟按键操作只需加载DD入口文件DD_EntryNNNNN.dll&,然后调用接口函数即可。个人桌面应用和游戏工作室装机必备&&&接口函数说明:1.&&DD_btn(参数)&&&&&功能:模拟鼠标点击&&&&&参数:&1=左键按下,2=左键放开&&,4=右键按下,8=右键放开&&&&&例子:模拟鼠标右键只需要连写&dd_btn(4)&;&dd_btn(8)2.&&DD_mov(参数x,参数y)&&&&&功能:模拟鼠标移动&&&&&参数:&参数x&,&参数y&以屏幕左上角为原点。&&&&&例子:把鼠标移动到分辨率&的屏幕正中间,&&&&&&&&&&&&&&&&&int&x&=&1920/2&;&&&int&y&=&1080/2;&&&&&&&&&&&&&&&&&DD_mov(x,y)&;3.&&DD_key(参数1,参数2)&&&&&功能:模拟键盘按键&&&&&参数:参数1,DD键码,参数2,1=按下,2=放开&&&&&例子:模拟TAB按键,只需连写&&&&&&&&&&&&&&&&DD_key(15,&1);&&&&&&&&&&&&&&&&DD_key(15,&2);&&&&&鼠标键盘模拟操作都只需这&DD_btn&,&DD_mov&&,&DD_key&三个简单的函数即可完成。&&&&&&下载地址:&[url=][/url]
最后更新于: 18:16:00
本帖地址:&
回复列表 (共1个回复)
[专家分:280]
可以用keybd_event、mouse_event模拟键盘时间,不过这样模拟出来的键盘鼠标事件你的程序不一定能接受到。最好用SendMessage、PeekMessage发送WM_KEYXXX和WM_MBXXXX消息。具体怎样实现去查看一下键盘事件和鼠标事件消息就可以了
您尚未登录,请登录后再回复。用应用程序模拟键盘和鼠标按键_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用应用程序模拟键盘和鼠标按键
上传于|0|0|文档简介
&&自己平时收集的一些资料,有需要的可以下载看看!
你可能喜欢VC编程实现指定窗口的按键或鼠标事件模拟
实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^。通常,模拟键盘鼠标事件有两种方法:
1.keybd_event, mouse_event
2.SendMessage, PostMessage
后者更强大,指定hwnd后可以后台发送对应的鼠标键盘消息,而后者只能够发送前台信息,也就是只能向前端窗口发送消息。
下面是简单的用法举例:
方法1:使用keybd_event, mouse_event
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
keybd_event(k,0,0,0);
keybd_event(k,0,KEYEVENTF_KEYUP,0);
方法2:使用SendMessage, PostMessage
向当前程序的ID为IDC_EDIT1的输入框输入字符:
HWND tw2 = GetDlgItem(IDC_EDIT1)-&m_hW
::SendMessage(tw2,WM_CHAR,s[i],0);
向ID为IDOK的按钮发送鼠标单击事件:
HWND tw3 = GetDlgItem(IDOK)-&m_hW
::SendMessage(tw3,WM_LBUTTONDOWN,0,0);
::SendMessage(tw3,WM_LBUTTONUP,0,0);
向打开的记事本输入字符
wnd = ::FindWindow(&notepad&,
FindWindowEx(wnd,0,&Edit&,NULL);
::SendMessage(tw2,WM_CHAR,s[i],0);
如果说你不知道名字叫Edit,那么有下面的方法:
CWnd * pwnd = FindWindow(&notepad&,
CWnd * p2 = pwnd-&GetTopWindow();
wnd = p2-&m_hW
::SendMessage(tw2,WM_CHAR,s[i],0);
如果连notepad也不知道的话,你可以使用进程ID:遍历进程池得到想要的进程ID,然后找到指定ID的hwnd
dwProcessID;
EnumWinProc(HWND
EnumParam*
(EnumParam*)lP
GetWindowThreadProcessId(hwnd,&dwID);
pep-&dwProcessID)
pep-&hMainWnd =
STARTUPINFO
PROCESS_INFORMATION
ep.hMainWnd
memset(&si,
sizeof(si));
sizeof(STARTUPINFO);
(CreateProcess(NULL,&notepad.exe
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
ep.dwProcessID
pi.dwProcessId;
while(!ep.hMainWnd)
EnumWindows((WNDENUMPROC)EnumWinProc,
(long)&ep);
//没有下面的一行,CPU的使用率会高居不下,同时其它的程序
//也会执行的很慢(包括程序启动的Notepad.exe)
(ep.hMainWnd==NULL)
Sleep(20);
//EnumWindows((WNDENUMPROC)EnumWinProc, (long)&ep);
ep.hMainWnd
就是你要的NodePad.exe窗口的句柄
//接下来由hwnd得到CWND *
wnd = ep.hMainW
if(wnd == NULL) AfxMessageBox(&Fasle&);
CWnd * tc = FromHandle(wnd);
wnd = tc-&GetTopWindow()-&m_hW
::SendMessage(tw2,WM_CHAR,s[i],0);
遍历进程的代码下次再发了
欢迎与本站!
QQ交流群1:
QQ交流群2:欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 7145 人关注过本帖
标题:c语言如何实现模拟键盘输入?
等 级:新手上路
结帖率:100%
&&已结贴√
&&问题点数:20&&回复次数:10&&&
c语言如何实现模拟键盘输入?
是这样的,我在做c语言程序设计,是海龟作图问题。源代码如下:
#include&stdio.h&
void print(int [][51]);
void move(int [][51],int,int,int);
void yidong(int [][51],int,int,int);
int x=0,y=0;&&//海龟位置坐标,为全局变量,初始在左上角。
int main()
&&& int step[51][51];
&&& int i,j,a=1,gostep=1,direct=1,record=1;
&&& for(i=0;i&=49;i++)
&&&&&&for(j=0;j&=49;j++)
&&&&&&&&& step[i][j]=0;
&&&&&&for(;;){&&&&&&&&&printf(&a=%d,gostep=%d,direct=%d,record=%d,x=%d,y=%d\n&,a,gostep,direct,record,x,y);&&&&&&
&&&&&& printf(&请输入 a &);//(输入“1”代表不记录移动痕迹,“2”代表记录移动痕迹;“3”代表笔尖向左转,“4”代表笔尖向右转,“5”代表开始移动gostep步
&&&&&& scanf(&%d&,&a);
&&&&&& if(a==2) record=1;
&&&&&& if(a==1) record=0;
&&&&&& if(a==4)
&&&&&&&&&&&&direct++;
&&&&&&&&&&&&if(direct==5) direct=1;
&&&&&&&&&&&&
&&&&&& if(a==3)
&&&&&&&&& direct--;
&&&&&&&&& if(direct==0) direct=4;
&&&&&&if(a==5)
&&&&&&{&&&printf(&请输入 gostep&);
&&&&&&&&& scanf(&%d&,&gostep);
&&&&&&&&& move(step,gostep,direct,record);
&&&&&&if(a==6)
&&&&&&&&print(step);
&&&&&&if(a==7)
&&&&&&{printf(&请输入 gostep&);
&&&&&&&&& scanf(&%d&,&gostep);
&&&&&&&&& yidong(step,gostep,direct,record);
&&&&&&if(a==9)
&&&&&&&&return 0;
//打印海龟踪迹,显示在屏幕上
void print(int s[][51])
&&& int i,j;
&&& for(i=0;i&50;i++){
&&&&&&&&for(j=0;j&50;j++){
&&&&&&&&&&&&printf(s[i][j]==0? &-&:&*&);
&&& printf(&\n&);
//海龟移动,i,j,k分别对应:gostep,direct,record
void move(int t[][51],int i,int j,int k)
&&& int xmove,ymove,
&&& if(j==1)
&&&&&&&&xmove=1;ymove=0;}
&&& if(j==2)
&&&&&&&&xmove=0;ymove=1;
&&& if(j==3)
&&&&&&&&xmove=-1;ymove=0;
&&& if(j==4)
&&&&&&&&xmove=0;ymove=-1;
&&& for(num=0;num&i;num++)
&&& {&&&&&&&&
&&&&&&&&if(x&0||x&50||y&0||y&50)
&&&&&&&&&&&& printf(&the place is danger ,you are died\n&);
&&&&&&&&&&&&
&&&&&&&&}&&&
&&&&&&&&t[y][x]+=k;
&&&&&&&&x=x+
&&&&&&&&y=y+
void yidong(int t[][51],int i,int j,int k)
&&& int xmove,ymove,
&&& if(j==1)
&&&&&&&&xmove=-1;ymove=1;}
&&& if(j==2)
&&&&&&&&xmove=1;ymove=1;
&&& if(j==3)
&&&&&&&&xmove=1;ymove=-1;}
&&& if(j==4)
&&&&&&&&xmove=-1;ymove=-1;
&&& for(num=0;num&i;num++)
&&& {&&&&&&&&
&&&&&&&&if(x&0||x&50||y&0||y&50)
&&&&&&&&&&&& printf(&the place is danger ,you are died\n&);
&&&&&&&&&&&&
&&&&&&&&}&&&
&&&&&&&&t[y][x]+=k;
&&&&&&&&x=x+
&&&&&&&&y=y+
但是每次都要手动输入一大堆数字,很麻烦。请问如何实现模拟键盘输入,只要每次运行就会自动输入以下数字:
1,4,5,5,3,2,5,50,&&1,4,5,5,4,2,5,50,&&1,4,5,10,4,5,25,2,4,5,10,&&1,5,5,4,2,5,22,&&3,5,10,&&3,5,44,&&3,5,10,&&3,5,22,&&&1,3,5,12,2,5,5,4,5,20,3,3,5,40,4,4,5,20,3,5,1,7,12,4,4,7,12,4,7,13,6。
搜索更多相关主题的帖子:
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
&&得分:10&
从文件中读入数据
授人以渔,不授人以鱼。
等 级:蜘蛛侠
帖 子:517
专家分:1373
&&得分:10&
可以在Debug时直接给变量赋初值,在Release时由用户输入
模拟键盘是keybd_event,但LZ的想法有点偏,此问题不需要模拟键盘
为游戏狂~~!!&&& 大家努力编哈!
等 级:新手上路
回复 3楼 smallmoon521
那要用什么做啊?我是初学者,不懂啊!!现在万分困惑
等 级:新手上路
回复 2楼 TonyDeng
可不可以写一段代码我看看啊?我根本不知道该如何操作啊
等 级:新手上路
回复 3楼 smallmoon521
比如我输入回车键的话, 这样写对吗? keybd_event(VK_RETURN 0D,0,0,0);
不知道为什么这样写第一次编译通过了,之后就一直有错误
等 级:蜘蛛侠
帖 子:517
专家分:1373
回复 4楼 耨人
我现在怀疑这个源码是不是你自己写的了
否则你应该懂我在说什么的
简单点说:
scanf(&%d&,&a);
这样是手动输入,如果你测试时每次都要输入4,直接写成:
int a = 4;
明白了吗?
为游戏狂~~!!&&& 大家努力编哈!
等 级:新手上路
回复 7楼 smallmoon521
a是无法直接赋值的啊,我就是用a来控制海龟移动的啊
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
以下是引用耨人在 17:26:55的发言:
可不可以写一段代码我看看啊?我根本不知道该如何操作啊把scanf(&%d&,&a)改为每次从文件中读入一个数字,不用键盘输入。
授人以渔,不授人以鱼。
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
scanf()函数的本质,是从一个叫stdin的文件中读取数据,即fscanf(stdin,&%d&,&a),现在你不要用stdin,改用普通的文本文件fp,fscanf(fp,&%d&,&a)就自动从文件fp中读入一个数,等效于你在键盘上预先键入了所有数据(所谓缓存就是这个道理),然后程序依次读入。
[ 本帖最后由 TonyDeng 于
21:39 编辑 ]
授人以渔,不授人以鱼。
版权所有,并保留所有权利。
Powered by , Processed in 0.069147 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2011年9月 Delphi大版内专家分月排行榜第二2011年7月 Delphi大版内专家分月排行榜第二2011年6月 Delphi大版内专家分月排行榜第二2011年4月 Delphi大版内专家分月排行榜第二
2014年4月 Delphi大版内专家分月排行榜第二2011年12月 Delphi大版内专家分月排行榜第二
2012年1月 Delphi大版内专家分月排行榜第三2011年9月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2009年10月 Delphi大版内专家分月排行榜第二2009年8月 Delphi大版内专家分月排行榜第二2008年9月 Delphi大版内专家分月排行榜第二
2008年7月 Delphi大版内专家分月排行榜第三2008年6月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 delphi模拟键盘教程 的文章

 

随机推荐