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