zoukankan      html  css  js  c++  java
  • 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)消息。

  • 相关阅读:
    Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
    基于Filebeat+Kafka+Flink仿天猫双11实时交易额
    Flink消费Kafka数据并把实时计算的结果导入到Redis
    Flink+kafka实现Wordcount实时计算
    Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
    spring boot+mybatis+quartz项目的搭建完整版
    Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql
    Swagger+AutoRest 生成web api客户端(.Net)
    NodeJS学习
    Go学习
  • 原文地址:https://www.cnblogs.com/China3S/p/3265951.html
Copyright © 2011-2022 走看看