Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как задать произ-е сочетание клавиш?


Автор: t0r 25.11.2003, 10:47
Здравствуйте. Подскажите пожалуйста, как программно описать реакцию на произвольное сочетание клавиш. Проше говоря, к примеру, при одновременном нажатии клавиши "S" и "H" должно поятиться, ну пусть, например: "HELLO WORLD"? В книжных примерах обычно приводятся сочетания с функциональными клавишами: с Ctrl, Shift, Alt.

P.S. Где вобще можно почитать по этой теме (обработка нажатий клавиш, обработка сочетаний клавиш и т.п.)? - вроде бы ничего сложного, но я что-то застопорися sad.gif

Заранее благодарен.

Автор: Гость_Gogic 25.11.2003, 14:36
Попробуй обрабатывать событие второй клавиши только при нажатой первой, то есть попробуй для первой клавиши выполнить событие KeyDown,
а для второй KeyPress.


Автор: Vach 28.11.2003, 16:31
http://www.arcatapet.net/vb.cfm
После установки OCX создай проект
+ подключи OCX к проекту
+ добавь его на форму (Msghook1).

Добавь код.
При нажатии ctrl+alt+t появится приветствие. smile.gif

Код
Const WM_HOTKEY = &H312
Const MOD_ALT = &H1
Const MOD_CONTROL = &H2
Const MOD_SHIFT = &H4
Const MOD_WIN = &H8

Declare Function RegisterHotKey Lib "user32" _
   (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" _
   (ByVal lpString As String) As Integer
Declare Function GlobalDeleteAtom Lib "kernel32" _
   (ByVal nAtom As Integer) As Integer
Declare Function UnregisterHotKey Lib "user32" _
   (ByVal hwnd As Long, ByVal id As Long) As Long

Dim iAtom As Integer

Private Sub Form_Load()
   Dim res As Long
   iAtom = GlobalAddAtom("T")
   res = RegisterHotKey(Me.hwnd, iAtom, MOD_ALT + MOD_CONTROL, vbKeyT)
   Msghook1.HwndHook = Me.hwnd
   Msghook1.Message(WM_HOTKEY) = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Dim res As Long
   res = UnregisterHotKey(Me.hwnd, iAtom)
   res = GlobalDeleteAtom(iAtom)
End Sub

Private Sub Msghook1_Message(ByVal msg As Long, ByVal wp As Long, ByVal lp As Long, result As Long)
   If msg = WM_HOTKEY Then
       If wp = iAtom Then
           MsgBox "HELLO WORLD!!!"
       End If
   End If
   Msghook1.InvokeWindowProc msg, wp, lp
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)