C++,怎么让程序模拟用户输入指令,并自行回车以执行该指令(不是写个输出函数只做样子)?

 我来答
dream030607
2022-11-11 · 超过27用户采纳过TA的回答
知道答主
回答量:91
采纳率:88%
帮助的人:11.3万
展开全部

可以用WinApi实现,需要包含windows.h。

需要两个模块,一个是检测回车键的模块,一个是模拟输入指令的模块。


检测回车键,有两个函数可以用: GetKeyState和GetAsyncKeyState,两个函数的参数都是虚拟键码,虚拟键码可以在网站上查询:虚拟键码 | Microsoft Learn

两个函数的返回值相同:返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用<0或>0来判断。

两个函数的区别在于,GetKeyState返回的不是键盘真实状态,而是程序获得的键盘消息。简单地说,如果程序没有获得焦点,则无法获得按键信息,返回的是没有按键的状态。而GetAsyncKeyState返回的是按键的真实状态。

 将GetAsyncKeyState放入循环,每次循环检测有没有按下回车键,如果按下则模拟输入指令;每次循环后Sleep一段时间,节约系统资源。


模拟输入指令同样有两种方法:向指定窗口发送按键信息sendMessage和模拟按键

由于我测试的软件无法用第一个方法,我只介绍第二个方法。

模拟按键就像真实按键一样,只有目标窗口获得焦点时,按键信息才会被目标窗口接收到。因此,一方面,程序不能获得焦点,只能用GetAsyncKeyState函数;另一方面,我们需要让目标窗口获得焦点。

  1. 让目标窗口获得焦点。最简单的方法是手动操作,点击一下。当然也可以用FindWindow函数,或者由程序启动目标程序并获得句柄,然后调用winapi使其获得焦点。由于需求是按回车键开始模拟按键,手动操作即可,这里不多赘述。

  2. 模拟按键一般使用函数Keybd_event。函数有4个参数,一般情况下,第2、4个参数置0即可,第1个参数是按键的虚拟键码,第3个参数是按键状态,0是按下,KEYEVENTF_KEYUP是抬起。注意按下和抬起之间建议Sleep几毫秒,否则目标窗口可能无法获取到按键信息。

  3. 模拟鼠标点击一般使用mouse_event,一般与SetCursorPos(x,y)函数一起使用。与Keybd_event类似,mouse_event有5个参数。第1个为dwFlags,如下图。第2、3个参数分别表示鼠标的相对位置,一般置0。第4个参数是dwData,滚轮移动数量,正值向前,负值向后。第5个参数一般置0。

    使用方法与Keybd_event函数相似。用SetCursorPos(x,y)函数将鼠标光标移到指定位置(距离屏幕左边x,距离屏幕上边y),用mouse_event模拟鼠标点击。也可以先用mouse_event鼠标按下后,再用SetCursorPos(x,y)模拟鼠标拖动。最好中间也Sleep几毫秒。

  4. 请点击输入图片描述


GetKeyState_百度百科

GetAsyncKeyState_百度百科

长妧
2022-11-11
知道答主
回答量:5
采纳率:0%
帮助的人:5917
展开全部
cmd指令调用system函数即可。
如system("del d:\\新建文本文档.txt")作用是删除d盘的文件“新建文本文档.txt”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式