Как я могу пропустить скрытые окна при использовании FindWindow ()? - PullRequest
1 голос
/ 22 ноября 2010

Я создаю окно, не показывая его:

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

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

Ответы [ 2 ]

6 голосов
/ 22 ноября 2010

Даже если окно не видно, оно, конечно, входит в список всех существующих окон, которые перечисляет 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 голосов
/ 22 ноября 2010

FindWindow находит окна верхнего уровня.

Пока ваш вызов CreateWindow создает окно верхнего уровня (т.е. одно без родителя), я не уверен, что оно действительно будет работать.

Конечно, очень необычно (если не неправильно) создавать SysListView32 верхнего уровня. Элементы управления ListView должны быть потомками окон верхнего уровня, а не самих окон верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...