Código fuente de Winapi
Código de formulario
Opción explícita
Subform_Load() privado
Continuar con el siguiente paso en caso de error
SetKeyboardHook Me.hWnd, WM_USER
Si hay error. Número & lt& gtThen 0
MsgBox "¡Primero copie KeybHook.dll a la ruta de Windows!", VB crítico
Fin
Si... entonces Will end
Vaya a 0 en caso de error
prevWndProc = GetWindowLong(me. hwnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, dirección WNDPROC
Conector final
Subformulario privado_Unload(Descargar como entero)
Liberar gancho de teclado
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
Conector final
Módulo estándar
Opción explícita
Constante pública GWL_WNDPROC = (-4)
Const pública WM _ USER = & ampH400
Alias la función CallWindowProc Lib "usuario 32" a "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) es declarado como Long
Declarar la función GetWindowLong Lib "usuario 32" alias "GetWindowLongA" (ByVal hWnd es Long, ByVal nIndex es Long) como Long
Declarar la función SetWindowLong Lib" usuario 32" alias "SetWindowLongA" (ByVal hWnd es Long, ByVal nIndex es Long, ByVal dwNewLong es Long) declarado como Long
Establece la función de conjunto de gancho de teclado Lib "KeybHook" (ByVal hwnd post es Long, ByVal Msg is Long) se declara como Long
Declarar la función de liberación del gancho del teclado Lib "KeybHook" () como Long
Pública prevWndProc As Long
La función WndProc (ByVal hWnd es Long, ByVal Msg es Long, ByVal wParam es Long, ByVal lParam es Long) es Long
Si Msg = WM_USER, entonces
Formulario 1. Lista1. AddItem " wParam = " & ampwParam & amp", lParam = " & amp hex(lParam)
Formulario 1. Lista1. Índice de lista = Formulario1. Lista1.
Nuevo índice
Terminará si...
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
Finalizar función
Código C usado para hacer dll
# include & ltwindows.h & gt
# include & ltwindowsx.h & gt
# include & lttchar. h & gt
HINSTANCE g _ hinstDll = NULL
#pragma data_seg(".
drectve")
carácter estático szLinkDirectiveShared[]= "-section:Shared, rws ";
#pragma data_seg()
#pragma data_seg("Compartido ")
HHOOK g _ hhook = NULL
HWND g _ hwndPost = NULL
UINT g _ uMsgNotify = WM _ USER
#pragma data_seg()
Estático LRESULT teclado WINAPI gancho _ gancho proc(
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(lResultado
}
); p>
BOOL WINAPI establece el gancho del teclado (publicación HWND HWND, mensaje UINT)
{
HHOOK hhook
Si (g _ hhook! = NULL ) devuelve (FALSO);
g _ hwndPost = hWndPost
g _ uMsgNotify = Msg
Dormir (0);
hhook = SetWindowsHookEx(WH_Keyboard, KeyboardHook_HookProc, g_hinstDll, 0);
InterlockedExchange(PLONG)&g_hhook, (long)hhook);
return(g_hhook!= NULL); p>
}
BOOL WINAPI ReleaseKeyboardHook()
{
BOOL fOK = TRUE
Si (g_hhook! =null)
{
fOK = UnhookWindowsHookEx(g _ hhook);
g _ hhook = NULL
}
Return(fOK);
}
BOOL WINAPI DllMain(h instancia hinst dll, DWORD fdwReason, LPVOID lpvReserved)
{
Cambiar (fdwReason)
{
Caso DLL_PROCESS_ATTACH:
g _ hinstDll = hinstDll
Romper;
}
Devolver (verdadero);
}