Aktywowanie,wyświetlenie i fokus okna innej applikacji

0

Po wykonaniu pewnych czynności obliczeniowych okno mojego programu przekazuje
automatycznie Fokus na okno zupełnie osobnego programu innego procesu ,które do tej
pory było w stanie zminimalizowanym. Wykonuje to zamieszczony w przykładzie prosty
,odnaleziony na tym forum kod.Wszystko niby działa... jednak pojawia się dziwne zjawisko
Okno innej aplikacji które w ten sposób otrzymało fokus nie można ponownie zminimalizować!!!
Czemu tak się dzieje i jak temu zaradzić?

tu przykład kodu zmieniającego fokus:

procedure TForm1.Button1Click(Sender: TObject);
var
Uchwyt: THandle;
begin
//Pobieramy uchwyt do okna o okreslonej nazwie
Uchwyt:=FindWindow(nil,'TestoweOkno');

 //Sprawdzamy czy okno jest aktywne
 if IsWindowEnabled(Uchwyt) then ShowMessage('Aktywne');

 //Sprawiamy ,ze okno staje sie widoczne
 ShowWindow(Uchwyt, SW_SHOW);

 //Sprawdzamy czy okno jest widoczne
 if IsWindowVisible(Uchwyt) then ShowMessage('Widoczne');

 //Ustawiamy aktywne i widoczne okno.
 SetForegroundWindow(Uchwyt);

end;

1

Zamiast:

 ShowWindow(Uchwyt, SW_SHOW);

daj: ShowWindow(GetWindow(Uchwyt, GW_OWNER), SW_RESTORE);

Chodzi o to, żeby złapać za uchwyt aplikacji, a nie głównej formy.
0

Zadziałało znakomicie....

Jest jeszcze tylko jedno ujemne zjawisko gdy okno ,jest zminimalizowane na belce
operacja ustawienia go na pierwszym planie działa tylko raz,ponowne zminimalizowanie tego
okna i wywołanie przycisku z ShowWindow(GetWindow(Uchwyt, GW_OWNER), SW_SHOW); nie powoduje
już za drugim razem jakiegokolwiek efektu. Trochę to dziwne?

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1