我的MouseHook.cpp简单介绍如下:
#pragma data_seg("TestData")
HWND glhPrevTarWnd=NULL;
HWND glhHook=NULL;
HINSTANCE glhInstance=NULL;
#pragma data_seg()void StartHook(HWND hViewHwnd, HMODULE hMod)
{
m_hViewHandle = hViewHwnd; glhHook=(HWND)SetWindowsHookEx(WH_MOUSE,MouseProc,hMod,0);
} LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
/*
LPMOUSEHOOKSTRUCT pMouseHook=(LPMOUSEHOOKSTRUCT) lParam;
if(nCode>=0)
{
*/
HWND glhTargetWnd=pMouseHook->hwnd;
//取目标窗口句柄
HWND ParentWnd=glhTargetWnd;
while(ParentWnd !=NULL)
{
glhTargetWnd=ParentWnd;
//取应用程序主窗口句柄
ParentWnd=GetParent(glhTargetWnd);
}
if(glhTargetWnd!=glhPrevTarWnd)
{
char szCaption[100];
//取目标窗口标题
GetWindowText(glhTargetWnd,szCaption,100);
SendMessage(m_hViewHandle, WM_CAPTION_CHANGED, 0, (LPARAM)szCaption);
}
} //继续传递消息
return CallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam);
} 为什么我的程序只在本程序窗口有效,而不是全局的?而当我把WH_MOUSE换成WH_MOUSE_LL时,将MouseProc中相应部分换成
/*
LPMSLLHOOKSTRUCT pMouseHook = (LPMSLLHOOKSTRUCT )lParam;
if (nCode >= 0) {
HWND glhTargetWnd = WindowFromPoint(pMouseHook->pt);
/*
时,其他都一样。程序却可以正常进行。为什么?好奇怪啊。哪位大侠指点一下?
#pragma data_seg("TestData")
HWND glhPrevTarWnd=NULL;
HWND glhHook=NULL;
HINSTANCE glhInstance=NULL;
#pragma data_seg()void StartHook(HWND hViewHwnd, HMODULE hMod)
{
m_hViewHandle = hViewHwnd; glhHook=(HWND)SetWindowsHookEx(WH_MOUSE,MouseProc,hMod,0);
} LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
/*
LPMOUSEHOOKSTRUCT pMouseHook=(LPMOUSEHOOKSTRUCT) lParam;
if(nCode>=0)
{
*/
HWND glhTargetWnd=pMouseHook->hwnd;
//取目标窗口句柄
HWND ParentWnd=glhTargetWnd;
while(ParentWnd !=NULL)
{
glhTargetWnd=ParentWnd;
//取应用程序主窗口句柄
ParentWnd=GetParent(glhTargetWnd);
}
if(glhTargetWnd!=glhPrevTarWnd)
{
char szCaption[100];
//取目标窗口标题
GetWindowText(glhTargetWnd,szCaption,100);
SendMessage(m_hViewHandle, WM_CAPTION_CHANGED, 0, (LPARAM)szCaption);
}
} //继续传递消息
return CallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam);
} 为什么我的程序只在本程序窗口有效,而不是全局的?而当我把WH_MOUSE换成WH_MOUSE_LL时,将MouseProc中相应部分换成
/*
LPMSLLHOOKSTRUCT pMouseHook = (LPMSLLHOOKSTRUCT )lParam;
if (nCode >= 0) {
HWND glhTargetWnd = WindowFromPoint(pMouseHook->pt);
/*
时,其他都一样。程序却可以正常进行。为什么?好奇怪啊。哪位大侠指点一下?
解决方案 »
- SNIFFER 工具
- AfxMessageBox这个函数难道不是包含在windows.h中的吗?
- ASCII空格space和空null区别
- 请教关于multimedia timers的用法
- 控件在IE中,控件COM里的线程(回调函数)里怎么不能触发事件,焦急
- 晕了用Wise Installation System 8.1做安装包的问题
- 有用boost开发服务器的么?
- 对不起大家,没分了,但有问题,能帮帮忙吗?谢谢!急死我了!!!!
- 一个关于自制浏览器的问题!
- 关于绘图
- CRAZY!疯了!!error C2059: syntax error : 'PCH creation point'
- 请较如何将CproperSheet粘在FormView或者Dialog身上显示!
#pragma data_seg(".SHARE")
HWND glhPrevTarWnd=NULL;
HWND glhHook=NULL;
HINSTANCE glhInstance=NULL;
#pragma comment(linker, "/section:.SHARE,rsw")
和
WH_MOUSE_LL有什么区别?
TO:eastnofail(Char *)我在def中申明如下了
SECTIONS
TestData READ WRITE SHARED 我刚才尝试了你的做法,也还是一样的结果。不知道为什么。
http://expert.csdn.net/Expert/topic/1612/1612666.xml?temp=.5226099
可以解释清楚点吗?
如果这样的话,为什么我换成WH_MOUSE_LL就不影响了吗?
虽然没有看懂那篇文章,还是谢谢eastnofail(Char *)
可以hook到全局mouse。
从你给出的代码来看,这篇帖子里的和你的代码的区别是hMod不是
传进来的,而是在DllMain里通过 hMod = hInstance 得到的。