2010-11-22 122 views
1

我没有表现出它创建一个窗口:如何在使用FindWindow()时跳过隐藏的窗口?

int main() 
{ 
    CreateWindow("SysListView32","Geek",0, 0, 0, 0, 0,NULL, NULL, (HINSTANCE)GetCurrentProcess(), NULL); 

    getch(); 
} 

...而在另一个进程使用FindWindow()找到它的手柄:

int main() 
{ 
    HWND H = FindWindow("SysListView32", "Geek"); 
    std::cout<< "The handle of created window is : " <<H; 

    getch(); 
} 

如何FindWindow找到它的手柄?我认为它会不是找到它,因为process1没有显示窗口。

我怎样才能找到可见 windows?

回答

6

即使窗口不可见,它当然也在FindWindow列举的所有现有窗口的列表中(例如,可以使用Spy ++显示此列表)。如果您不想搜索隐藏的窗口,则必须检查其标志:

HWND H = FindWindow("SysListView32", "Geek"); 
if (H) { 
    LONG style = GetWindowLong(H, GWL_STYLE); 
    if (style & WS_VISIBLE) 
    std::cout << "The handle of created visible window is : " << H << std::endl; 
    else 
    std::cout << "The handle of created hidden window is : " << H << std::endl; 
} else { 
    std::cout << "No such window found" << std::endl; 
} 
+0

你说什么标志 – maysam 2010-11-22 17:02:53

+0

增加了示例代码 – 2010-11-22 17:13:24

0

FindWindow找到顶级窗口。

虽然您的CreateWindow调用正在创建一个顶级窗口(即没有父窗口的窗口),但我不相信它会真正起作用。

创建一个顶级SysListView32肯定非常不寻常(如果没有错的话)。 ListView控件应该是顶级窗口的子级,而不是自己的顶级窗口。