Witam, szukam sposobu na odczyt globalnych skrótów klawiszowych, znalazłem takie rozwiązanie - które niestety umożliwia tylko na korzystanie z jednego skrótu jednocześnie:
biblioteka hotkeys:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Hotkeys
{
public class GlobalHotkey
{
private int modifier;
private int key;
private IntPtr hWnd;
private int id;
public GlobalHotkey(int modifier, Keys key, Form form)
{
this.modifier = modifier;
this.key = (int)key;
this.hWnd = form.Handle;
id = this.GetHashCode();
}
public static class Constants
{
//modifiers
public const int NOMOD = 0x0000;
public const int ALT = 0x0001;
public const int CTRL = 0x0002;
public const int SHIFT = 0x0004;
public const int WIN = 0x0008;
//windows message id for hotkey
public const int WM_HOTKEY_MSG_ID = 0x0312;
}
public bool Register()
{
return RegisterHotKey(hWnd, id, modifier, key);
}
public bool Unregiser()
{
return UnregisterHotKey(hWnd, id);
}
public override int GetHashCode()
{
return modifier ^ key ^ hWnd.ToInt32();
}
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
[DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
}
}
Oraz plik główny
using System;
using System.Windows.Forms;
using Hotkeys;
namespace HotkeyWin
{
public partial class Form1 : Form
{
private Hotkeys.GlobalHotkey ghk;
public Form1()
{
InitializeComponent();
ghk = new Hotkeys.GlobalHotkey(Constants.ALT + Constants.SHIFT, Keys.O, this);
}
private void HandleHotkey()
{
WriteLine("Hotkey pressed!");
}
protected override void WndProc(ref Message m)
{
if (m.Msg == Hotkeys.Constants.WM_HOTKEY_MSG_ID)
HandleHotkey();
base.WndProc(ref m);
}
private void Form1_Load(object sender, EventArgs e)
{
WriteLine("Trying to register SHIFT+ALT+O");
if (ghk.Register())
WriteLine("Hotkey registered.");
else
WriteLine("Hotkey failed to register");
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!ghk.Unregiser())
MessageBox.Show("Hotkey failed to unregister!");
}
private void WriteLine(string text)
{
textBox1.Text += text + Environment.NewLine;
}
}
}
Rozwiązanie zaczerpnięte stąd: http://www.dreamincode.net/forums/topic/180436-global-hotkeys/
Pozdrawiam :)