フォルダを監視する
フォルダを常に監視し、ファイル名の変更や削除が行われた事を検出するには 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;
|