Chcę napisać listę, mającą taki format: [uchwyt][spacja, myślnik, spacja][tytuł okna]. Ma ona dotyczyć tylko okien widocznych dla użytkownika - czyli nie chcę listować okien niewidocznych, bo tych jest naprawdę sporo, a mnie one kompletnie nie interesują.
Napisałem sobie taki kod(oczywiście wspomagając się msdn'em):
#include <windows.h>
#include <iostream>
BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam);
void Dzialaj(void);
void Dzialaj(void)
{
EnumWindows(&MyEnumProc, 0);
}
BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
{
if (IsWindowVisible(hWnd)!=false){return true;}
std::cout << hWnd << " - ";
char tytul[500];
GetWindowText(hWnd, (LPWSTR)tytul, 250);
std::cout << tytul << std::endl;
// zeby kontynuowac enumeracje zwracamy true, zeby przerwac false:
// w tym wypadku ciagle zwracam true, wiec przerwie sie dopiero wtedy kiedy funkcja EnumProcess dotrze do ostatniego okna
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
Dzialaj();
system("PAUSE");
return 0;
}
Czyli niby odrzucam okna niewidzialne. Z MSDN wynika, że funkcja EnumWindows nie powinna mi listować okien-dzieci (czyli np. buttonów). Efekt działania programu jest taki, że aplikacja wypisuje masę uchwytów, oczywiście później spację, myślnik i kolejną spację, ale w miejscu gdzie powinien być tytuł dostaję jedną literkę albo kompletnie nic.
Wypisywanych uchwytów jest z całą pewnością więcej niż aktualnie otwartych okien. Co robię nie tak?
PS.
Wiem, że system("PAUSE"); to zło w czystej postaci, tutaj tylko tak na szybko napisałem, na razie chcę żeby program działał, później zrobię refactoring kodu :)