RubyにてWin32APIを叩いて、アクティブになっているアプリケーション名を1秒おきに出力するスクリプトを書いてみた。
Ruby + Win32APIについての日本語の資料とRuby2.0以降のコードが見つからなかったので何かの参考になるかもしれない。
Ruby2.1でも動作確認済み。Ruby2.2は未確認
Windows環境はWindows7を使用、Windows8環境下で動くかは未確認です。
ソースコードは下記
main.rb
require 'Win32api'
hwnd = Win32API.new('C:\\Windows\\System32\\user32.dll', 'GetForegroundWindow', [], 'N')
GetWindowText = Win32API.new('C:\\Windows\\System32\\user32.dll', 'GetWindowText', 'LPI', 'I')
GetWindowTextLength = Win32API.new('C:\\Windows\\System32\\user32.dll', 'GetWindowTextLength', 'L', 'I')
loop{
buf_len = GetWindowTextLength.call(hwnd.call)
str = ' ' * (buf_len + 1)
result = GetWindowText.call(hwnd.call, str, str.length)
puts str.encode(Encoding.default_external)
sleep 1
}
最後に、Ruby2.0以降は Win32API ではなく、Fiddleを使用してWindowsで使用する関数を呼び出すように切り替わったようです。
ですので、Win32API を使用すると下記のような文言が最初に出力されます。
DL is deprecated, please use Fiddle
Fiddleで記載方法も書きましたので気になる方は、こちらへ