protected override unsafe void WndProc(ref Message m) { if (m.Msg == _wmShellHook) { switch ((User32.ShellEvents)m.WParam) { case User32.ShellEvents.HSHELL_WINDOWCREATED: if (IsAppWindow(m.LParam)) { OnWindowCreated(m.LParam); } break; case User32.ShellEvents.HSHELL_WINDOWDESTROYED: if (WindowDestroyed != null) { WindowDestroyed(this, m.LParam); } break; case User32.ShellEvents.HSHELL_ACTIVATESHELLWINDOW: if (ActivateShellWindow != null) { ActivateShellWindow(this, IntPtr.Zero); } break; case User32.ShellEvents.HSHELL_WINDOWACTIVATED: if (WindowActivated != null) { WindowActivated(this, m.LParam); } break; case User32.ShellEvents.HSHELL_GETMINRECT: if (GetMinRect != null) { SHELLHOOKINFO *ptr = (SHELLHOOKINFO *)m.LParam.ToPointer(); GetMinRect(this, ptr); } break; case User32.ShellEvents.HSHELL_REDRAW: if (Redraw != null) { Redraw(this, m.LParam); } break; case User32.ShellEvents.HSHELL_TASKMAN: if (Taskman != null) { Taskman(this, m.LParam); } break; case User32.ShellEvents.HSHELL_LANGUAGE: if (Language != null) { Language(this, IntPtr.Zero); } break; case User32.ShellEvents.HSHELL_SYSMENU: if (Sysmenu != null) { Sysmenu(this, m.LParam); } break; case User32.ShellEvents.HSHELL_ENDTASK: if (EndTask != null) { EndTask(this, m.LParam); } break; case User32.ShellEvents.HSHELL_ACCESSIBILITYSTATE: if (Accessibilitystate != null) { Accessibilitystate(this, m.LParam); } break; case User32.ShellEvents.HSHELL_APPCOMMAND: if (Appcommand != null) { throw new NotSupportedException("APPCOMMAND event currently not supported by shellhook"); } break; case User32.ShellEvents.HSHELL_WINDOWREPLACED: if (WindowReplaced != null) { WindowReplaced(this, m.LParam); } break; case User32.ShellEvents.HSHELL_WINDOWREPLACING: if (WindowReplacing != null) { WindowReplacing(this, m.LParam); } break; case User32.ShellEvents.HSHELL_FLASH: if (Flash != null) { Flash(this, m.LParam); } break; case User32.ShellEvents.HSHELL_RUDEAPPACTIVATED: if (RudeAppActivated != null) { RudeAppActivated(this, m.LParam); } break; default: break; } } base.WndProc(ref m); }
public ShellHookInfoEventArgs(IntPtr lpShellHookInfo) { this.lpShellHookInfo = (SHELLHOOKINFO *)lpShellHookInfo; }