Red de conocimiento informático - Espacio del host - 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!

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!

Solo VB es difícil de implementar. Debe usar enlaces globales y colocarlos en archivos dll. Además, no es fácil crear archivos de biblioteca de enlaces dinámicos en VB. Le daré una referencia de código.

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);

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);

}