我的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);
/*
时,其他都一样。程序却可以正常进行。为什么?好奇怪啊。哪位大侠指点一下?

解决方案 »

  1.   

    你使用共享内存不对,这样:
    #pragma data_seg(".SHARE")
    HWND glhPrevTarWnd=NULL; 
    HWND glhHook=NULL; 
    HINSTANCE glhInstance=NULL; 
    #pragma comment(linker, "/section:.SHARE,rsw")
      

  2.   

    WH_MOUSE

    WH_MOUSE_LL有什么区别?
      

  3.   

    WH_MOUSE_LL只能运行在Windows NT/2000/XP,他可以捕获到由Mouse_event产生的消息,并且只能做成全局钩子
      

  4.   


    TO:eastnofail(Char *)我在def中申明如下了 
    SECTIONS 
    TestData READ WRITE SHARED 我刚才尝试了你的做法,也还是一样的结果。不知道为什么。
      

  5.   

    关于共享内存,你可以参考这个帖子:
    http://expert.csdn.net/Expert/topic/1612/1612666.xml?temp=.5226099
      

  6.   

    把 glhHook=(HWND)SetWindowsHookEx(WH_MOUSE,MouseProc,hMod,0);中的hMod改为dll的HINSTANCE看看?
      

  7.   

    To :kernalandkernal(kernalandkernal)
    可以解释清楚点吗?
    如果这样的话,为什么我换成WH_MOUSE_LL就不影响了吗? 
    虽然没有看懂那篇文章,还是谢谢eastnofail(Char *)
      

  8.   

    http://pfans.html.533.net/program/win32/win32002.html请参考这篇帖子,和你的程序功能一样,我刚编译了上面的代码,
    可以hook到全局mouse。
    从你给出的代码来看,这篇帖子里的和你的代码的区别是hMod不是
    传进来的,而是在DllMain里通过 hMod = hInstance 得到的。