123457276
2021-09-13 20:36
优艾设计网_设计 SendKeys string[, wait]其中,string 是指定要发送的按键消息;Wait 是指定等待方式的 Boolean 值,如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程;如果为 True,则按键消息必须在控件返回到过程之前加以处理。按键消息由一个或多个字符序列表示:键盘字符按字符本身的键表示(如对于字母 A,string="A",对连续字母 win98,string="win98"),对其它一些特殊字符,如 + 号用{+}表示,Shift 键用 + 表示,Alt 键用 % 表示,F1 键用 {F1} 表示等等,更多的按键与代码的对应关系,可参考 MSDN 的帮助信息。明白了这些“规则”之后,我们首先来编写一个用 SendKeys 操控计算器的程序,程序代码如下:Option ExplicitPrivate Sub Form_Load()Dim ReturnValue, IReturnValue = Shell("CALC.EXE", 1) ' 运行计算器AppActivate ReturnValue ' 激活计算器For I = 1 To 100 ' 设置计数循环SendKeys I & "{+}", True ' 按下按键给计算器Next I ' 将所有 I 值相加SendKeys "=", True ' 取得总和SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器End Sub程序中 AppActivate ReturnValue 语句用来激活计算器,使其窗口获得焦点。程序运行后,我们会看到计算器的按键自动动作起来,最后计算出 1+2+3+…+100 的结果。这可不是病毒,也不是黑客啊!怎么样,神奇吧?想没想到这可是制做演示程序的好方法!只要熟悉了某程序的键盘操作序列,就可以用程序模拟它的运行过程。下面的程序用来模拟运行安装在 D: 盘的 Word 程序,自动打出 4 行文字后,然后退出。程序中为了能仔细观察演示过程,设计了 waittime 函数来进行延时。Option ExplicitPrivate Sub Form_Load()Dim xx = Shell("D:/Program Files/Microsoft Office/Office/winword.exe", vbNormalFocus)'启动 Word97SendKeys "This is a demo program for Microsoft Word97.", True ' 模拟输入英文字符串SendKeys "{Enter}{Enter}", True ' 两次回车waittime (2) ' 延时 2 秒SendKeys "Some letters keyin automatically.", TrueSendKeys "{Enter}{Enter}", Truewaittime (2)SendKeys "Not virus,and not hackers!", TrueSendKeys "{Enter}{Enter}", Truewaittime (2)SendKeys "Being Exit... Look the MenuBar File{(}F{)}...", TrueSendKeys "%", True 'Alt 键激活菜单条waittime (1)SendKeys "(F)", True '按字母 "F",选择"文件(F)"菜单waittime (1)SendKeys "(X)", True '按字母 "X", 选择"退出(X)"waittime (2)SendKeys "(N)", True 'Word 弹出一个对话框,询问文件是否存盘,按 "N" 不存盘End '结束本模拟程序End SubPrivate Sub waittime(delay As Single)Dim starttime As Singlestarttime = TimerDo Until (Timer - starttime) > delayLoopEnd Sub
台北堤角 2021-09-13 20:41 这个有多个方法的,个人觉得最简单的方法是用WM_CHAR以下是测试#include <stdio.h>#include <windows.h>#include <string.h>#include &优艾设计网_Photoshop问答lt;stdlib.h>int main(){char ConsoleName[100] = {0}; GetConsoleTitle(ConsoleName, 100); HWND hwnd = FindWindow(NULL, ConsoleName); //找出控制台的句柄printf("%p ",hwnd); char input[100]="Hello";for(size_t i=0;i<strlen(input);i++){ SendMessage(hwnd,WM_CHAR,(LPARAM)input[i],1);}char get[100];gets(get);printf("%s ",get); getchar(); return 0;}程序的功能是向当前控制台发"Hello"字串,并用gets取加并打印你可以改为向其它窗口发消息当然,你可以用其它消息如wm_keyup/wm_keydownwindows还提供了一个复杂的函数sendinput,它可以向系统发任何键盘或鼠标的消息
台北堤角 2021-09-13 20:41 这个有多个方法的,个人觉得最简单的方法是用WM_CHAR以下是测试#include <stdio.h>#include <windows.h>#include <string.h>#include &优艾设计网_Photoshop问答lt;stdlib.h>int main(){char ConsoleName[100] = {0}; GetConsoleTitle(ConsoleName, 100); HWND hwnd = FindWindow(NULL, ConsoleName); //找出控制台的句柄printf("%p ",hwnd); char input[100]="Hello";for(size_t i=0;i<strlen(input);i++){ SendMessage(hwnd,WM_CHAR,(LPARAM)input[i],1);}char get[100];gets(get);printf("%s ",get); getchar(); return 0;}程序的功能是向当前控制台发"Hello"字串,并用gets取加并打印你可以改为向其它窗口发消息当然,你可以用其它消息如wm_keyup/wm_keydownwindows还提供了一个复杂的函数sendinput,它可以向系统发任何键盘或鼠标的消息
精彩评论