delphi 向其他程序发送模拟按键
向其他程序发送模拟按键:
1、用keybd_event:
var
h : THandle;
begin
h :=
FindWindow('TFitForm', '1stOpt -
[Untitled1]');
SetForegroundWindow(h);
keybd_event(VK_CONTROL,
MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(VK_F9, MapVirtualKey(VK_F9,
0), 0, 0);
keybd_event(VK_F9, MapVirtualKey(VK_F9, 0), KEYEVENTF_KEYUP,
0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP,
0);
end;
选找到目标程序的句柄h,在应用Keybd_event之前必须先把目标程序设为当前活动窗口。(如果不想看见的话,把目标程序的位置用SetWindowLong设置在屏幕之外.)
2、用SendMessage、PostMessage:不需目标置为最前。
SendMessage(h,WM_KEYDOWN,VK_F9,0);
PostMessage(h,WM_KEYDOWN,VK_F9,0);
发送组合键:PostMessage(h,WM_SYSKEYDOWN,VK_F9,$10000000);//试验不成功
Ctrl
: $10000000;
Shift: $08000000;
Alt:
$20000000
如打开菜单ALT-F,则要WM_SYSKEYDOWM,:PostMessage(h,WM_SYSKEYDOWN,70,$20000000);才行。(//试验成功)
3、CTL键组合发送不成功。
4、向后台应用程序发送按键总结:
4.1
单个按健:PostMessage(h,WM_KEYDOWN,VK_F9,0);
4.2ALT+按键:PostMessage(h,WM_SYSKEYDOWN,70,$20000000);
4.3CTL+按键:暂时模仿如下,基本可行。但不用sleep(10),有时行,有时不行。换用SendMessage却不行,WHY?
if
hwnd<>0
then
begin
keybd_event(VK_CONTROL,0,0,0);
PostMessage(hwnd,WM_KEYDOWN,VK_F9,0);
PostMessage(hwnd,WM_KEYUP,VK_F9,0);
sleep(10);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
end;
说明:
键盘事件消息可以分为“击键”和“字符”两类。对于可以显示字符的击键组合,Windows不仅向程序发送击键消息,还发送字符消息。有些键不产生字符,这些键包括shift键、Fn功能键、光标移动键和特殊字符如Insert和Delete。
击键消息包括WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP四种类型。WM_KEYDOWN和WM_KEYUP消息通常是在按下或释放不带Alt键的键时产生;WM_SYSKEYDOWN和WM_SYSKEYUP消息通常由与Alt组合的击键产生,这些键激活程序菜单或系统菜单上的选项,或切换活动窗口,也可以用作系统菜单加速键。由于Windows处理所有Alt键的功能,应用程序无需捕获这些消息。对于4类击键消息,wParam是虚拟键代码,代表按下或释放的键,而lParam包含击键的其他数据。如果按住一个键不放使得自动重复功能生效,那么该键最后被释放时,Windows会给窗口过程发送一系列的WM_KEYDOWN(或WM_SYSKEYDWON)消息和一个WM_KEYUP(或WM_SYSKEYUP)消息。
delphi 向其他程序发送模拟按键的更多相关文章
- Delphi驱动方式WINIO模拟按键 可用
http://www.delphitop.com/html/yingjian/152.html Delphi驱动方式WINIO模拟按键 作者:admin 来源:未知 日期:2010/2/1 1:14: ...
- C#驱动级模拟按键操作
C#驱动级模拟按键操作 2013-09-26 03:17 ·AB叔 447 3 <- 点击左侧的数字“攒”一个吧 昨天遇到一个程序自动输入财付通密码的任务. 因为财付通密码控件是有安全保护的,所 ...
- linux系统下,在用户空间应用程序中模拟发送系统键盘事件
Linux 有自己的 input 子系统,可以统一管理鼠标和键盘事件. 如果想模拟键盘事件,但是系统没有键盘设备该如何是好? 基于输入子系统实现的 input 可以方便的在用户空间模拟鼠标和键盘事件. ...
- android 模拟按键事件
模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...
- C#获取窗口,模拟按键操作
C#获取窗口,模拟按键操作,实现计算器模拟操作.首先引用. using System.Runtime.InteropServices; 使用DllImport引入两个函数: // Get a hand ...
- 使用 HttpWebRequest 发送模拟 POST 请求
使用HttpWebRequest发送模拟POST请求 网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果metho ...
- linux下如何模拟按键输入和模拟鼠标【转】
转自:http://www.cnblogs.com/leaven/archive/2010/11/30/1891947.html 查看/dev/input/eventX是什么类型的事件, cat /p ...
- Android(Linux)模拟按键、触摸屏等事件
前提: 在我们应用程序或者在写Android自己主动化測试时候经常会须要模拟实体按键,来给我们做測试用.这也是我要整理的目的. 基本的涉及的是Linux Input Event事件. 下面的样例基于A ...
- Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之——使 ...
随机推荐
- FFmpeg源代码结构图
转自:http://blog.csdn.net/leixiaohua1020/article/details/44220151 FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码 ...
- SQLServer备份脚本
企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业名称--"步骤"项--新建--"步骤名"中输入 ...
- Linux常用命令_(备份压缩)
备份打包:tar 指令名称:tar语法:tar 选项[zcvf] [文件或目录]-z 使用gzip压缩.tar文件-c 产生一个.tar文件-v 观看归档过程-f 指定归档后的文件功能描述:归档文件目 ...
- Spring的qualifier标签
@Autowired是根据类型进行自动装配的.如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存 ...
- transient的理解
用法解释 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问. 2)transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被 ...
- Linux部署项目简要记录【只是步骤没有配图】
1.服务器(192.168.1.197)新建数据库jspxcms_1206,导入数据2.eclipse打war包3.上传war包到/home/app/apache-tomcat-7.0.68/weba ...
- C# EventWaitHandle
线程同步模型: http://www.xue5.com/Developer/CSharp/755821_2.html http://www.cftea.com/c/2012/03/5518.asp h ...
- BZOJ2310 : ParkII
单路径最大和问题,设f[i][j][S]表示到达(i,j),轮廓线状态为S的最优解. S用4进制m+1位数表示,0表示无插头,1表示左括号,2表示右括号,3表示独立插头. 在DP之前先进行一次预处理, ...
- LA 3415 (二分图+最大独立集)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 调用WebServiceWebService提示The maximum string content length quota (8192) has been exceeded while reading XML data的解决办法
在web.config中,bindings节点下,对应的服务名称中,原本可能是自动折叠的“/>”,需要改成手动折叠的</binding>,然后在中间加上<readerQuota ...