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)消息。

  • 相关阅读:
    这些 Drawable 的小技巧,你都了解吗?
    Android 软键盘的显示和隐藏,这样操作就对了
    在 ReactNative 的 App 中,集成 Bugly 你会遇到的一些坑
    聊聊 Material Design 里,阴影的那些事儿!
    PAT 1069 1070 1071 1072
    PAT1021 Deepest Root
    关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)
    PAT《数据结构学习与实验指导》实验项目集 2-05 2-06 2-07 2-08
    LeetCode:Gas Station
    LeetCode:Candy
  • 原文地址:https://www.cnblogs.com/China3S/p/3265951.html
Copyright © 2011-2022 走看看