Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {********************************************************}
- { }
- { Firesoft ShellNotify Demo - Form Main }
- { }
- { Copyright (c) Federico Firenze }
- { Buenos Aires, Argentina }
- { }
- {********************************************************}
- unit unMain;
- {$IFNDEF VER110}
- {$IFNDEF VER120}
- {$IFNDEF VER130}
- {$WARN UNIT_PLATFORM OFF}
- {$ENDIF}
- {$ENDIF}
- {$ENDIF}
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ShellNotify, StdCtrls, FileCtrl;
- type
- TfrmMain = class(TForm)
- bgNotifyPaths: TGroupBox;
- lbPaths: TListBox;
- btnAdd: TButton;
- btnRemove: TButton;
- btnClear: TButton;
- GroupBox1: TGroupBox;
- lbEvents: TListBox;
- btnStart: TButton;
- btnStop: TButton;
- btnClearLog: TButton;
- procedure btnStartClick(Sender: TObject);
- procedure btnStopClick(Sender: TObject);
- procedure btnRemoveClick(Sender: TObject);
- procedure btnClearClick(Sender: TObject);
- procedure btnAddClick(Sender: TObject);
- procedure ShellNotifyNotify(Sender: TObject; Event: TShellNotifyEvent; Path1, Path2: AnsiString);
- procedure btnClearLogClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- ShellNotify: TShellNotify;
- procedure CheckButtons;
- end;
- var
- frmMain: TfrmMain;
- implementation
- {$R *.DFM}
- procedure TfrmMain.btnStartClick(Sender: TObject);
- begin
- ShellNotify.PathList.Assign(lbPaths.Items);
- ShellNotify.Active := True;
- CheckButtons;
- end;
- procedure TfrmMain.btnStopClick(Sender: TObject);
- begin
- ShellNotify.Active := False;
- CheckButtons;
- end;
- procedure TfrmMain.CheckButtons;
- var
- AActive: Boolean;
- begin
- AActive := ShellNotify.Active;
- btnStart.Enabled := not AActive;
- btnStop.Enabled := AActive;
- end;
- procedure TfrmMain.btnRemoveClick(Sender: TObject);
- begin
- if lbPaths.ItemIndex <> -1 then
- lbPaths.Items.Delete(lbPaths.ItemIndex);
- end;
- procedure TfrmMain.btnClearClick(Sender: TObject);
- begin
- lbPaths.Items.Clear;
- end;
- function GetTempDirectory: AnsiString;
- var
- tempFolder: array[0..MAX_PATH] of AnsiChar;
- begin
- Windows.GetTempPathA(MAX_PATH, @tempFolder);
- Result := StrPas(tempFolder);
- end;
- procedure TfrmMain.btnAddClick(Sender: TObject);
- var
- TempDir: AnsiString;
- begin
- TempDir := GetTempDirectory;
- if not DirectoryExists(TempDir) then begin
- ShowMessage('%TEMP% directory not found.');
- Exit;
- end;
- lbPaths.Items.Add(TempDir); // 1
- lbPaths.Items.Add(TempDir); // 2
- lbPaths.Items.Add(TempDir); // 3
- lbPaths.Items.Add(TempDir); // 4
- lbPaths.Items.Add(TempDir); // 5
- lbPaths.Items.Add(TempDir); // 6
- lbPaths.Items.Add(TempDir); // 7
- lbPaths.Items.Add(TempDir); // 8
- lbPaths.Items.Add(TempDir); // 9
- lbPaths.Items.Add(TempDir); // 10
- lbPaths.Items.Add(TempDir); // 11
- lbPaths.Items.Add(TempDir); // 12
- lbPaths.Items.Add(TempDir); // 13
- lbPaths.Items.Add(TempDir); // 14
- lbPaths.Items.Add(TempDir); // 15
- lbPaths.Items.Add(TempDir); // 16
- lbPaths.Items.Add(TempDir); // 17
- lbPaths.Items.Add(TempDir); // 18
- lbPaths.Items.Add(TempDir); // 19
- lbPaths.Items.Add(TempDir); // 20
- lbPaths.Items.Add(TempDir); // 21
- lbPaths.Items.Add(TempDir); // 22
- lbPaths.Items.Add(TempDir); // 23
- lbPaths.Items.Add(TempDir); // 24
- lbPaths.Items.Add(TempDir); // 25
- lbPaths.Items.Add(TempDir); // 26
- lbPaths.Items.Add(TempDir); // 27
- lbPaths.Items.Add(TempDir); // 28
- lbPaths.Items.Add(TempDir); // 29
- lbPaths.Items.Add(TempDir); // 30
- lbPaths.Items.Add(TempDir); // 31
- lbPaths.Items.Add(TempDir); // 32
- lbPaths.Items.Add(TempDir); // 33
- lbPaths.Items.Add(TempDir); // 34
- lbPaths.Items.Add(TempDir); // 35
- lbPaths.Items.Add(TempDir); // 36
- lbPaths.Items.Add(TempDir); // 37
- lbPaths.Items.Add(TempDir); // 38
- lbPaths.Items.Add(TempDir); // 39
- lbPaths.Items.Add(TempDir); // 40
- lbPaths.Items.Add(TempDir); // 41
- lbPaths.Items.Add(TempDir); // 42
- lbPaths.Items.Add(TempDir); // 43
- lbPaths.Items.Add(TempDir); // 44
- lbPaths.Items.Add(TempDir); // 45
- lbPaths.Items.Add(TempDir); // 46
- lbPaths.Items.Add(TempDir); // 47 <--- OK up to here...
- lbPaths.Items.Add(TempDir); // 48 <--- causes EOSError
- end;
- procedure TfrmMain.ShellNotifyNotify(Sender: TObject; Event: TShellNotifyEvent; Path1, Path2: AnsiString);
- begin
- // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotify.asp
- case Event of
- neAssocChanged:
- lbEvents.Items.Add('A file type association has changed ' + Path1);
- neAttributes:
- lbEvents.Items.Add('The attributes of an item or folder have changed ' + Path1);
- neCreate:
- lbEvents.Items.Add('A nonfolder item has been created ' + Path1);
- neDelete:
- lbEvents.Items.Add('A nonfolder item has been deleted ' + Path1);
- neDriveAdd:
- lbEvents.Items.Add('A drive has been added ' + Path1);
- neDriveAddGUI:
- lbEvents.Items.Add('A drive has been added and the Shell should create a new window for the drive ' + Path1);
- neDriveRemoved:
- lbEvents.Items.Add('A drive has been removed ' + Path1);
- neMediaInserted:
- lbEvents.Items.Add('Storage media has been inserted into a drive ' + Path1);
- neMediaRemoved:
- lbEvents.Items.Add('Storage media has been removed from a drive ' + Path1);
- neMkDir:
- lbEvents.Items.Add('A folder has been created ' + Path1);
- neNetShare:
- lbEvents.Items.Add('A folder on the local computer is being shared via the network ' + Path1);
- neNetUnshare:
- lbEvents.Items.Add('A folder on the local computer is no longer being shared via the network ' + Path1);
- neRenameFolder:
- lbEvents.Items.Add('The name of a folder "' + Path1 + '" has changed to "' + Path2 + '"');
- neRenameItem:
- lbEvents.Items.Add('The name of a nonfolder item "' + Path1 + '" has changed to "' + Path2 + '"');
- neRmDir:
- lbEvents.Items.Add('A folder has been removed ' + Path1);
- neServerDisconnect:
- lbEvents.Items.Add('The computer has disconnected from a server ' + Path1);
- neUpdateDir:
- lbEvents.Items.Add('The contents of an existing folder have changed, but the folder still exists and has not been renamed ' + Path1);
- neUpdateImage:
- lbEvents.Items.Add('An image in the system image list has changed ' + Path1 + Path2);
- neUpdateItem:
- lbEvents.Items.Add('An existing nonfolder item has changed, but the item still exists and has not been renamed ' + Path1);
- neOther:
- lbEvents.Items.Add('Other "' + Path1 + '", "' + Path2 + '"');
- end;
- end;
- procedure TfrmMain.btnClearLogClick(Sender: TObject);
- begin
- lbEvents.Items.Clear;
- end;
- procedure TfrmMain.FormCreate(Sender: TObject);
- begin
- ShellNotify := TShellNotify.Create(Self);
- ShellNotify.OnNotify := ShellNotifyNotify;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment