フォルダを監視する

フォルダを常に監視し、ファイル名の変更や削除が行われた事を検出するには FindFirstChangeNotification APIを使用します。何か役に立つツールが作れそうだが、このAPIは変更があった事を通知をするだけで、何のファイルが変更されたかなどは通知しないので大して役には立たない。

■ フォルダを監視する例
var
  strPath                :  string;   //監視パス
  blnSubTree             :  longbool; //フラグ
  intFilter              :  integer;  //フィルタ
  intChangeNotifyHandle  :  integer;  //通知ハンドル
  intTimeout             :  integer;  //時間
  intReturn              :  integer;  //戻り値
begin
  // 前処理
  strPath         :=     'c:\windows';
  blnSubTree      :=     false;
  intSpyFilter    :=     FILE_NOTIFY_CHANGE_FILE_NAME or 
                         FILE_NOTIFY_CHANGE_DIR_NAME or 
                         FILE_NOTIFY_CHANGE_ATTRIBUTES;
  //  通知ハンドルの生成
  intChangeNotifyHandle  :=  FindFirstChangeNotification
                             (PChar(strSpyPath), 
                                intSpySubTree, intSpyFilter);
  //   監視と通知
  if   intChangeNotifyHandle   <>   INVALID_HANDLE_VALUE   then
  begin
    //  監視開始
    intTimeOut     :=      180000;
    intReturn      :=      WaitForSingleObject(intChangeNotifyHandle,intTimeOut);
    //  結果通知
    if    intReturn    =   WAIT_TIMEOUT  then
    begin
      ShowMessage('Timeout!');
    end;
    if    intReturn    =   WAIT_OBJECT_0  then
    begin                                                 
      ShowMessage('Changed!');
    end;
  end;
  //  終了処理
  FindCloseChangeNotification(intChangeNotifyHandle);
end;