ruby - 如何从 ruby​​ 应用程序将击键发送到窗口?

标签 ruby winapi

我一直在尝试与 Windows 上的另一个应用程序交互,该应用程序没有实现任何数据交换协议(protocol)。所以我认为最好的方法是从一个应用程序中获取数据,然后通过发送击键将其发送到另一个应用程序,模拟人类交互。

但是我很难尝试实现这种行为!您知道如何使用 Ruby 执行此操作吗?

最佳答案

您可以安装 Ruby-FFI gem : [sudo] gem install ffi,用它加载user32.dll,然后绑定(bind)调用keybd_event方法。

这是来自 FFI Github wiki 的示例:

require 'ffi'

module Win
  VK_VOLUME_DOWN = 0xAE;   VK_VOLUME_UP = 0xAF;   VK_VOLUME_MUTE = 0xAD;   
  KEYEVENTF_KEYUP = 2

  extend FFI::Library
  ffi_lib 'user32'
  ffi_convention :stdcall

  attach_function :keybd_event, [ :uchar, :uchar, :int, :pointer ], :void

  # simulate pressing the mute key on the keyboard
  keybd_event(VK_VOLUME_MUTE, 0, 0, nil);
  keybd_event(VK_VOLUME_MUTE, 0, KEYEVENTF_KEYUP, nil);

end

关于ruby - 如何从 ruby​​ 应用程序将击键发送到窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852254/

相关文章:

windows - 如何生成字符串类型ID的资源条目?

emacs - windows GNU emacs 中的 .emacs 文件在哪里

javascript - 在 javascript 函数中保存状态

ruby - 如何使用 Ruby map 方法限制通过 API 发送的参数

ruby - 如何停止 binding.pry 在循环内执行?

winapi - MFTransform 编码器->ProcessInput 返回 E_FAIL

c - 获取由 CreateProcess() 启动的进程的 PID

ruby - ruby 如何跟踪变量

ios - 仅 TableView 第一行的自定义样式

winapi - 如何获取 Windows 的所有系统/BIOS 信息