Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Детектор нажатия клавиш Добавлено: 24.10.09 00:58  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
Подскажите способ задетектить нажатие любой клавиши на клавиатуре. GetKeyboardState как-то уныло работает и только если моя программа в фокусе. Проблема в том что, когда я мигаю диодами на клаве с помощью DeviceIoControl, сама клава глючит (возможно только у меня одного, но мне не легче) - то не печатает букву, то печатает две подряд. Хочу прекращать мигания, если какая-то клавиша нажата. Так-то.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #1
Добавлено: 24.10.09 01:26
хук WH_KEYBOARD_LL ставится где хошь

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 24.10.09 13:46
жаль, если без хука никуда, но я попробую

Ответить

Номер ответа: 3
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #3
Добавлено: 24.10.09 13:54
А чем тебя не устраивает хук?

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 24.10.09 19:01
устраивает. Просто не люблю хуки) хотя без них сложно обойтись
Это применимо для хука клавиатуры? http://www.vbnet.ru/forum/show.aspx?id=63710

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 25.10.09 23:28
есть что-то менее крутое, чем WH_KEYBOARD_LL? может WH_KEYBOARD? Я хочу просто мониторить нажатия, без вмешательства. Думаю такой лоу-левел хук может вредительски сказываться на производительности (пусть это и не заметно на современных машинах)

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 25.10.09 23:45
ну или может WH_JOURNALRECORD? WH_KEYBOARD не подойдет, потому что он не глобален.

Ответить

Номер ответа: 7
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #7
Добавлено: 26.10.09 00:14
Да с чего ты взял про вредительство если система (как я понимаю) сама на нем работает, ты просто поставишь свой хук перед всеми остальными вот и все. Причем если ты не успеешь обработать вызов, то система сама пошлет тебя куда подальше и передаст управление следующему хуку

WH_KEYBOARD может быть глобальным, последний параметр в 0, но вызывающий модуль отражается в адресное пространство всех процессов, поэтому это должен быть Native DLL ( по крайней мере с ним проблем мало). Но собственно мне кажется этот хук и должен больше ресурсов трогать, так как хук ставится в очередь сообщений каждого процесса (хотя не уверен).
Ну а WH_JOURNALRECORD тебе точно не нужен, тебе ведь только первое нажатие отследить нужно.

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 26.10.09 00:28
ну ок. Значит WH_KEYBOARD_LL. И не буду парить себе мозг.. хотя всё ради этого в сущности)

UPD: погодите-ка секундочку. А как я определю нажата ли любая клавиша? Это что ж надо запоминать все нажатия и отжатия, и по ним вычислять?

Ответить

Номер ответа: 9
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #9
Добавлено: 26.10.09 02:34
Не пойму в чем у тебя проблема
Код в модуле, timer1 на форме - это твои мигающие лампочки
  1.  
  2. Public wHook As Long
  3. Public Function kproc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  4.   EndPlay
  5.   kproc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
  6. End Function
  7. Public Sub EndPlay()
  8.         UnhookWindowsHookEx wHook
  9.         form1.timer1.Enabled = False ' Ну тут музыка перестает скакать
  10. End Sub
  11. Public Sub StartPlay()
  12.     form1.timer1.Enabled = True ' Ну тут музыка начинает цветить
  13.     wHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf kproc, App.hInstance, 0)
  14. End Sub
  15.  

Ответить

Номер ответа: 10
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 26.10.09 20:34
нажали кнопку1, затем нажали кнопку2. kproc вызвался 2 раза. Отжали кнопку1. снова вызвался kproc. Отжали кнопку2. еще раз kproc. Теперь можно мигать.
То есть мне надо помнить число нажатых кнопок и вычитать из него отжатые. Когда это всё равно 0, тогда можно мигать.
Проблем нет.

Ответить

Номер ответа: 11
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #11
Добавлено: 29.10.09 10:49
Я писал пример хука клавы. Ищи в примерах, там есть точно. С исходниками на ВБ и асме

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 29.10.09 14:39
Executioner, ну а что там писать-то. Хук, Анхук и коллбэк-функция. я уже нашел пример и сделал.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам