.net - Set global hotkeys using C# -


i need capture key press when program not in focus. (ie. ctrl+alt+j) , trigger event in program.

thus far have found dll appears correct path"

[dllimport("user32.dll")]private static extern int registerhotkey(intptr hwnd, int id,int fsmodifiers, int vk);  [dllimport("user32.dll")] private static extern int unregisterhotkey(intptr hwnd, int id); 

please note code will not trigger events in console application projects. have use winforms project events fire.

this correct code:

public sealed  class keyboardhook : idisposable {     // registers hot key windows.     [dllimport("user32.dll")]     private static extern bool registerhotkey(intptr hwnd, int id, uint fsmodifiers, uint vk);     // unregisters hot key windows.     [dllimport("user32.dll")]     private static extern bool unregisterhotkey(intptr hwnd, int id);      /// <summary>     /// represents window used internally messages.     /// </summary>     private class window : nativewindow, idisposable     {         private static int wm_hotkey = 0x0312;          public window()         {             // create handle window.             this.createhandle(new createparams());         }          /// <summary>         /// overridden notifications.         /// </summary>         /// <param name="m"></param>         protected override void wndproc(ref message m)         {             base.wndproc(ref m);              // check if got hot key pressed.             if (m.msg == wm_hotkey)             {                 // keys.                 keys key = (keys)(((int)m.lparam >> 16) & 0xffff);                 modifierkeys modifier = (modifierkeys)((int)m.lparam & 0xffff);                  // invoke event notify parent.                 if (keypressed != null)                     keypressed(this, new keypressedeventargs(modifier, key));             }         }          public event eventhandler<keypressedeventargs> keypressed;          #region idisposable members          public void dispose()         {             this.destroyhandle();         }          #endregion     }      private window _window = new window();     private int _currentid;      public keyboardhook()     {         // register event of inner native window.         _window.keypressed += delegate(object sender, keypressedeventargs args)         {             if (keypressed != null)                 keypressed(this, args);         };     }      /// <summary>     /// registers hot key in system.     /// </summary>     /// <param name="modifier">the modifiers associated hot key.</param>     /// <param name="key">the key associated hot key.</param>     public void registerhotkey(modifierkeys modifier, keys key)     {         // increment counter.         _currentid = _currentid + 1;          // register hot key.         if (!registerhotkey(_window.handle, _currentid, (uint)modifier, (uint)key))             throw new invalidoperationexception("couldn’t register hot key.");     }      /// <summary>     /// hot key has been pressed.     /// </summary>     public event eventhandler<keypressedeventargs> keypressed;      #region idisposable members      public void dispose()     {         // unregister registered hot keys.         (int = _currentid; > 0; i--)         {             unregisterhotkey(_window.handle, i);         }          // dispose inner native window.         _window.dispose();     }      #endregion }  /// <summary> /// event args event fired after hot key has been pressed. /// </summary> public class keypressedeventargs : eventargs {     private modifierkeys _modifier;     private keys _key;      internal keypressedeventargs(modifierkeys modifier, keys key)     {         _modifier = modifier;         _key = key;     }      public modifierkeys modifier     {         { return _modifier; }     }      public keys key     {         { return _key; }     } }  /// <summary> /// enumeration of possible modifiers. /// </summary> [flags] public enum modifierkeys : uint {     alt = 1,     control = 2,     shift = 4,     win = 8 } 

to use (i had edit modifier keys cast them (modifier)1 (modifier)2 etc

public partial  class form1 : form {     keyboardhook hook = new keyboardhook();      public form1()     {         initializecomponent();          // register event fired after key press.         hook.keypressed +=             new eventhandler<keypressedeventargs>(hook_keypressed);         // register control + alt + f12 combination hot key.         hook.registerhotkey(modifierkeys.control | modifierkeys.alt,             keys.f12);     }      void hook_keypressed(object sender, keypressedeventargs e)     {         // show keys pressed in label.         label1.text = e.modifier.tostring() + " + " + e.key.tostring();     } } 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -