利用SendInput模拟鼠标键盘 <转>

本文介绍了如何使用SendInput函数来模拟鼠标和键盘操作,包括键盘的按下、释放、单击,以及鼠标的移动、点击和滚轮操作。通过示例代码详细展示了SendInput在Delphi中的应用,并对比了SendInput与WinIo的区别,强调了SendInput在数据完整性和速度上的优势,以及可能遇到的被程序屏蔽的问题。
摘要由CSDN通过智能技术生成
  • SendInput
    SendInput可以将指定的鼠标键盘消息插入到系统消息队列,从而实现对鼠标键盘的模拟。有很多程序对SendInput进行了屏蔽,但不是所有的。所以这里介绍一下SendInput的使用。我已经将主要的模拟功能写在了一个单元文件中:SIMouseKeyboard.pas,调用该单元文件中的相关函数就可以实现鼠标键盘的模拟。该单元文件的下载见本楼末尾。SendInput的参数其实很简单,在Windows.pas就有函数的声明如下:
    function SendInput(cInputs: UINT; var pInputs: TInput; cbSize: Integer): UINT; stdcall;
    cInputs:定义pInputs中记录数组的元素数目。pInputs:TInput类型记录数组的第1个元素。每个元素代表插人到系统消息队列的键盘或鼠标事件。cbSize:定义TInput的大小,一般为SizeOf(TInput)。函数返回成功插入系统消息队列中事件的数目,失败返回0。调用SendInput关键的就是要搞清楚它的几个记录结构的意思,在Windows.pas中对TInput的声明如下:
      tagINPUT = packed record
        Itype: DWORD;
        case Integer of
          0: (mi: TMouseInput);
          1: (ki: TKeybdInput);
          2: (hi: THardwareInput);
      end;
      TInput = tagINPUT;
    其中mi、ki、hi是3个共用型的记录结构,Itype指出记录结构中所使用的类型,它有3个值。INPUT_MOUSE:表示使用mi记录结构,忽略ki和hi;INPUT_KEYBOARD:表示使用ki记录结构,忽略mi和hi。
  • 键盘模拟
    TKeybdInput记录结构的声明如下:
      tagKEYBDINPUT = packed record
        wVk: WORD;
        wScan: WORD;
        dwFlags: DWORD;
        time: DWORD;
        dwExtraInfo: DWORD;
      end;
      TKeybdInput = tagKEYBDINPUT;
    其中wVk是将要操作的按键的虚键码。wScan是安全码,一般不用。dwFlags指定键盘所进行的操作,为0时表示按下某键,KEYEVENTF_KEYUP表示放开某键。time是时间戳
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值