Показать сообщение отдельно

  #9  
Старый 10.02.2008, 01:15
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
С нами: 10037186

Репутация: 1462
По умолчанию

Код:
using System.Runtime.InteropServices;
и собственно код , что выше ...
После класса добавляешь библиотеки и констнаты

Код:
  public partial class Form1 : Form
    {
        [DllImport("user32")]
        public static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);
        [DllImport("user32.dll")]
        static extern bool UnregisterHotKey(IntPtr hWnd, int id);


        private const int MOD_ALT = 0x1;
        private const int MOD_CONTROL = 0x2;
        private const int MOD_SHIFT = 0x4;
        private const int MOD_WIN = 0x8;

        private const int WM_HOTKEY = 0x312;

RegisterHotKey(

this.Handle, > хэндл нашего окна
42, > магическое число , идентифекатор хоткея , запомни его ...
MOD_WIN, > значит первой клавишей хоткея будет Win - клавиша , соответственно смотри констаты сверху
(int)Keys.T > значит что второй клавишей будет клавиша "T" , можешь поменять на любую , например (int)Keys.R
)
используем например:
RegisterHotKey(this.Handle, 42, MOD_WIN, (int)Keys.A);
RegisterHotKey(this.Handle, 43, MOD_SHIFT, (int)Keys.W);

Код:
 protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_HOTKEY)
            {
 Здесь - код выполняемый для хоткея ,


поскольку хоткеев может быть несколько, находим нужный по идентификатору ...

 switch (m.WParam.ToInt32())
                {
                    case 42:

                        Код для первого хоткея

                        break;

                    case 43:
                        Код для другого хоткея с id 43

                        break;
                }
}

и незабуть при закрытии убрать все хоткеи:
UnregisterHotKey(this.Handle, 42);
UnregisterHotKey(this.Handle, 43);