хук для запрета нажатия клавиши
private static IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
Собственно в консоли выводятся нажатые мною клавиши.
1)Как я определю что нажата ,например, клавиша "А"??
например
if((Keys)vkCode==Keys.A)
...
не работает
значения виртуальных клавиш как мне прочитать,так в доках написано примерно так:
LRESULT CALLBACK KeyboardProc( int code, // код hook-точки WPARAM wParam, // код виртуальной клавиши LPARAM lParam // информация о сообщении нажатой клавиши);
однако видно что инфа о клавише идет с 3 параметра функции. В переменной vkCode цифры что показывают.сравнивал по таблице виртуальных клавиш не соответствует.
2)мне нужно запретить нажатие определенной клавиши в сторонней программе .как бы перехватить это нажатие можно, а как быть с тем чтобы чужая программа не узнала что нажата эта клавиша и сооветственно не отреагировала? .Вариант с отломом этой клавиши не предлагать ! :)
А что касается виртуального кода клавиши, то есть такая инфо:
/* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */
можно в принципе указать и в двоичном виде.
ЗЫ ошибки в коде не искал, напрягает чужой код разглядывать.
Советую код оформить по правилам, пока никто из модераторов не увидел. ;-)
хоткей не поможет -следить то нужно не за моей программой
Что касается горячей клавиши, то при установке регистерхоткей, идет перехват нажатия клавиши, и ее сообщение не отправляется активному окну... Может я конечно, что-то не так делал? :)
PS
Вот программка, без использования хуков, но она не позволит нажать пробел ни в какой другой программе. Использована именно горячая клавиша - спэйс.
Программка видна в трее, для выгрузки - правый клик, в открывшемся меню - выход.
Удачи.
Цитата: un_named
Для вставки кода используется кнопочка #
Что касается горячей клавиши, то при установке регистерхоткей, идет перехват нажатия клавиши, и ее сообщение не отправляется активному окну... Может я конечно, что-то не так делал? :)
PS
Вот программка, без использования хуков, но она не позволит нажать пробел ни в какой другой программе. Использована именно горячая клавиша - спэйс.
Программка видна в трее, для выгрузки - правый клик, в открывшемся меню - выход.
Удачи.
Что касается горячей клавиши, то при установке регистерхоткей, идет перехват нажатия клавиши, и ее сообщение не отправляется активному окну... Может я конечно, что-то не так делал? :)
PS
Вот программка, без использования хуков, но она не позволит нажать пробел ни в какой другой программе. Использована именно горячая клавиша - спэйс.
Программка видна в трее, для выгрузки - правый клик, в открывшемся меню - выход.
Удачи.
Если можно то по подробней как все-таки запретить отправку сообщений от данной кнопки системе. Хук для отлова нажатия копок написал, все работает, а вот как запретить нажатие кнопки.
Цитата: koval
Если можно то по подробней как все-таки запретить отправку сообщений от данной кнопки системе. Хук для отлова нажатия копок написал, все работает, а вот как запретить нажатие кнопки.
Запретить нажатие кнопки не получится, а вот если при обработке сообщения WM_CREATE установить на кнопку горячую клавишу - RegisterHotKey и в дальнейшем обрабатывать сообщение WM_HOTKEY не передавая нажатие кнопки/кнопок дальше, то можно изолировать нажатие горячей клавиши от других программ.
Прикрепляю часть исходника предыдущей програмки, там более понятно.
Если хочется установить запрет для одного конкретного окна, то советую ввести проверку, того, в каком окне находится каретка.
Мне интересно как запретить отправку сообщения от кнопки в Виндовс. т.е. я хочу запретить нажание кнопки ВИН. В МСДНе написано, что можно отменять отправку сообщений, но как это сделать там не сказано.
люди, как сделать хук для кнопки f2 и f3 если тут еще живо ответьте!
Угу... Как раз с 2007-го года еще тут, как раз тебя ждали...