ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

C# привязка к клавишам
  #1  
Старый 04.02.2008, 22:55
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

Репутация: 310
По умолчанию C# привязка к клавишам

Здраствуйте у меня вопрос как можно привязать кнопку к комбинации клавиш. Например сохранить кнопка (ctrl+s)
 

  #2  
Старый 04.02.2008, 23:11
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме:
3371897

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

API: user32.dll --> RegisterHotKey() ...

Код:
 [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;

    public frmMain()
    {
        // Например хоткей WIN+T
        RegisterHotKey( this.Handle, 42, MOD_WIN, (int)Keys.T );
    }

    protected override void WndProc(ref Message m)
    {
        base.WndProc (ref m);
        if( m.Msg == WM_HOTKEY )
        {
            if( !this.Visible )
                this.Visible = true;
            this.Activate();
        }
    }

    private void frmMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        UnregisterHotKey( this.Handle, 42 );
    }
 

  #3  
Старый 05.02.2008, 18:22
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

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

А можно как нибудь попроще?
A то сложно здесь както
 

  #4  
Старый 05.02.2008, 21:41
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

Код:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.Enter)
{
MessageBox.Show("WoW");
}
}
так что-ли?

тут один нюанс, код сработает при нажатии сочетания на активном окне...
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 05.02.2008 в 21:43..
 

  #5  
Старый 07.02.2008, 18:30
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

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

Цитата:
Сообщение от W!z@rD  
Код:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.Enter)
{
MessageBox.Show("WoW");
}
}
так что-ли?

тут один нюанс, код сработает при нажатии сочетания на активном окне...
Не не пашет
 

  #6  
Старый 08.02.2008, 16:52
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

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

А можно ли по другому))?
 

  #7  
Старый 09.02.2008, 22:32
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме:
3371897

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

на api практичнее ...
 

  #8  
Старый 09.02.2008, 23:55
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

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

Ну мне расскажи как подключить все это дело

Последний раз редактировалось brasco2k; 10.02.2008 в 15:45..
 

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

Репутация: 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);
 

  #10  
Старый 10.02.2008, 16:03
brasco2k
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме:
1215706

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

БО000000000000льшое спасибо!!!
 
Закрытая тема





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ