MFC-GetWindow获取与指定窗口有特定关系的窗口句柄_窗口句柄

 

HWND hWnd2 = GetSafeHwnd();
::SetWindowText(hWnd2, _T("窗口句柄练习"));
CString str;

TCHAR ch[MAX_PATH] = { 0 };
HWND hWnd = ::GetDesktopWindow();//获取桌面窗口的句柄
HWND hWnd1 = ::GetWindow(hWnd, GW_CHILD); //获取与指定窗口有特定关系的窗口句柄
//参数1:窗口句柄
//参数2:与参数1的关系
// GW_CHILD(&H5):获取参数1的Tab序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口
// GW_HWNDNEXT(&H2):返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。
// 看:https://baike.baidu.com/item/GetWindow/6376412?fr=aladdin
//



while (hWnd1 != NULL)
{
::GetWindowText(hWnd1, ch, MAX_PATH);//获取指定窗口或控件的文本
//参数1:带文本的窗口或控件的句柄
//参数2:指向接收文本的缓冲区的指针
//参数3:指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过界限,它就被截断


str = ch;

if (str == _T("窗口句柄练习")) //寻找指定窗口
{
WriteConsole(hStdout, ch, _tcslen(ch), NULL, NULL);

}
hWnd1 = ::GetWindow(hWnd1, GW_HWNDNEXT);
}

 

GW_HWNDFIRST = 0; {同级别第一个}
GW_HWNDLAST = 1; {同级别最后一个}
GW_HWNDNEXT = 2; {同级别下一个}
GW_HWNDPREV = 3; {同级别上一个}

GW_OWNER     = 4; {属主窗口}

    子窗口的parent和owner是同一个窗口,但是普通窗口的parent一般是NULL,owner是桌面

    一般的说, Parent指控件的父窗口,Owner指顶级窗口的父窗口

    具有父窗口的窗口被限制在父窗口的客户区内,但是被拥有的窗口可以被画在桌面上的任何位置。
    GetParent函数返回直接父窗口的指针。与此不同,GetParentOwner函数返回不是子窗口(不具有WS_CHILD风格)的最直接父窗口或拥有者窗口的指针