• Delphi编程中的按键模拟及应用——使用SendInput函数实现按键模拟


    导语:
    在Delphi编程中,有时候我们需要模拟按下指定字符的按键,这在自动化测试、键盘扩展应用等场景下非常有用。本文将介绍如何使用Delphi中的SendInput函数来实现按键模拟,并演示一个简单的应用场景。

    什么是按键模拟?

    按键模拟是指通过编程方式模拟按下计算机键盘上的按键,以便实现自动化操作或扩展键盘功能的目的。在某些情况下,我们可能需要将特定的字符串作为输入,并模拟按下字符串中每个字符对应的按键。例如,在模拟用户输入网址时,我们可以将字符串"chrome://settings/"传递给程序,并模拟按下每个字符的按键。
    在这里插入图片描述
    在这里插入图片描述

    使用SendInput函数实现按键模拟

    在Delphi编程中,我们可以使用SendInput函数来实现按键模拟。SendInput函数是Windows API中的一个函数,它允许我们发送输入事件,包括模拟按键操作。

    以下是一个示例的Delphi函数SendVirtualKey,它接受一个字符串作为输入,并模拟按下对应字符的按键:

    procedure SendVirtualKey(const AText: string; const AIsEnter: Boolean);
    var
      Input: TInput;
      I: Integer;
    begin
      for I := 1 to Length(AText) do
      begin
        Input.Itype := INPUT_KEYBOARD;
        Input.ki.wVk := 0;
        Input.ki.wScan := Ord(AText[I]);
        Input.ki.dwFlags := KEYEVENTF_UNICODE;
        Input.ki.time := 0;
        Input.ki.dwExtraInfo := GetMessageExtraInfo;
    
        SendInput(1, Input, SizeOf(TInput));
    
        Input.ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
        SendInput(1, Input, SizeOf(TInput));
      end;
    
      if AIsEnter then
      begin
        // 发送Enter键
        Input.Itype := INPUT_KEYBOARD;
        Input.ki.wVk := VK_RETURN;
        Input.ki.wScan := 0;
        Input.ki.dwFlags := 0;
        Input.ki.time := 0;
        Input.ki.dwExtraInfo := GetMessageExtraInfo;
    
        SendInput(1, Input, SizeOf(TInput));
    
        Input.ki.dwFlags := KEYEVENTF_KEYUP;
        SendInput(1, Input, SizeOf(TInput));
      end;
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    上述函数使用循环遍历输入字符串的每个字符,并使用SendInput函数模拟按下和释放对应字符的按键。根据传入的参数,我们可以选择是否在最后发送Enter键。

    应用示例:模拟用户输入网址

    假设我们正在开发一个自动化测试工具,需要模拟用户输入网址来测试浏览器的导航功能。我们可以利用SendVirtualKey函数来实现这一目标。

    下面是一个示例代码片段,演示如何使用SendVirtualKey函数来模拟用户输入网址并导航到相应的页面:

    
    // 调用示例
    procedure TForm1.Button51Click(Sender: TObject);
    begin
      OpenChrome('');
      Sleep(300);
      SendVirtualKey('chrome://settings/',True);
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在上述示例中,我们打开chrome浏览器,它的url栏中接受一个URL字符串作为输入。通过调用SendVirtualKey函数,我们可以模拟按下URL字符串中每个字符的按键,并在最后发送Enter键。

    通过这样的方法,我们可以轻松地实现自动化测试中的按键模拟,以及其他需要模拟按键操作的应用场景。

    注意事项

    在使用SendInput函数进行按键模拟时,请确保您的程序具有足够的权限来模拟按键操作。某些操作系统和应用程序可能会限制或阻止对按键的模拟操作。另外,需要在代码中引入Winapi.Windows单元。

    尽管按键模拟在某些场景下非常有用,但请注意不要滥用这个功能,尊重用户隐私和系统安全。确保您的应用程序在使用按键模拟功能时经过充分的测试,以确保它的稳定性和可靠性。

    总结:

    本文介绍了在Delphi编程中使用SendInput函数实现按键模拟的方法。通过该方法,我们可以模拟按下指定字符的按键,并根据需要发送Enter键。我们还演示了一个应用示例,展示了如何模拟用户输入网址来导航到相应的页面。

    按键模拟是一个功能强大的工具,可以在自动化测试、键盘扩展应用等场景下发挥重要作用。通过了解和灵活运用SendInput函数,我们可以为Delphi应用程序增加更多的功能和灵活性。

  • 相关阅读:
    13 C++11 线程同步之互斥锁
    单调栈题目:移掉 K 位数字
    应收和应付会计岗位自动化:多重赋能,为企业提效300%,让劳动更具价值
    如何设置和取消ZIP文件的自动加密
    Linux的NFS配置
    Mybatis逆向工程实战:如何快速生成实体类、Mapper接口和配置文件
    【牛客 - 剑指offer】JZ50 第一个只出现一次的字符 Java实现
    大学生个人网页模板 简单网页制作作业成品 极简风格个人介绍HTML网页设计代码下载
    Windows下载安装Vue开发者工具(VueDevtools)
    phpword 导出图表格式不兼容问题
  • 原文地址:https://blog.csdn.net/winniezhang/article/details/133759573