USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  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.
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página