hey i need help with system hooks. I need it so when mi program is minimized i can press Ctrl R and it will start a script in the program then ctrl s will stop it.
Thank you in advance
Mague
Thank you in advance
Mague
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Hotkey.Win32 { /// <summary> /// Summary description for Win32. /// </summary> public class User32 { [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id); } public class Kernel32 { [DllImport("kernel32.dll")] public static extern int GlobalAddAtom(string Name); [DllImport("kernel32.dll")] public static extern int GlobalDeleteAtom(int atom); [DllImport("kernel32.dll")] public static extern IntPtr GlobalLock(IntPtr hMem); [DllImport("kernel32.dll")] public static extern bool GlobalUnlock(IntPtr hMem); } public enum Modifiers { MOD_ALT = 0x0001, MOD_CONTROL = 0x0002, MOD_SHIFT = 0x0004, MOD_WIN = 0x0008 } public enum Msgs { WM_NULL = 0x0000, WM_CREATE = 0x0001, WM_DESTROY = 0x0002, WM_MOVE = 0x0003, WM_SIZE = 0x0005, WM_ACTIVATE = 0x0006, WM_SETFOCUS = 0x0007, WM_KILLFOCUS = 0x0008, WM_ENABLE = 0x000A, WM_SETREDRAW = 0x000B, WM_SETTEXT = 0x000C, WM_GETTEXT = 0x000D, WM_GETTEXTLENGTH = 0x000E, WM_PAINT = 0x000F, WM_CLOSE = 0x0010, WM_QUERYENDSESSION = 0x0011, WM_QUIT = 0x0012, WM_QUERYOPEN = 0x0013, WM_ERASEBKGND = 0x0014, WM_SYSCOLORCHANGE = 0x0015, WM_ENDSESSION = 0x0016, WM_SHOWWINDOW = 0x0018, WM_WININICHANGE = 0x001A, WM_SETTINGCHANGE = 0x001A, WM_DEVMODECHANGE = 0x001B, WM_ACTIVATEAPP = 0x001C, WM_FONTCHANGE = 0x001D, WM_TIMECHANGE = 0x001E, WM_CANCELMODE = 0x001F, WM_SETCURSOR = 0x0020, WM_MOUSEACTIVATE = 0x0021, WM_CHILDACTIVATE = 0x0022, WM_QUEUESYNC = 0x0023, WM_GETMINMAXINFO = 0x0024, WM_PAINTICON = 0x0026, WM_ICONERASEBKGND = 0x0027, WM_NEXTDLGCTL = 0x0028, WM_SPOOLERSTATUS = 0x002A, WM_DRAWITEM = 0x002B, WM_MEASUREITEM = 0x002C, WM_DELETEITEM = 0x002D, WM_VKEYTOITEM = 0x002E, WM_CHARTOITEM = 0x002F, WM_SETFONT = 0x0030, WM_GETFONT = 0x0031, WM_SETHOTKEY = 0x0032, WM_GETHOTKEY = 0x0033, WM_QUERYDRAGICON = 0x0037, WM_COMPAREITEM = 0x0039, WM_GETOBJECT = 0x003D, WM_COMPACTING = 0x0041, WM_COMMNOTIFY = 0x0044, WM_WINDOWPOSCHANGING = 0x0046, WM_WINDOWPOSCHANGED = 0x0047, WM_POWER = 0x0048, WM_COPYDATA = 0x004A, WM_CANCELJOURNAL = 0x004B, WM_NOTIFY = 0x004E, WM_INPUTLANGCHANGEREQUEST = 0x0050, WM_INPUTLANGCHANGE = 0x0051, WM_TCARD = 0x0052, WM_HELP = 0x0053, WM_USERCHANGED = 0x0054, WM_NOTIFYFORMAT = 0x0055, WM_CONTEXTMENU = 0x007B, WM_STYLECHANGING = 0x007C, WM_STYLECHANGED = 0x007D, WM_DISPLAYCHANGE = 0x007E, WM_GETICON = 0x007F, WM_SETICON = 0x0080, WM_NCCREATE = 0x0081, WM_NCDESTROY = 0x0082, WM_NCCALCSIZE = 0x0083, WM_NCHITTEST = 0x0084, WM_NCPAINT = 0x0085, WM_NCACTIVATE = 0x0086, WM_GETDLGCODE = 0x0087, WM_SYNCPAINT = 0x0088, WM_NCMOUSEMOVE = 0x00A0, WM_NCLBUTTONDOWN = 0x00A1, WM_NCLBUTTONUP = 0x00A2, WM_NCLBUTTONDBLCLK = 0x00A3, WM_NCRBUTTONDOWN = 0x00A4, WM_NCRBUTTONUP = 0x00A5, WM_NCRBUTTONDBLCLK = 0x00A6, WM_NCMBUTTONDOWN = 0x00A7, WM_NCMBUTTONUP = 0x00A8, WM_NCMBUTTONDBLCLK = 0x00A9, WM_KEYDOWN = 0x0100, WM_KEYUP = 0x0101, WM_CHAR = 0x0102, WM_DEADCHAR = 0x0103, WM_SYSKEYDOWN = 0x0104, WM_SYSKEYUP = 0x0105, WM_SYSCHAR = 0x0106, WM_SYSDEADCHAR = 0x0107, WM_KEYLAST = 0x0108, WM_IME_STARTCOMPOSITION = 0x010D, WM_IME_ENDCOMPOSITION = 0x010E, WM_IME_COMPOSITION = 0x010F, WM_IME_KEYLAST = 0x010F, WM_INITDIALOG = 0x0110, WM_COMMAND = 0x0111, WM_SYSCOMMAND = 0x0112, WM_TIMER = 0x0113, WM_HSCROLL = 0x0114, WM_VSCROLL = 0x0115, WM_INITMENU = 0x0116, WM_INITMENUPOPUP = 0x0117, WM_MENUSELECT = 0x011F, WM_MENUCHAR = 0x0120, WM_ENTERIDLE = 0x0121, WM_MENURBUTTONUP = 0x0122, WM_MENUDRAG = 0x0123, WM_MENUGETOBJECT = 0x0124, WM_UNINITMENUPOPUP = 0x0125, WM_MENUCOMMAND = 0x0126, WM_CTLCOLORMSGBOX = 0x0132, WM_CTLCOLOREDIT = 0x0133, WM_CTLCOLORLISTBOX = 0x0134, WM_CTLCOLORBTN = 0x0135, WM_CTLCOLORDLG = 0x0136, WM_CTLCOLORSCROLLBAR = 0x0137, WM_CTLCOLORSTATIC = 0x0138, WM_MOUSEMOVE = 0x0200, WM_LBUTTONDOWN = 0x0201, WM_LBUTTONUP = 0x0202, WM_LBUTTONDBLCLK = 0x0203, WM_RBUTTONDOWN = 0x0204, WM_RBUTTONUP = 0x0205, WM_RBUTTONDBLCLK = 0x0206, WM_MBUTTONDOWN = 0x0207, WM_MBUTTONUP = 0x0208, WM_MBUTTONDBLCLK = 0x0209, WM_MOUSEWHEEL = 0x020A, WM_PARENTNOTIFY = 0x0210, WM_ENTERMENULOOP = 0x0211, WM_EXITMENULOOP = 0x0212, WM_NEXTMENU = 0x0213, WM_SIZING = 0x0214, WM_CAPTURECHANGED = 0x0215, WM_MOVING = 0x0216, WM_DEVICECHANGE = 0x0219, WM_MDICREATE = 0x0220, WM_MDIDESTROY = 0x0221, WM_MDIACTIVATE = 0x0222, WM_MDIRESTORE = 0x0223, WM_MDINEXT = 0x0224, WM_MDIMAXIMIZE = 0x0225, WM_MDITILE = 0x0226, WM_MDICASCADE = 0x0227, WM_MDIICONARRANGE = 0x0228, WM_MDIGETACTIVE = 0x0229, WM_MDISETMENU = 0x0230, WM_ENTERSIZEMOVE = 0x0231, WM_EXITSIZEMOVE = 0x0232, WM_DROPFILES = 0x0233, WM_MDIREFRESHMENU = 0x0234, WM_IME_SETCONTEXT = 0x0281, WM_IME_NOTIFY = 0x0282, WM_IME_CONTROL = 0x0283, WM_IME_COMPOSITIONFULL = 0x0284, WM_IME_SELECT = 0x0285, WM_IME_CHAR = 0x0286, WM_IME_REQUEST = 0x0288, WM_IME_KEYDOWN = 0x0290, WM_IME_KEYUP = 0x0291, WM_MOUSEHOVER = 0x02A1, WM_MOUSELEAVE = 0x02A3, WM_CUT = 0x0300, WM_COPY = 0x0301, WM_PASTE = 0x0302, WM_CLEAR = 0x0303, WM_UNDO = 0x0304, WM_RENDERFORMAT = 0x0305, WM_RENDERALLFORMATS = 0x0306, WM_DESTROYCLIPBOARD = 0x0307, WM_DRAWCLIPBOARD = 0x0308, WM_PAINTCLIPBOARD = 0x0309, WM_VSCROLLCLIPBOARD = 0x030A, WM_SIZECLIPBOARD = 0x030B, WM_ASKCBFORMATNAME = 0x030C, WM_CHANGECBCHAIN = 0x030D, WM_HSCROLLCLIPBOARD = 0x030E, WM_QUERYNEWPALETTE = 0x030F, WM_PALETTEISCHANGING = 0x0310, WM_PALETTECHANGED = 0x0311, WM_HOTKEY = 0x0312, WM_PRINT = 0x0317, WM_PRINTCLIENT = 0x0318, WM_HANDHELDFIRST = 0x0358, WM_HANDHELDLAST = 0x035F, WM_AFXFIRST = 0x0360, WM_AFXLAST = 0x037F, WM_PENWINFIRST = 0x0380, WM_PENWINLAST = 0x038F, WM_APP = 0x8000, WM_USER = 0x0400, WM_DDE_INITIATE = 0x03E0, WM_DDE_TERMINATE, WM_DDE_ADVISE, WM_DDE_UNADVISE, WM_DDE_ACK, WM_DDE_DATA, WM_DDE_REQUEST, WM_DDE_POKE, WM_DDE_EXECUTE } /// <summary> /// Defines a delegate for Message handling /// </summary> public delegate void MessageEventHandler(object Sender, ref Message msg, ref bool Handled); /// <summary> /// Inherits from System.Windows.Form.NativeWindow. Provides an Event for Message handling /// </summary> public class NativeWindowWithEvent : System.Windows.Forms.NativeWindow { public event MessageEventHandler ProcessMessage; protected override void WndProc(ref Message m) { if (ProcessMessage != null) { bool Handled = false; ProcessMessage(this, ref m, ref Handled); if (!Handled) base.WndProc(ref m); } else base.WndProc(ref m); } } /// <summary> /// Inherits from NativeWindowWithEvent and automatic creates/destroys of a dummy window /// </summary> public class DummyWindowWithEvent : NativeWindowWithEvent, IDisposable { public DummyWindowWithEvent() { CreateParams parms = new CreateParams(); this.CreateHandle(parms); } public void Dispose() { if (this.Handle != (IntPtr)0) { this.DestroyHandle(); } } } }
using System; using System.ComponentModel; using System.Collections; using System.Diagnostics; using System.Windows.Forms; using Hotkey.Win32; namespace Hotkey.SystemHotkey { /// <summary> /// Handles a System Hotkey /// </summary> public class SystemHotkey : System.ComponentModel.Component, IDisposable { private System.ComponentModel.Container components = null; protected DummyWindowWithEvent m_Window = new DummyWindowWithEvent(); //window for WM_Hotkey Messages protected Shortcut m_HotKey = Shortcut.None; protected bool isRegistered = false; public event System.EventHandler Pressed; public event System.EventHandler Error; public SystemHotkey(System.ComponentModel.IContainer container) { container.Add(this); InitializeComponent(); m_Window.ProcessMessage += new MessageEventHandler(MessageEvent); } public SystemHotkey() { InitializeComponent(); if (!DesignMode) { m_Window.ProcessMessage += new MessageEventHandler(MessageEvent); } } public new void Dispose() { if (isRegistered) { if (UnregisterHotkey()) System.Diagnostics.Debug.WriteLine("Unreg: OK"); } System.Diagnostics.Debug.WriteLine("Disposed"); } #region Component Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { components = new System.ComponentModel.Container(); } #endregion protected void MessageEvent(object sender, ref Message m, ref bool Handled) { //Handle WM_Hotkey event if ((m.Msg == (int)Win32.Msgs.WM_HOTKEY) && (m.WParam == (IntPtr)this.GetType().GetHashCode())) { Handled = true; System.Diagnostics.Debug.WriteLine("HOTKEY pressed!"); if (Pressed != null) Pressed(this, EventArgs.Empty); } } protected bool UnregisterHotkey() { //unregister hotkey return Win32.User32.UnregisterHotKey(m_Window.Handle, this.GetType().GetHashCode()); } protected bool RegisterHotkey(Shortcut key) { //register hotkey int mod = 0; Keys k2 = Keys.None; if (((int)key & (int)Keys.Alt) == (int)Keys.Alt) { mod += (int)Win32.Modifiers.MOD_ALT; k2 = Keys.Alt; } if (((int)key & (int)Keys.Shift) == (int)Keys.Shift) { mod += (int)Win32.Modifiers.MOD_SHIFT; k2 = Keys.Shift; } if (((int)key & (int)Keys.Control) == (int)Keys.Control) { mod += (int)Win32.Modifiers.MOD_CONTROL; k2 = Keys.Control; } System.Diagnostics.Debug.Write(mod.ToString() + " "); System.Diagnostics.Debug.WriteLine((((int)key) - ((int)k2)).ToString()); return Win32.User32.RegisterHotKey(m_Window.Handle, this.GetType().GetHashCode(), (int)mod, ((int)key) - ((int)k2)); } public bool IsRegistered { get { return isRegistered; } } [DefaultValue(Shortcut.None)] public Shortcut Shortcut { get { return m_HotKey; } set { if (DesignMode) { m_HotKey = value; return; } //Don't register in Designmode if ((isRegistered) && (m_HotKey != value)) //Unregister previous registered Hotkey { if (UnregisterHotkey()) { System.Diagnostics.Debug.WriteLine("Unreg: OK"); isRegistered = false; } else { if (Error != null) Error(this, EventArgs.Empty); System.Diagnostics.Debug.WriteLine("Unreg: ERR"); } } if (value == Shortcut.None) { m_HotKey = value; return; } if (RegisterHotkey(value)) //Register new Hotkey { System.Diagnostics.Debug.WriteLine("Reg: OK"); isRegistered = true; } else { if (Error != null) Error(this, EventArgs.Empty); System.Diagnostics.Debug.WriteLine("Reg: ERR"); } m_HotKey = value; } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace HotkeyNameSpace { public partial class Form1 : Form { private System.Windows.Forms.Label label1; //Making a new Hotkey..... private Hotkey.SystemHotkey.SystemHotkey systemHotkey1; private System.Windows.Forms.Label label2; private System.ComponentModel.IContainer components; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.systemHotkey1 = new Hotkey.SystemHotkey.SystemHotkey(this.components); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // systemHotkey1 // this.systemHotkey1.Shortcut = System.Windows.Forms.Shortcut.CtrlR; //Here make your own Hotkey. this.systemHotkey1.Pressed += new System.EventHandler(this.systemHotkey1_Pressed); // // label1 // this.label1.Location = new System.Drawing.Point(64, 16); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(280, 96); this.label1.TabIndex = 0; this.label1.Text = "Waiting for events"; // // label2 // this.label2.Location = new System.Drawing.Point(72, 184); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(240, 72); this.label2.TabIndex = 1; this.label2.Text = "Use the SystemHotkey Component in Windows Forms designer to modify the Hotkey. Pr" + "ess Ctrl+R to fire the Hotkey event"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(400, 286); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } private void systemHotkey1_Pressed(object sender, System.EventArgs e) { label1.Text = "Hotkey Pressed!"; MessageBox.Show("Hotkey pressed...", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Activate(); this.BringToFront(); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace HotkeyNameSpace { public partial class Form1 : Form { private System.Windows.Forms.Label label1; //Making a new Hotkey..... private Hotkey.SystemHotkey.SystemHotkey systemHotkey1; private System.Windows.Forms.Label label2; private System.ComponentModel.IContainer components; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.systemHotkey1 = new Hotkey.SystemHotkey.SystemHotkey(this.components); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // systemHotkey1 // this.systemHotkey1.Shortcut = System.Windows.Forms.Shortcut.CtrlR; //Here make your own Hotkey. this.systemHotkey1.Pressed += new System.EventHandler(this.systemHotkey1_Pressed); // // label1 // this.label1.Location = new System.Drawing.Point(64, 16); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(280, 96); this.label1.TabIndex = 0; this.label1.Text = "Waiting for events"; // // label2 // this.label2.Location = new System.Drawing.Point(72, 184); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(240, 72); this.label2.TabIndex = 1; this.label2.Text = "Use the SystemHotkey Component in Windows Forms designer to modify the Hotkey. Pr" + "ess Ctrl+R to fire the Hotkey event"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(400, 286); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(fals e); Application.Run(new Form1()); } private void systemHotkey1_Pressed(object sender, System.EventArgs e) { label1.Text = "Hotkey Pressed!"; MessageBox.Show("Hotkey pressed...", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Activate(); this.BringToFront(); } } }
this.components = new System.ComponentModel.Container(); //Make a new hotkey. this.systemHotkey1 = new Hotkey.SystemHotkey.SystemHotkey(this.components); //Make a key to the hotkey. this.systemHotkey1.Shortcut = System.Windows.Forms.Shortcut.CtrlR; //Here make your own Hotkey. //Make an pressing event handler. this.systemHotkey1.Pressed += new System.EventHandler(this.systemHotkey1_Pressed);
//If the hotkey pressed, do an action. private void systemHotkey1_Pressed(object sender, System.EventArgs e) { label1.Text = "Hotkey Pressed!"; MessageBox.Show("Hotkey pressed...", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Activate(); this.BringToFront(); }
Comment