如何从ruby应用程序向Windows发送击键?

时间:2010-10-04 01:07:38

标签: ruby winapi

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

但是我在努力实现这种行为时遇到了困难!你知道怎么用Ruby做这个吗?

2 个答案:

答案 0 :(得分:2)

您可以安装Ruby-FFI gem[sudo] gem install ffi,使用它加载user32.dll,然后绑定并调用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

答案 1 :(得分:1)

keybd_event可行,您也可以使用jruby来编写java Robot类的脚本