Windows全域鉤子dll(鍵盤)

來源:互聯網
上載者:User

// dllHookkb.cpp : Defines the entry point for the DLL application.<br />//<br />#include "stdafx.h"<br />#include "dllHookkb.h"</p><p>#ifdef _MANAGED<br />#pragma managed(push, off)<br />#endif<br />#pragma data_seg("YCIShared2010")<br />HWND g_hWndCaller = NULL;<br />HHOOK g_hHook = NULL;<br />#pragma data_seg()<br />BOOL APIENTRY DllMain( HMODULE hModule,<br /> DWORD ul_reason_for_call,<br /> LPVOID lpReserved<br /> )<br />{<br />switch (ul_reason_for_call)<br />{<br />case DLL_PROCESS_ATTACH:<br />case DLL_THREAD_ATTACH:<br />case DLL_THREAD_DETACH:<br />case DLL_PROCESS_DETACH:<br />break;<br />}<br /> return TRUE;<br />}<br />#ifdef _MANAGED<br />#pragma managed(pop)<br />#endif<br />// This is an example of an exported variable<br />DLLHOOKKB_API int ndllHookkb=0;<br />// This is an example of an exported function.<br />DLLHOOKKB_API int fndllHookkb(void)<br />{<br />return 42;<br />}<br />// This is the constructor of a class that has been exported.<br />// see dllHookkb.h for the class definition<br />CdllHookkb::CdllHookkb()<br />{<br />return;<br />}<br />//通過記憶體位址取得模組控制代碼的函數<br />HMODULE WINAPI ModuleFromAddress(PVOID pv)<br />{<br />MEMORY_BASIC_INFORMATION mbi;<br />if (::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)<br />{<br />return (HMODULE)mbi.AllocationBase;<br />}<br />else<br />{<br />return NULL;<br />}<br />}<br />//鍵盤鉤子函數<br />LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)<br />{<br />if (nCode < 0 || nCode == HC_NOREMOVE)<br />{<br />return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);<br />}<br />if (lParam & 0x40000000)//重複的訊息交給下一個hook鏈<br />{<br />return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);<br />}<br />//通知主視窗,wParam參數為虛擬鍵碼,lParam參數包含了此鍵的資訊<br />::PostMessage(g_hWndCaller, HM_KEY, wParam, lParam);</p><p>return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);<br />}<br />//安裝,卸載鉤子的函數<br />DLLHOOKKB_API BOOL WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)<br />{<br />BOOL bOk;</p><p>g_hWndCaller = hWndCaller;<br />if (bInstall)<br />{<br />g_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyHookProc, ModuleFromAddress(KeyHookProc), dwThreadId);<br />bOk = (g_hHook != NULL);<br />}<br />else<br />{<br />bOk = ::UnhookWindowsHookEx(g_hHook);<br />g_hHook = NULL;<br />}<br />return bOk;<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.