Die Funktionen die du brauchst sind IsWindowVisible und GetWindowPlacement.
GetWindowPlacement hat in der WINDOWPLACEMENT-Struktur den Parameter showCmd. Damit kannst du ermitteln, ob das Fenster normal = 1, minimiert = 2 oder maximiert = 3 ist.
Mit der von dir schon genannten Funktion IsWindowVisible kannst du ermitteln, ob das Fenster sichtbar = 1 oder unsichtbar = 0 ist.
Zitat von
LokutusvB:
Wie kann es sein, das IsWindowVisible(hwnd) False zurückgibt, obwohl ich das Fenster direkt vor mir auf dem Bildschirm sehe? Das
Handle scheint zu stimmen, mit SetForegroundWindow(hwnd) setzt es mir genau dieses Fenster wieder in den Vordergrund.
Das Problem kenne ich von vor laaaanger, laaaanger Zeit. Dafür gibt es einige Gründe. Alle laufen darauf hinaus, dass das
Handle nicht wirklich stimmt. Zum Beispiel hatte ich das
Handle von einem weiteren Fenster des fremden Programms erwischt, das unsichtbar im Hintergrund läuft, oder ich hatte das Taskbar-Fenster erwischt, oder zwar schon das richtige Fenster, aber dann nicht das Parentfenster sondern ein Control oder einen Container auf dem Fenster, oder ...
Probier den Code vielleicht erstmal an einem kontrollierbarem Programm aus. Erstell dir zum Beispiel schnell mal selbst ein einfaches Testprogramm mit einem Fester, einem Button, einem Edit-Control, ...
Guido.
Edit:
Hätte ich beinahe vergessen: Wenn du zum Beispiel das
Handle des Taskbar-Fensterchens oder eines unsichtbaren Hilfsfensters (des fremden Programms) erwischt hast, kommt mit SetForegroundWindow(hwnd) natürlich auch das eigentliche Fenster in den Vordergrund.