问题如下:
比如我有个软件叫test,它运行在windows上面,现在我想在test软件里监视鼠标是否点击了windows系统自带的按钮(比如说“显示桌面”按钮),我在test里面应该如何去截获这个消息呢?
注意是系统的按钮。
欢迎大家讨论,如果解决了问题分不成问题,不够再加!

解决方案 »

  1.   

    创建一个全局鼠标钩子,捕获所有的鼠标单击事件
    得到鼠标单击的位置 point 写一个分析函数,
    伪代码 :
    CWnd *pBtn =windowfrompoint( point )
    判断是 pBtn是否为按钮
    如果是逐级查找pBtn的父窗口,直到为空,如果期间发现其中一个是桌面,就认为单击了系统按纽
    CWnd *pParent = pBtn->GetParent()
    while( pParent )
    {
      if( pParent = GetDesktopWindow() )
    {
      break;
    }
    }
      

  2.   

    while( pParent ) 

      if( pParent = GetDesktopWindow() ) 

      break; 

      pParent = pParent.Getparent();
    }
      

  3.   

    使用全局钩子,基本上可以实现,但是由于点击任务栏的时候,微软没有提供Explore的接口,所以直接判断点击的图标是不可能的,如何判断显示桌面的图标只能是通过其他判断手段(比较点击前后桌面窗口的状态)
      

  4.   

    全局钩子的例子很多,可参考:
    http://www.programbbs.com/doc/3164.htm
    注意:全局钩子必须在动态库中实现。桌面窗口不包括状态栏和快速启动栏吧。
    用spy++看一看那个quick lauch。窗口类的名称:toolbarwindow32之后的就需要楼主自己研究了。
      

  5.   

    请问fengling2001,
    如何判断窗口当前的状态,这个好像不太好实施吧
    再问问各位大侠,我如何得到当前鼠标在系统上的坐标位置
      

  6.   

    最好还是用钩子吧,全局钩子,dll
      

  7.   

    上面的问题都已经解决了,再问各位一个问题:
    比如说我已知某个窗口的句柄,我如何截获这个窗口上所发出的消息,比如BUTTONDOWN这种的。
      

  8.   

    比如说我已知某个窗口的句柄,我如何截获这个窗口上所发出的消息,比如BUTTONDOWN这种的。
    =======================
    挂钩子时不要挂全局钩子,而只对这个线程挂钩就可以得到这个线程的所有消息了。
      

  9.   

    上面2位能不能说的具体点呢?
    我现在不知道截获消息的部分是在DLL里面处理呢,还是在EXE里面处理
    函数应该怎么写呢,
    麻烦各位给我说以下处理 消息的位置和函数
    在线等,问题解决就散分,希望今天下午可以解决掉