在程序中用到Hook,是局部的Hook,如何获得主对话框的句柄并且发消息给她?问题的关键是不知道如何获得模态对话框的句柄,急,急,急

解决方案 »

  1.   

    知道窗口名,或窗口类名,用FindWindow(LPCTSTR classname, LPCTSTR windowname);
    不知道窗口名,也不知道窗口类名,用WindowFromPoint(POINT point),
    不过之前要记得SetCapture();
      

  2.   

    App中public :HWND hwnd;//保存的是Dialog的句柄
    生成对话框时,将句柄保存到一个全局变量里
    ::OnInitDialog() 
    {
    theApp.hwnd=this->GetSafeHwnd();}
    其它地方直接对此句柄操作
      

  3.   

    只知道类名啊,窗口名是标题么?
    ////////////
    不一定,qq的窗口名就不是window 的名字
      

  4.   

    知道类名就够了,
    FindeWindow(classname, NULL);
      

  5.   

    HWND FindWindow(
      LPCTSTR lpClassName,  // pointer to class name
      LPCTSTR lpWindowName  // pointer to window name
    );
    此API函数可以找到窗口,
    如果不行,还可以枚举窗口,用
    BOOL EnumWindows(
      WNDENUMPROC lpEnumFunc,  
      LPARAM lParam           
    );具体用法可以查看MSDN!
      

  6.   

    FindWindow()可以根据窗口名,也可以根据类名查找
      

  7.   

    总结:
       最后用FindWindow(LPCTSTR lpClassName,  // pointer to class name
      LPCTSTR lpWindowName  // pointer to window name
    );方法实现:   其中lpWindowName就用对话框的Caption.
    ///////////////////////////////////////////////
      App中public :HWND hwnd;//保存的是Dialog的句柄
    生成对话框时,将句柄保存到一个全局变量里
    ::OnInitDialog() 
    {
    theApp.hwnd=this->GetSafeHwnd();}
    ///////////////////////////////////////////////
    该方法有个问题,这个句柄引不出来,需要改进一下,先结贴,希望继续讨论