/// <summary> /// Processes all change notifications sent by the Windows Shell. /// </summary> /// <param name="e">The windows message representing the notification event</param> protected virtual void ProcessChangeNotificationEvent(WindowMessageEventArgs e) { if (!Running) { return; } if (e == null) { throw new ArgumentNullException("e"); } ChangeNotifyLock notifyLock = new ChangeNotifyLock(e.Message); ShellObjectNotificationEventArgs args = null; switch (notifyLock.ChangeType) { case ShellObjectChangeTypes.DirectoryRename: case ShellObjectChangeTypes.ItemRename: args = new ShellObjectRenamedEventArgs(notifyLock); break; case ShellObjectChangeTypes.SystemImageUpdate: args = new SystemImageUpdatedEventArgs(notifyLock); break; default: args = new ShellObjectChangedEventArgs(notifyLock); break; } _manager.Invoke(this, notifyLock.ChangeType, args); }