表單代碼
選項顯式
私有子窗體_Load()
出錯時繼續下壹步
SetKeyboardHook Me.hWnd,WM_USER
如果錯誤。號碼& lt& gt那麽0
MsgBox "請先將KeybHook.dll復制到Windows的路徑下!",VB臨界
結束
如果…就會結束
出錯時轉到0
prevWndProc = GetWindowLong(me . hwnd,GWL_WNDPROC)
SetWindowLong Me.hWnd,GWL_WNDPROC,WNDPROC地址
末端接頭
私有子窗體_Unload(取消為整數)
釋放鍵盤掛鉤
SetWindowLong Me.hWnd,GWL_WNDPROC,prevWndProc
末端接頭
標準模塊
選項顯式
公共常數GWL_WNDPROC = (-4)
公共Const WM _ USER = & ampH400
將函數CallWindowProc Lib“user 32”別名“CallWindowProcA”(ByVal lpPrevWndFunc As Long、ByVal hWnd As Long、ByVal Msg As Long、ByVal wParam As Long、ByVal lParam As Long)聲明為Long
將函數GetWindowLong Lib“user 32”別名“GetWindowLongA”(ByVal hWnd為Long,ByVal nIndex為Long)聲明為Long
將函數SetWindowLong Lib“user 32”別名“SetWindowLongA”(ByVal hWnd為Long,ByVal nIndex為Long,ByVal dwNewLong為Long)聲明為Long
將函數set keyboard hook Lib“KeybHook”(ByVal hwnd post為Long,ByVal Msg為Long)聲明為Long
將函數release keyboard hook Lib“KeybHook”()聲明為Long
Public prevWndProc As Long
函數WndProc(ByVal hWnd為Long,ByVal Msg為Long,ByVal wParam為Long,ByVal lParam為Long)為Long
如果Msg = WM_USER,則
表單1。List1。AddItem " wParam = " & ampwParam & amp",lParam = " & amp十六進制(lParam)
表單1。List1。ListIndex = Form1。List1。新指數
如果…就會結束
WndProc = CallWindowProc(prevWndProc,hWnd,Msg,wParam,lParam)
結束功能
用來制作dll的c代碼
# include & ltwindows.h & gt
# include & ltwindowsx.h & gt
# include & lttchar.h & gt
HINSTANCE g _ hinstDll = NULL
#pragma data_seg("。drectve”)
static char szLinkDirectiveShared[]= "-section:Shared,rws ";
#pragma data_seg()
#pragma data_seg("Shared ")
HHOOK g _ hhook = NULL
HWND g _ hwndPost = NULL
UINT g _ uMsgNotify = WM _ USER
#pragma data_seg()
靜態LRESULT WINAPI keyboard hook _ hook 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(lResult);
}
BOOL WINAPI set keyboard hook(HWND HWND post,UINT Msg)
{
HHOOK hhook
如果(g _ hhook!= NULL)返回(FALSE);
g _ hwndPost = hWndPost
g _ uMsgNotify = Msg
睡眠(0);
hhook = SetWindowsHookEx(WH _鍵盤,KeyboardHook_HookProc,g_hinstDll,0);
InterlockedExchange(PLONG)& amp;g_hhook,(長)hhook);
return(g_hhook!= NULL);
}
BOOL WINAPI ReleaseKeyboardHook()
{
BOOL fOK = TRUE
如果(g _ hhook!=空)
{
fOK = UnhookWindowsHookEx(g _ hhook);
g _ hhook = NULL
}
退貨(fOK);
}
BOOL WINAPI DllMain(h instance hinst dll,DWORD fdwReason,LPVOID lpvReserved)
{
開關(fdwReason)
{
案例DLL_PROCESS_ATTACH:
g _ hinstDll = hinstDll
打破;
}
返回(真);
}