首页
学习
活动
专区
圈层
工具
发布

如何在Delphi中使用SendInput?

在Delphi中使用SendInput可以实现模拟键盘和鼠标事件,以下是一个简单的示例:

首先,需要在Delphi中引入Windows API函数SendInput:

代码语言:delphi
复制
uses
  Windows;

const
  SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

type
  TInput = record
    Type_: DWORD;
    case Integer of
      0: (mi: TMouseInput);
      1: (ki: TKeybdInput);
      2: (hi: THardwareInput);
  end;
  TInputs = array of TInput;

function SendInput(cInputs: UINT; pInputs: PInput; cbSize: Integer): UINT; stdcall; external 'user32.dll';

然后,可以使用以下代码模拟鼠标点击事件:

代码语言:delphi
复制
procedure ClickMouse(X, Y: Integer);
var
  Inputs: TInputs;
  Input: TInput;
begin
  SetLength(Inputs, 2);

  Input.Type_ := INPUT_MOUSE;
  Input.mi.dx := X;
  Input.mi.dy := Y;
  Input.mi.mouseData := 0;
  Input.mi.dwFlags := MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
  Inputs[0] := Input;

  Input.mi.dwFlags := MOUSEEVENTF_LEFTDOWN;
  Inputs[1] := Input;

  SendInput(2, Inputs[0], SizeOf(Input));

  Input.mi.dwFlags := MOUSEEVENTF_LEFTUP;
  Inputs[1] := Input;

  SendInput(2, Inputs[0], SizeOf(Input));
end;

以下是使用SendInput模拟键盘按键事件的示例代码:

代码语言:delphi
复制
procedure KeyPress(Key: Word);
var
  Inputs: TInputs;
  Input: TInput;
begin
  SetLength(Inputs, 2);

  Input.Type_ := INPUT_KEYBOARD;
  Input.ki.wVk := Key;
  Input.ki.wScan := MapVirtualKey(Key, 0);
  Input.ki.dwFlags := 0;
  Input.ki.time := 0;
  Input.ki.dwExtraInfo := 0;
  Inputs[0] := Input;

  Input.ki.dwFlags := KEYEVENTF_KEYUP;
  Inputs[1] := Input;

  SendInput(2, Inputs[0], SizeOf(Input));
end;

以上代码示例可以实现在Delphi中使用SendInput模拟鼠标点击和键盘按键事件。需要注意的是,在使用SendInput函数时,需要确保程序具有足够的权限,以便能够模拟输入事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Delphi中谨慎使用QuotedStr、QuotedString、DequotedString相关的函数

    //以下测试代码 var s, ss: string; begin //JSON中包含大量双引号,方便测试出效果 with TStreamReader.Create('全国adcode.json...去除双引号定界符 //ss := s.DeQuotedString('"');//非常慢,比ss := AnsiDequotedStr(s, '"')慢几十倍 //3.单引号的添加与去除也是一样的 //所以,使用...StringHelper的QuotedString和DeQuotedString方法时,要注意 //通过查看源码,发现AnsiQuotedStr和AnsiDequotedStr使用的指针操作 //而StringHelper...的QuotedString和DeQuotedString使用逐个字符拷贝 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    48040

    CSharp通过Websocket传输图片在WEB端显示及传递鼠标事件

    : SendInput 使用Windows API函数 首先导入Windows API类库,包括“using System.Runtime.InteropServices;”等命名空间。...在 btnClick_Click 中,我们模拟了鼠标左键按下和抬起的事件。在 btnDrag_Click 中,我们模拟了鼠标的拖拽事件。...在 mouse_event 方法中,我们可以使用 dwFlags 参数指定要模拟的鼠标事件类型,如左键按下、左键抬起和鼠标移动等。...SendInput 是较新的 API,可以用于模拟更多种类的输入设备(如键盘、鼠标、触摸屏等),而 mouse_event 只能模拟鼠标事件。...因此,如果需要模拟多种输入设备事件或需要精确模拟鼠标操作,建议使用 SendInput。如果只需要模拟鼠标事件并且需求不是很高,则可以使用 mouse_event。

    84920

    【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?

    题目部分 如何在Oracle中写操作系统文件,如写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令。 Oracle使用哪个包可以生成并传递数据库告警信息?...在CLIENT_INFO列中存放程序的客户端信息;MODULE列存放主程序名,如包的名称;ACTION列存放程序包中的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程中暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle中写操作系统文件,如写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

    38.7K30

    技术干货| 如何在MongoDB中轻松使用GridFS?

    什么时候使用GridFS 在MongoDB中,使用GridFS存储大于16 MB的文件。 在某些情况下,在MongoDB数据库中存储大型文件可能比在系统级文件系统上存储效率更高。...此外,如果文件均小于16 MB BSON文档大小限制,请考虑将每个文件存储在单个文档中,而不是使用GridFS。您可以使用BinData数据类型存储二进制数据。...GridFS通过使用存储桶名称为每个集合添加前缀,将集合放置在一个公共存储桶中。...如果希望将其他任意字段添加到文件集合中的文档,请将其添加到元数据字段中的对象。 GridFS索引 GridFS使用每个块和文件集合上的索引来提高效率。...该索引允许高效地检索文件,如本示例所示: db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } ) 符合GridFS规范的驱动程序将在读取和写入操作之前自动确保此索引存在

    7.6K30

    在Excel中处理和使用地理空间数据(如POI数据)

    ,用于加载工作底图) III 其他 (非必须,如自己下载的卫星图,自己处理的地图,绘制的总平面等——用于自定义底图) 03 具体操作 打开数据表格——[插入]选项卡——三维地图——自动打开三维地图窗口...https://support.office.com/zh-cn/article/三维地图入门-6b56a50d-3c3e-4a9e-a527-eea62a387030) ---- 接下来来将一些[调试]中的关键点...I 坐标问题 理论上地图在无法使用通用的WGS84坐标系(规定吧),同一份数据对比ArcGIS中的WGS84(4326)和Excel中的WGS84、CJ-02(火星坐标系)的显示效果,可能WGS84(...4326)坐标系更加准确一点,也有查到说必应地图全球统一使用WGS84坐标系。...⇩不同坐标系下的对比 结论:建议使用WGS84坐标系(使用Sid分享脚本的用户可略过) II 自定义底图 Excel提供的底图为必应地图,虽然有很多种色彩体系,但不支持去掉路名、点位名称等标签,可能有点乱

    12.2K20

    如何在Linux中检查内存使用情况

    在对系统或应用程序速度减慢或行为异常进行故障排除时,首先要检查的问题之一是系统内存使用情况。 本文介绍了如何使用几种不同的命令来检查Linux中的RAM使用情况。...used-已使用的内存。 计算公式为:used = total - free - buffers - cache free -可用/未使用的内存。.../proc/meminfo 检查RAM内存使用率的最简单方法是显示/proc/meminfo虚拟文件的内容。 free,top,ps和其他系统信息命令使用此文件。...可以解析/proc/meminfo文件中的信息,并在shell脚本中使用。 ps_mem脚本 ps_mem是一个Python脚本,用于报告每个程序的RAM内存使用情况。...它可以与Python 2和3一起使用,并且可以使用pip安装 sudo pip3 install ps_mem 运行ps_mem需要管理员权限: sudo ps_mem 输出将按升序包括每个正在运行的程序的内存使用情况

    6.5K30
    领券