Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de Winapi

Código fuente de Winapi

No es fácil usar simplemente vb. Debe usar un enlace global y colocarlo en un archivo dll, pero no es fácil crear un archivo de biblioteca de enlaces dinámicos en VB. Le daré una referencia de código.

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

}

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

}