Código fuente Id97
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 gt y luego 0
MsgBox "¡Primero copie KeybHook.dll a la ruta de Windows!", VB crítico
Fin
Si... así será Fin
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
p>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) Declarar 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) se declara como Long
Establezca la función de conjunto de gancho de teclado Lib "KeybHook" (ByVal hwnd post es Long, ByVal Msg es Long) se declara como Long
Declarar la función de liberación del gancho del teclado Lib "KeybHook" () como Long
Public 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
Forma 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 crear 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: Compartido, 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);
}
BOOL WINAPI ReleaseKeyboardHook()
{
BOOL fOK = TRUE
if ( 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);
}