Znajdujemy okno po tytule , szukamy okien potomnych ,
jeśli znaleziono okno "Static" , pobieramy z niego tekst
Uwaga. Okno zawiera ikonę Static , ten "tekst" trzeba odrzucić
Teraz trzeba pomyśleć w jaki sposób uruchamiać kod szukający
okna , może wystarczy tylko cykliczne wywołanie Timerem , a może nie
:-)
Jak nie ,trzeba rozpoznać jaką funkcją jest tworzone okno , władować
bibliotekę do procesu tworzącego okno i przekierować na własną . Lub sposób jak podał lol1234
Trudniejszy , ale pozwala np.zapobiec wyświetlaniu MessageBoxa ,
char buff[255] ; // bufor na napisy z okna
HWND hButton ; // Handle Buttona
HWND hWnd ; // Handle MessageBox-a
BOOL CALLBACK MyEnumChildProc(HWND hWnd,LPARAM lParam)
{
if(GetClassName(hWnd,buff,255))
{
if(0==lstrcmp(buff,"Static")) // jaśli okno Static
{ // pobierz tekst
SendMessage(hWnd,WM_GETTEXT,(WPARAM)255,(LPARAM)buff);
/*
Tu w buff mamy tekst z okien typu Static
w kolejnych wywołaniach MyEnumChildProc
*/
/*
'Tekst' pobrany z Ikony trzeba pominąć
*/
}
// łapiemy handle Buttona
if(0==lstrcmp(buff,"Button"))
{
hButton = hWnd ;
}
}
return true ;
}
//...........
//............ Fun wywoływana przez Timer np. co 200 ms
void FindMessageBox(void)
{
hWnd = FindWindow(NULL,"Error");
if(NULL != hWnd)
{
// znaleziono okno z tytulem "Error"
// szukamy potomnego Static
EnumChildWindows(hWnd,MyEnumChildProc,0) ;
// Zamykamy okno "Error"
//SendMessage(hWnd,WM_CLOSE,0,0);
// lub Klikamy w Buttona
SendMessage(hButton,BM_CLICK,0,0);
}
}