7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windowsでアクティブになっているアプリケーションの名前をRubyでWin32APIを使って取得

Last updated at Posted at 2015-01-27

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で記載方法も書きましたので気になる方は、こちらへ

7
7
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?