我有一个用hook截获鼠标移动的dll,但是没有效果,请问怎么调试?

vcbacker 2001-07-13 05:35:43
很简单的一个例子,
但是就不反映。
...全文
290 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdice 2001-07-19
  • 打赏
  • 举报
回复
你参考一下:

static LRESULT WINAPI Hook_HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{

HANDLE file=NULL;
MSG* msg;
if(hour==0)
{

systime=(LPSYSTEMTIME)malloc(sizeof(_SYSTEMTIME));
hour=1;
}


#ifdef KEYMESSAGE
if(wParam>0x29 && wParam<0x5b && lParam&0x40000000)
{
a[s++]=wParam;

GetLocalTime(systime);
if(hour!=systime->wHour)
{

GetWindowsDirectory(path,MAX_PATH);
sprintf(name,"\\%02u%02u%02u%02u.sdf",systime->wYear,systime->wMonth,systime->wDay,systime->wHour);
strcat(path,name);
have=0;
}

/**************************/
//写入文件
/**************************/

file=CreateFile(path,GENERIC_WRITE,0,(LPSECURITY_ATTRIBUTES)NULL,CREATE_ALWAYS,0,(HANDLE)NULL);
WriteFile(file,(LPCVOID)a,s,&size,NULL);
CloseHandle(file);

}
#endif

return (CallNextHookEx(g_hhook,nCode,wParam,lParam));
}
plato 2001-07-19
  • 打赏
  • 举报
回复
hhk肯定要多进程共享一个的。
plato 2001-07-19
  • 打赏
  • 举报
回复
CallNextHook( hhk , ...)
^^^
这个不能为NULL吧?
vcbacker 2001-07-19
  • 打赏
  • 举报
回复
感谢两位,我这两天正在查找一些资料,
以后还要请教。
vcbacker 2001-07-18
  • 打赏
  • 举报
回复
to plato(天天)
我想我这些数据并不需要在不同进程之间共享吧?
vcbacker 2001-07-18
  • 打赏
  • 举报
回复
还是不行,唉。。。。。。

谁能给我发一个简单的例子阿:
dll 就截获WM_MOUSEMOVE 消息就行了
exe 处理OnMouseMove,弹出一个messagebox就行

我的信箱 vcbacker@163.net
sdice 2001-07-18
  • 打赏
  • 举报
回复
你的DLL已经钩进其他进程的空间,VC不能调试其他的进程空间,所以断点不会有反应的
vcbacker 2001-07-17
  • 打赏
  • 举报
回复
那怎么样用exe来调试dll呢?
我这个dll有问题么?
admireO 2001-07-17
  • 打赏
  • 举报
回复
调试你的dll的时候,当你按F5的时候,他会提示你添加与该dll相关联的exe.或者你可以到setting里去设置与调用该dll的exe
vcbacker 2001-07-17
  • 打赏
  • 举报
回复
能不能跟踪?
panda_w 2001-07-17
  • 打赏
  • 举报
回复
调试Dll可以做个相应的exe文件
vcbacker 2001-07-17
  • 打赏
  • 举报
回复
现在100分了,请说吧。
我没有预料到问题的复杂性,抱歉。;)
plato 2001-07-17
  • 打赏
  • 举报
回复
vcbacker: 我想你没有注意到很重要的这一点:

BOOL HookInstalled = 0 ; // State Table of my hooks
HHOOK hhookMsg =NULL, hhookWnd =NULL;

这些变量每个进程各有一个,而不是共享的。
要共享:

首先
#pragma data_seg( "MY_DATA" )
BOOL HookInstalled = 0 ; // State Table of my hooks
HHOOK hhookMsg =NULL, hhookWnd =NULL;
#pragma data_seg()

然后
在.def中
SECTIONS
MY_DATA READ WRITE SHARED
OEF 2001-07-17
  • 打赏
  • 举报
回复
我也不清楚,不过好象在MSDN下查不到这种数据结构。
vcbacker 2001-07-17
  • 打赏
  • 举报
回复
我在vckbase下载的。
PMSG pmsg;
pmsg = (PMSG)lParam;
这个有问题么?
OEF 2001-07-17
  • 打赏
  • 举报
回复
你的PMSG pmsg的定义是不是有问题?
vcbacker 2001-07-17
  • 打赏
  • 举报
回复
up
bodies 2001-07-16
  • 打赏
  • 举报
回复
才10分,我都不想说了
vcbacker 2001-07-16
  • 打赏
  • 举报
回复
我感觉这个代码没有什么问题阿?
很简单的例子
但是就是没反映。

请问dll怎么调试阿?
vcbacker 2001-07-16
  • 打赏
  • 举报
回复
#include <windows.h>
#include <string.h>
#include <stdio.h>

#include "getmsg.h"

HINSTANCE hInstance;

BOOL WINAPI DllMain(HANDLE hModule, DWORD, LPVOID);
LRESULT CALLBACK MyGetMsgProc(INT hc, WPARAM wParam, LPARAM lParam);

BOOL HookInstalled = 0 ; // State Table of my hooks

HHOOK hhookMsg =NULL, hhookWnd =NULL;

__declspec( dllexport ) HWND g_hWnd =NULL;
__declspec( dllexport ) UINT g_msg =0;

//---------------------------------------------------------------------------
// DllMain
//---------------------------------------------------------------------------
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
FILE *fp =NULL;
hInstance = hModule;

switch(dwReason)
{
case DLL_PROCESS_ATTACH:
if((fp =fopen("c:\\share.txt", "r")) !=NULL)
{
fscanf(fp, "%d %d", &g_hWnd, &g_msg);
fclose(fp);
}
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}

return TRUE;
}

//---------------------------------------------------------------------------
int __stdcall InstGetMsg(BOOL fInstall, UINT msg, HWND hWnd)
{
FILE *fp;

if ( fInstall )
{
g_hWnd =hWnd;
g_msg =msg;
if((fp =fopen("f:\\share.txt", "w")) !=NULL)
{
fprintf(fp, "%d %d", g_hWnd, g_msg);
fclose(fp);
}
if(HookInstalled) return FALSE;
hhookMsg = SetWindowsHookEx(WH_MOUSE, MyGetMsgProc,
hInstance, 0);
HookInstalled = TRUE;
}
else
{
if(!HookInstalled) return FALSE;
UnhookWindowsHookEx(hhookMsg);
HookInstalled = FALSE;
}
return TRUE;
}

LRESULT CALLBACK MyGetMsgProc(INT hc, WPARAM wParam, LPARAM lParam)
{
PMSG pmsg;

pmsg = (PMSG)lParam;
if (hc >= 0 && pmsg && pmsg->hwnd)
{
if(pmsg->message == g_msg)
{
if(g_hWnd)
{
PostMessage(g_hWnd, pmsg->message, pmsg->wParam, pmsg->lParam);
//return 0;
}
}
}

return CallNextHookEx(NULL, hc, wParam, lParam);
}
加载更多回复(3)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧