Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

04.02.2008, 22:55
|
|
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме: 1215706
Репутация:
310
|
|
C# привязка к клавишам
Здраствуйте у меня вопрос как можно привязать кнопку к комбинации клавиш. Например сохранить кнопка (ctrl+s)
|
|
|

04.02.2008, 23:11
|
|
Постоянный
Регистрация: 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 );
}
|
|
|

05.02.2008, 18:22
|
|
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме: 1215706
Репутация:
310
|
|
А можно как нибудь попроще?
A то сложно здесь както
|
|
|

05.02.2008, 21:41
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Код:
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..
|
|
|

07.02.2008, 18:30
|
|
Постоянный
Регистрация: 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");
}
}
так что-ли?
тут один нюанс, код сработает при нажатии сочетания на активном окне...
Не не пашет
|
|
|

08.02.2008, 16:52
|
|
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме: 1215706
Репутация:
310
|
|
А можно ли по другому))?
|
|
|

09.02.2008, 22:32
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме: 3371897
Репутация:
1462
|
|
на api практичнее ...
|
|
|

09.02.2008, 23:55
|
|
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме: 1215706
Репутация:
310
|
|
Ну мне расскажи как подключить все это дело
Последний раз редактировалось brasco2k; 10.02.2008 в 15:45..
|
|
|

10.02.2008, 01:15
|
|
Постоянный
Регистрация: 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.02.2008, 16:03
|
|
Постоянный
Регистрация: 23.11.2007
Сообщений: 342
Провел на форуме: 1215706
Репутация:
310
|
|
БО000000000000льшое спасибо!!!
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|