RubyからWSHShellオブジェクトを使う

WSHShellオブジェクトはWindowsのShellを指すオブジェクトです。

WSHShellについての情報はMSのWshShellオブジェクトに載っています。

WSHShellオブジェクトを操作すると、以下のようなことができます。

アクティブなウィンドウにキーコードを送る

COMで制御できないアプリはキーコードを送って、動作を制御します。キーコードをアクティブウィンドウに送ると、 キーコードで指定されたキー操作を行ったのと同じ動作をします。

以下の例は、ノードパッド(メモ帳)を起動し、メモ帳にファイルを開かせるためのスクリプトです。

  # sample_02.rb
  require 'win32ole'
  
  shell_obj = WIN32OLE.new("WScript.Shell")
  shell_obj.run "notepad"
  sleep 3
  shell_obj.AppActivate("無題")
  shell_obj.sendKeys("%fo")
  sleep 0.5
  shell_obj.sendKeys('c:\autoexec.bat{Enter}')
  

レジストリの操作

WSHShellオブジェクトを使うと、レジストリの操作もできます。 変更は怖いので、レジストリの読み出しをやってみましょう。

  # sample_03.rb
  require 'win32ole'
  
  shell_obj = WIN32OLE.new("WScript.Shell")
  key_val = shell_obj.RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductID')
  p key_val
  

これは見ただけでわかりますね。RegReadメソッドでキーを指定すれば、そのキーの値を返してくれます。

注意すべきは、指定したキーが無い場合は、例外が発生してしまうことです。キーがあるかどうか調べるメソッドがあると いいのに。もちろん、begin/rescueで例外を補足すればいいので、どうにでもなりますが。

ショートカットの操作

ショートカットを操作するときは、WshShellオブジェクトからWshShortcut オブジェクトを取得して、WshShortcut オブジェクト のメソッド使用します。

WshShortcut オブジェクトには以下のプロパティがあり、それぞれ、ショートカットの以下の場所に対応します。 変更後は、Saveメソッドで保存をショートカットに反映させます。

ショートカット


戻る