2010-11-22 4 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 не показывает окно.

Как найти только вид окна?

ответ

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 должны быть детьми окон верхнего уровня, а не самими окнами верхнего уровня.

Смежные вопросы