それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

RubyでWindowsのフォルダを監視する

Windowsのフォルダを監視して,ファイルが追加されたら、通知したい.
.NetFramework つかえば簡単にできるんだけど.IronPythonとか使えば一瞬で出来るんだけどね.Rubyのgems でがんばってみて

Windowsのフォルダ監視

WinShotがどんどんキャプチャしてくれるんだけど,ファイル名をいちいちメモするのがめんどくさい.Gyazoを入れるほどでもないので,画面キャプチャしてファイル名を返してくれるWin32APIが欲しいと思ったけど,そんなモノ無いので、適当に作る.

rubyにはwin32APIを使うライブラリがある

今回使ったのはこれ

require 'win32/changenotify'

ruby でフォルダ監視

'C:\Users\takuya\Pictures\capture'を監視する。
ファイルが追加されたら、ファイル名をクリップボードにコピーする.

require 'rubygems'
require 'win32/changenotify'
require 'win32/clipboard'

$KCODE="s"
include Win32
class Clipboard
  def Clipboard.data=(bin) self.set_data bin end
end
filter = ChangeNotify::FILE_NAME | ChangeNotify::DIR_NAME
path   = 'C:\Users\takuya\Pictures\capture'

cn = ChangeNotify.new(path, true, filter)
cn.wait{ |arr|
  arr.each{ |info|
     Clipboard.data= "file:"+ info.file_name if info.action == "added"
  }
}

起動方法

rubyw.exe watch_folder.rb

ruby.exeでなく rubyw.exe を使う。コンソール画面が残ると邪魔なので.rubyw.exeを使ってプロセスをバックグラウンドで動かす方が便利だし.

2011-12-26追記

サービス登録すると便利だと思う.


Cygwinを使えばスクリプトを簡単にサービス登録できるので,これを活用することにする.
CygwinでWindowsサービスを作る。簡単だった。 - ブックマクロ開発に