Quiero usar VB para escribir un código fuente de registro de teclas. He estudiado los ganchos del teclado durante mucho tiempo, pero no lo he logrado ~~ ¡20 puntos!
Ventana. código
Opción explícita
Sub privado Form_Load()
En caso de error, reanudar siguiente
SetKeyboardHook Me.hWnd, WM_USER
Si Err.Number lt ;gt; 0 Entonces
MsgBox "¡Primero copie KeybHook.dll a la ruta de Windows!, vbCritical
Fin
Finalizar si
En caso de error Ir a 0
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub
Sub privado Form_Unload(Cancelar como entero)
ReleaseKeyboardHook
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
Subfinal
Módulo estándar
Opción explícita
Const pública GWL_WNDPROC = (-4)
Const pública WM_USER = amp;H400
Declarar función CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declarar Función GetWindowLong Lib "user32 " Alias " GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) Mientras
Declarar Función SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declarar función SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal Msg As Long) As Long
Declarar función SetKeyboardHook Lib
"KeybHook" (ByVal hwndPost As Long, ByVal Msg As Long) ByVal Msg As Long) As Long
Declarar función ReleaseKeyboardHook Lib "KeybHook" () As Long
Pública prevWndProc As Long
Función WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Si Msg = WM_USER Entonces
Form1.List1.AddItem "wParam=" amp; wParam amp; ", lParam=" amp(lParam)
Form1.List1.ListIndex = Form1.List1.NewIndex
End If
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
Fin de función
Código C utilizado para crear dll
#include lt;windows.HTML;
Form1.List1.ListIndex=Form1.List1.NewIndex.
hgt; (".drectve")
carácter estático szLinkDirectiveShared[] = "-sección:
#pragma data_seg()
#pragma data_seg("compartir ")
HHOOK g_ hhook = NULL;
HWND g_hwndPost = NULL;
UINT g_uMsgNotify = WM_USER;
#pragma data_seg( )
estático LRESULT WINAPI KeyboardHook_HookProc (
int nCode,
WPARAM wParam,
LPARAM lParam)
{
LRESULT lResult = CallNextHookEx(g_hhook, nCode, wParam, lParam
if (nCode == HC_ACTION)
{
PostMessage (g_hwndPost, g_uMsgNotify, wParam, lParam
}
return(lResult
}
BOOL WINAPI SetKeyboardHook); (HWND hWndPost, UINT Msg)
{
HHOOK hhook
if (g_hhook != NULL) return (FALSE); > g_hwndPost = hWndPost;
g_uMsgNotify = Msg;
Sleep(0);
hhook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHook_HookProc, g_hinstDll, 0); p>
InterlockedExchange((PLONG)&g_hhook, (LONG) hhook);
return(g_hhook! = NULL);
}
BOOL WINAPI ReleaseKeyboardHook()
{
BOOL fOK = TRUE;
if (g_hhook != NULL)
{
fOK = UnhookWindowsHookEx(g_hhook);
g_hhook = NULL; /p>
return(fOK);
}
BOOL WINAPI DllMain (HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
p>
cambiar (fdwReason)
{
caso DLL_PROCESS_ATTACH:
g_hinstDll = hinstDll
romper; ;
}
return(VERDADERO);
}