解决方案 »
- BOOL CHtmlView::GetSource(CString& refString) 调用GetSource为什么错误?
- UDP 需要几个socket?
- VC++中,打点“.”或“->”之后应该提示成员函数的,如果不能提示会很麻烦,应该怎么把它调出来?
- 界面放置控件太多出现的问题
- 如何定义系统版本
- 请教高手!!!怎么象qq一样,一边发消息一边传送文件,我用的是tcp/ip协议
- SDI 程序如何避免文件被多个实例重复打开,就像 Office 那样
- 调用DLL封装的数据库接口问题
- 进程当前目录是指什么
- 如何得到windows系统注册文件的默认图标?
- 透明图片拉伸不变形问题
- 求手写中文字符的样本集
至于返回非1屏蔽鼠标消息, 是因为返回非0值就不会将消息再传递目标窗口过程了(参见MSDN).
地址设为了共享, 代码总在你主程序中吧? 其他程序可以访问主程序的内存空间? 传送的话可以发送WM_COPYDATA或者CreateFileMapping创建一个命名的内存映射.
COPYDATASTRUCT CopyData = {0, DataSize, Data}; // DataSize和Data分别为要传送的数据和长度
SendMessage(主程序窗口句柄, WM_COPYDATA, NULL, &CopyData);
2> CreateFileMapping
HANDLE MapHandle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, 内存大小高32, 低32, TEXT("MemMap"));
LPVOID MapMemory = MapViewOfFile(MapHandle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
Dll中可以将信息写入MapMem
主程序中可以通过
HANDLE MapHandle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, 内存大小高32, 低32, TEXT("MemMap"));
或
HANDLE MapHandle = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, TEXT("MemMap"));
LPVOID MapMemory = MapViewOfFile(MapHandle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
来打开创建的内存映射, 从MapMemory中获取Dll中写入的数据.
你也可以设置个标记什么的来通知Dll写了数据, 主程序可以读了,如信号.
你也可以如上面那位所说, 用WH_MOUSE_LL看看, 印象里貌似低级钩子可以不用安装到DLL中, 直接在主程序中挂钩, 处理函数可以直接放到主程序中
是的,不需要写到dll中。
地址设为了共享, 代码总在你主程序中吧? 其他程序可以访问主程序的内存空间? 传送的话可以发送WM_COPYDATA或者CreateFileMapping创建一个命名的内存映射.
也可以不使用共享内存,从dll向主程序直接发消息也可以,如果你主程序有窗口。
在主程序启动dll前 g_hModule = LoadLibrary("dllhook.dll")
然后StartHool再把g_hModule 传回去。
在dll里面建一个窗口指针把主程序的窗口传进去。
dll hook到鼠标消息后,将鼠标信息合成一个消息串发送到主窗口就可以。