Delphiモニタファイルの変更
2031 ワード
unit FileSysThread;
interface
uses
Windows, SysUtils, Classes, comctrls;
type
TFileSysNotifyThread = class(TThread)
private
ErrCode: Integer;
KillAddress: PInteger;
NotifyHandle: THandle;
WatchPath: string;
WatchMask: Integer;
procedure SignalFileNotification;
protected
procedure Execute; override;
public
constructor Create(const AWatchPath: string; AWatchMask: Integer; var Myself: TFileSysNotifyThread);
destructor Destroy; override;
end;
implementation
uses Dialogs;
constructor TFileSysNotifyThread.Create(const AWatchPath: string; AWatchMask: Integer; var Myself: TFileSysNotifyThread);
begin
inherited Create(True);
WatchPath := AWatchPath;
WatchMask := AWatchMask;
KillAddress := Addr(Myself);
Priority := tpLower;
FreeOnTerminate := True;
Suspended := False;
end;
destructor TFileSysNotifyThread.Destroy;
begin
if NotifyHandle <> THandle(-1) then
FindCloseChangeNotification(NotifyHandle);
inherited Destroy;
KillAddress^ := 0;
end;
procedure TFileSysNotifyThread.Execute;
begin
NotifyHandle := FindFirstChangeNotification(PChar(WatchPath), True, WatchMask);
if NotifyHandle <> THandle(-1) then
while not Terminated do begin
ErrCode := WaitForSingleObject(NotifyHandle, 250);
case ErrCode of
Wait_Timeout:
;
Wait_Object_0:
begin
Synchronize(SignalFileNotification);
FindNextChangeNotification(NotifyHandle);
end;
else ;
end;
end;
end;
procedure TFileSysNotifyThread.SignalFileNotification;
begin
ShowMessage(' ! ');
end;
end.