|
|
|
|
|
Dicas
|
|
Visual Basic (Miscelâneas)
|
|
|
Título da Dica: Registrando uma HotKey no Visual Basic
|
|
|
|
Postada em 3/9/2003 por Ð@®l@n
O Windows nos permite registrar uma tecla de atalho no sistema. Com uma tecla de atalho registrada, em qualquer aplicação em que o usuário pressionar a tecla de atalho nossa aplicação será chamada. Isso só funciona, porém, se a aplicação já estiver sendo executada.
Para processar o recebimento da HotKey precisaremos novamente utilizar o recurso de subclassing para interceptar a mensagem enviada pelo windows a respeito da HotKey.
Veja o código do form :
Option Explicit Public OldWndProc As Long
Private Sub Form_Load() Dim Ret As Long 'Registra hotkey com ID 1 'Essa hotkey sera aciona com ALT + F2 'Se Ret <> 0 entao beleza, se = 0 já 'existe uma hotkey dessa definida Ret = RegisterHotKey(Me.hwnd, 1, MOD_ALT, _ VK_F2)
'Inicia subclassing
OldWndProc = SetWindowLong(Me.hwnd, _ GWL_WNDPROC, AddressOf _ WindowProc) End Sub
Private Sub Form_Unload(Cancel As Integer) Cancel = False Call SetWindowLong(Me.hwnd, GWL_WNDPROC, _ OldWndProc) End Sub
' ' Metodo chamado pela Hotkey ' Public Sub BahMetodo() MsgBox "Opa !" End Sub
Este código registra a hotkey e ativa o subclassing (load) e desfaz o subclassing (unload). O BahMetodo é o método chamado pela hotkey.
No módulo entram as declarações de API e a função que será chamada para processar as mensagens do form. Veja :
Option Explicit Private Const WM_HOTKEY = &H312
Public Declare Function RegisterHotKey Lib _ "user32" (ByVal hwnd As Long, ByVal _ id As Long, ByVal fsModifiers As _ Long, ByVal vk As Long) As Long ' ' Modificadores ' Public Const MOD_ALT = &H1 Public Const MOD_CONTROL = &H2 Public Const MOD_SHIFT = &H4
' Tecla que será nossa hotkey Public Const VK_F2 = &H71
#If UNICODE Then Public Declare Function SetWindowLong Lib _ "user32" Alias "SetWindowLongW" _ (ByVal hwnd As Long, ByVal nIndex _ As Long, ByVal dwNewLong As Any) _ As Long #Else Public Declare Function SetWindowLong Lib _ "user32" Alias "SetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex _ As Long, ByVal dwNewLong As Any) _ As Long #End If Private Declare Function CallWindowProc Lib _ "user32" Alias "CallWindowProcA" _ (ByVal wndrpcPrev As Long, ByVal _ hwnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, lParam As _ Any) As Long Public Const GWL_USERDATA = (-21) Public Const GWL_WNDPROC = -4
Public Function WindowProc(ByVal hwnd As _ Long, ByVal uMsg As Long, ByVal _ wParam As Long, ByVal lParam As _ Long) As Long On Error Resume Next If uMsg = WM_HOTKEY And wParam = 1 Then 'wParam informa o ID da hotkey Form1.BahMetodo WindowProc = 1 Exit Function End If If Form1.OldWndProc <> 0 Then WindowProc = CallWindowProc(Form1.OldWndProc, _ hwnd, uMsg, wParam, ByVal lParam) End If End Function
Quando é identificada a mensagem de hotkey pela função que processa as mensagens do form o bahmetodo é chamado.
|
|
|
|
|