关于鼠标钩子的问题,如何将捕捉到的鼠标消息的当前鼠标的位置用dll传给客户程序 在动态库的一函数中定义一参数HWND,在调用动库时传递客户程序窗口句柄,在鼠标消息回调函数中使用 SendMessage(hwnd,WM_MYMOUSEMSG,当前鼠标的位置数据...) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较理想的做法是sendmessage + COPYDATA. 在DLL头文件中定义一个函数例如:__declspecl (dllexport) GetHwnd(HWND hWnd)此函数的作用是当客户程序调用动态连接库时可以向DLL中传送客户程序的窗口句柄。可以才客户程序中如下做:..............//为调用动态连接库的代码GetHwnd(this->m_hWnd);在动态连接库的CPP文件中定义全局变量例如:HWND m_hWnd;在函数GetHwnd(HWND hWnd)中为m_hWnd附值GetHwnd(HWND hWnd){ m_hWnd = hWnd;}在键盘钩子的函数中如下:.....MouseProc(int nCode,WPARAM wParam,LPARAM lParam){ ............... if(m_hWnd) { msg.message = WM_LBUTTONDOWN; ::SendMessage(m_hWnd,msg.message,0,0); }}在客户程序中加入...PreTranslateMessage(MSG* pMsg){ if(pMsg->message == WM_LBUTTONDOWN) { point.x = pMsg->pt.x; point.y = pMsg->pt.y;//point为头文件中定义的POINT结构变量 }} 我没测试,你可以试一下,如果不对可以稍微改动一下,这种方法是正确的。 to Leoparder(狩猎者):向dll传送exe的窗口句柄没有成功,主要是GetHwnd(this->m_hWnd);这句话没有通过,系统提示GetHwnd没有初始化(在客户程序中).我视图通过如下方式实现:typedef BOOL (*LpGetHwnd)(HWND hWnd);LpGetHwnd SendHwnd; if(hinstDLL=LoadLibrary((LPCTSTR)"mydll.dll")) { SendHwnd=(LpGetHwnd)GetProcAddress(hinstDLL,"GetHwnd"); SendHwnd(this->m_hWnd); }系统出现非法操作.这应该如何解决???还有哪位大侠知道???绝对有分!!!!!!! Accessible Explorer 哪儿可以下载的到啊? 图象列表与列表视图分别什么意思? 如何快速获得完整的“far-html”软件? VC6安装SP6的问题 如何在MFC工程中使用DirectX? 一个关于WebBrowse控件,非常奇怪的问题! 菜鸟的问题 HDIB 有关控件背景透明问题??? 救救我!!使用AnimateWindow函数可就是编译不过去(winuser.h及windows.h都包含过了)? 我在WINDOWS xp中OICQ怎么登录不上去? csdn调查:请问从事软件开发的网友,你们开发erp软件主要用什么开发工具 错在哪里?
此函数的作用是当客户程序调用动态连接库时可以向DLL中传送客户程序的窗口句柄。
可以才客户程序中如下做:
..............//为调用动态连接库的代码
GetHwnd(this->m_hWnd);
在动态连接库的CPP文件中定义全局变量例如:HWND m_hWnd;
在函数GetHwnd(HWND hWnd)中为m_hWnd附值
GetHwnd(HWND hWnd)
{
m_hWnd = hWnd;
}在键盘钩子的函数中如下:
.....MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
...............
if(m_hWnd)
{
msg.message = WM_LBUTTONDOWN;
::SendMessage(m_hWnd,msg.message,0,0);
}
}在客户程序中加入
...PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_LBUTTONDOWN)
{
point.x = pMsg->pt.x;
point.y = pMsg->pt.y;//point为头文件中定义的POINT结构变量
}
}
我没测试,你可以试一下,如果不对可以稍微改动一下,这种方法是正确的。
向dll传送exe的窗口句柄没有成功,主要是GetHwnd(this->m_hWnd);这句话没有通过,系统提示GetHwnd没有初始化(在客户程序中).
我视图通过如下方式实现:
typedef BOOL (*LpGetHwnd)(HWND hWnd);
LpGetHwnd SendHwnd;
if(hinstDLL=LoadLibrary((LPCTSTR)"mydll.dll"))
{
SendHwnd=(LpGetHwnd)GetProcAddress(hinstDLL,"GetHwnd");
SendHwnd(this->m_hWnd);
}
系统出现非法操作.这应该如何解决???
还有哪位大侠知道???绝对有分!!!!!!!