простой вопрос
От: alexm1202 Россия  
Дата: 06.12.02 08:41
Оценка:
Всем привет.

Возник простой вопрос — как в произвольный момент времени проверить, нажата ли на клавиатуре в данный момент какая-то конкретная клавиша (например Shift). Идея такая — в зависимости от того, прижат ли на клаве shift, по-разному реагировать на клик по кнопке в тулбаре. Вроде как-то это делалось, а вот как — не могу вспомнить. Подскажите пожалуйста кто знает.
... << RSDN@Home 1.0 beta 1>> (np: Underworld — dark & long)
BR, Alex.
Re: простой вопрос
От: disop Украина  
Дата: 06.12.02 09:25
Оценка: 3 (1)
Здравствуйте, alexm1202, Вы писали:

A>Всем привет.


A>Возник простой вопрос — как в произвольный момент времени проверить, нажата ли на клавиатуре в данный момент какая-то конкретная клавиша (например Shift). Идея такая — в зависимости от того, прижат ли на клаве shift, по-разному реагировать на клик по кнопке в тулбаре. Вроде как-то это делалось, а вот как — не могу вспомнить. Подскажите пожалуйста кто знает.


A>



Конечно можно. Для проверки на клавиши Shift/Ctrl/Alt(да и любых других) в произвольный момент времени можно использовать функцию GetAsyncKeyState. Она будет выдавать корректные данные даже если в этот момент ты крутишься в некотором цикле и не обрабатываешь сообщения (как написано в MSDN, "function determines whether a key is up or down at the time the function is called".
Если же ты проверяешь состояние клавиши в цикле обработки сообщения,используй GetKeyState.
Re: простой вопрос
От: Vi2 Удмуртия http://www.adem.ru
Дата: 06.12.02 09:53
Оценка: 3 (1)
Здравствуйте, alexm1202, Вы писали:

A>Возник простой вопрос — как в произвольный момент времени проверить, нажата ли на клавиатуре в данный момент какая-то конкретная клавиша (например Shift). Идея такая — в зависимости от того, прижат ли на клаве shift, по-разному реагировать на клик по кнопке в тулбаре. Вроде как-то это делалось, а вот как — не могу вспомнить. Подскажите пожалуйста кто знает.

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Const vbKeyLShift = &HA0
Const vbKeyRShift = &HA1
Const vbKeyLControl = &HA2
Const vbKeyRControl = &HA3
Const vbKeyLMenu = &HA4
Const vbKeyRMenu = &HA5

Private Sub Timer1_Timer()

  Label1.Caption = "Shift=" & bState(vbKeyShift) & "," & bState(vbKeyLShift) & "," & bState(vbKeyRShift) & _
                   " Ctrl=" & bState(vbKeyControl) & "," & bState(vbKeyLControl) & "," & bState(vbKeyRControl) & _
                   " Alt=" & bState(vbKeyMenu) & "," & bState(vbKeyLMenu) & "," & bState(vbKeyRMenu)
End Sub

Function bState(bs As Integer) As Boolean
  bState = CBool(GetKeyState(bs) And &H80)
End Function
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.