向其他程序发送模拟按键:

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 向其他程序发送模拟按键的更多相关文章

  1. Delphi驱动方式WINIO模拟按键 可用

    http://www.delphitop.com/html/yingjian/152.html Delphi驱动方式WINIO模拟按键 作者:admin 来源:未知 日期:2010/2/1 1:14: ...

  2. C#驱动级模拟按键操作

    C#驱动级模拟按键操作 2013-09-26 03:17 ·AB叔 447 3 <- 点击左侧的数字“攒”一个吧 昨天遇到一个程序自动输入财付通密码的任务. 因为财付通密码控件是有安全保护的,所 ...

  3. linux系统下,在用户空间应用程序中模拟发送系统键盘事件

    Linux 有自己的 input 子系统,可以统一管理鼠标和键盘事件. 如果想模拟键盘事件,但是系统没有键盘设备该如何是好? 基于输入子系统实现的 input 可以方便的在用户空间模拟鼠标和键盘事件. ...

  4. android 模拟按键事件

    模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...

  5. C#获取窗口,模拟按键操作

    C#获取窗口,模拟按键操作,实现计算器模拟操作.首先引用. using System.Runtime.InteropServices; 使用DllImport引入两个函数: // Get a hand ...

  6. 使用 HttpWebRequest 发送模拟 POST 请求

    使用HttpWebRequest发送模拟POST请求  网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果metho ...

  7. linux下如何模拟按键输入和模拟鼠标【转】

    转自:http://www.cnblogs.com/leaven/archive/2010/11/30/1891947.html 查看/dev/input/eventX是什么类型的事件, cat /p ...

  8. Android(Linux)模拟按键、触摸屏等事件

    前提: 在我们应用程序或者在写Android自己主动化測试时候经常会须要模拟实体按键,来给我们做測试用.这也是我要整理的目的. 基本的涉及的是Linux Input Event事件. 下面的样例基于A ...

  9. Android随笔之——模拟按键操作的几种方式

    前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之——使 ...

随机推荐

  1. yum与rpm的使用

    rpm常用的命令组合: rpm -ivh:安装显示安装进度--install--verbose--hash -Uvh:升级软件包--Update: -qpl:列出RPM软件包内的文件信息[Query ...

  2. 关于LR中的EXTRARES

    LoadRunner脚本之EXTRARES参数 EXTRARES:分隔符,表示标记下一个属性是资源属性的列表(list of resource attributes). [EXTRARES后的资源是由 ...

  3. [转载]“浅拷贝”与“深拷贝”

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. C++中对象的复制就如同&quo ...

  4. Xamarin Android开发实战(上册)大学霸内部资料

    Xamarin Android开发实战(上册)大学霸内部资料   试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamar ...

  5. 17111 Football team

    时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题   语言: C++;C Description As every one known, a footbal ...

  6. LightOJ1064 Throwing Dice(DP)

    第一眼以为是概率DP,我还不会.不过看题目那么短就读读,其实这应该还不是概率DP,只是个水水的DP.. dp[n][s]表示掷n次骰子点数和为s的情况数 dp[0][0]=1 dp[i][j]=∑dp ...

  7. 【BZOJ】1441: Min(裴蜀定理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1441 这东西竟然还有个名词叫裴蜀定理................ 裸题不说....<初等数 ...

  8. Django 1.6.0 正式发布,大幅改进事务处理

    Django 1.6.0 正式发布了,查看官方发行说明. 下载地址:Django-1.6.tar.gz ,也可通过 pip 安装: pip install Django==1.6 要求 Python ...

  9. 安装win7 ubuntu双系统

    http://www.cnblogs.com/shengansong/archive/2011/10/23/2221716.html http://www.cnblogs.com/shenganson ...

  10. 用java删除文件夹里的所有文件

    import java.io.File; public class Test { public static void main(String args[]){ Test t = new Test() ...