为什么只有在我的程序激活的时候才会hook? 别的程序又不需要加载你的DLL,怎么可以被调用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据共享了吗?比如在def中SECTIONS .HOOKDATA READ WRITE SHARED 楼上的不懂 hook吧你的代码结构能不能说清楚点。 代码如下:************hookdll.cpp**********HINSTANCE hInstance;HHOOK hHook;// Shared DATA#pragma data_seg("SHARDATA")static int wordCount = 0; static FILE* fp;static char buff[128][10]; #pragma data_seg()LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam );BOOL WINAPI DllMain( HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ hInstance=hModule; return TRUE; }LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ){ if((nCode>=0) && (wParam!=VK_SPACE)&&(wParam!=VK_RETURN)&&(wParam<=0x100 )){ char *word=(char*)wParam; wsprintf((LPSTR)buff[wordCount],"%c",word); wordCount++; } return(CallNextHookEx(hHook, nCode, wParam, lParam));}int WINAPI starthook(){ hHook=SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc,hInstance,0); if(hHook==NULL) return 0; if((fp=fopen("c:\\keyboard.log","a+"))==NULL) return 0; return 1;}void WINAPI stophook(){ if(hHook==NULL) return; UnhookWindowsHookEx(hHook); hHook=NULL; if(wordCount!=0){ for(int i=0;i<=wordCount;i++) fprintf(fp,buff[i]); } if(fp!=NULL) fclose(fp); wordCount=0;}***************在hookdll.h中导出了starthook和stophookhooktest.cpp中调用starthook和stophook,hooktest.exe调用starthook时,按键盘可以触发调用KeyboardProc,而打开notepad往里面敲字却不行。hookdll.dll不是能够映射到notepad的地址空间上吗? hHook=SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc,hInstance,0); ~~~~~~~~~~~~~~~应该是KeyboardProc 吧 请问:winXP中进程的内存分配情况 结构体里的string成员, 进行ostringstream和istringstream转换后就报错 请教各位大侠 : 驱动截获发送邮件的数据,原端口是变化的,目的端口是80 VC 操作Word对象,如何设置页面格式为横向?各位高手现身吧 反编译好手,请进! 这样发布数据库有问题吗? 求助 关于Dll导入出错的问题…………各路英雄请留步!!!!!!!!!!!!!!(二百分) 参与者有分! 如何实现工具栏的分行 HTML help的一个奇怪问题,急需解答!! 怎么使用随机函数。
比如在def中
SECTIONS
.HOOKDATA READ WRITE SHARED
你的代码结构能不能说清楚点。
************hookdll.cpp**********
HINSTANCE hInstance;
HHOOK hHook;
// Shared DATA
#pragma data_seg("SHARDATA")
static int wordCount = 0;
static FILE* fp;
static char buff[128][10];
#pragma data_seg()LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam );BOOL WINAPI DllMain( HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
){
hInstance=hModule;
return TRUE;
}LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ){ if((nCode>=0) && (wParam!=VK_SPACE)&&(wParam!=VK_RETURN)&&(wParam<=0x100 )){
char *word=(char*)wParam;
wsprintf((LPSTR)buff[wordCount],"%c",word);
wordCount++;
}
return(CallNextHookEx(hHook, nCode, wParam, lParam));}int WINAPI starthook(){ hHook=SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc,hInstance,0);
if(hHook==NULL)
return 0;
if((fp=fopen("c:\\keyboard.log","a+"))==NULL)
return 0;
return 1;
}void WINAPI stophook(){ if(hHook==NULL)
return;
UnhookWindowsHookEx(hHook);
hHook=NULL;
if(wordCount!=0){
for(int i=0;i<=wordCount;i++)
fprintf(fp,buff[i]);
}
if(fp!=NULL)
fclose(fp);
wordCount=0;}
***************
在hookdll.h中导出了starthook和stophook
hooktest.cpp中调用starthook和stophook,
hooktest.exe调用starthook时,按键盘可以触发调用KeyboardProc,
而打开notepad往里面敲字却不行。
hookdll.dll不是能够映射到notepad的地址空间上吗?
~~~~~~~~~~~~~~~应该是KeyboardProc 吧