比如,一个窗口的客户区有一按钮,然后通过FindWindow查找这个按钮通常都是返回NULL,为什么?

解决方案 »

  1.   

    我写了一下代码,本来是想把所有窗口最小化,但是结果让我不太明白,能不能一起解释一下?#include <windows.h>BOOL CALLBACK EnumProc(
      HWND hwnd,      // handle to parent window
      LPARAM lParam   // application-defined value
    )
    {
    ShowWindow(hwnd,SW_MINIMIZE);
    return TRUE;
    }int WINAPI WinMain(
      HINSTANCE hInstance,  // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,      // pointer to command line
      int nCmdShow          // show state of window
    )
    {
    if(!EnumWindows(EnumProc,NULL))
    return -1;
    return 0;
    }
      

  2.   

    FindWindow找窗口
    FindWindowEx找这个窗口下面的按钮(其他控件)
    HWND hh=::FindWindow(NULL,L"TestDialog");
    HWND hbtn=::FindWindowEx(hh,NULL,NULL,_T("YES"));
    ::PostMessage(hbtn,WM_LBUTTONDOWN, 0,0);
    ::PostMessage(hbtn,WM_LBUTTONUP, 0,0);
      

  3.   


    BOOL CALLBACK EnumWindowsProc(HWND hwnd/*当前找到的窗口句柄*/, LPARAM lParam/*自定义参数*/)
    {
    if(hwnd==NULL)   
    {         return   false;   //结束枚举   
    }     ShowWindow(hwnd,SW_MINIMIZE);
      return TRUE;

    }
      

  4.   

    一个循环里面套个GetWindow就行了
      

  5.   

    楼主弄错了一个问题,当前系统内的顶层窗口有很多个的,有一部分窗口是不显示的,结果你用EnumWindows将它们全找到了,另外还用ShowWindow将它们最小化,有些窗口在设计时本身就是不可见的,结果系统就乱了,只要加一句IsWindowVisible就行了.改成下面的样子:
    BOOL CALLBACK EnumProc( 
      HWND hwnd,      // handle to parent window 
      LPARAM lParam  // application-defined value 

    {    if(::IsWindowVisible(hwnd))
         ShowWindow(hwnd,SW_MINIMIZE); 
    return TRUE;