Komisches Problem mit ShowWindow()



  • Hio,

    ich suche mit der Funktion FindWindowEx nach einem bestimmten Programmfenster (Hauptfenster eines Programmes).

    Hier mein Code:

    ..
    HWND lobby=FindWindowEx(NULL, NULL, "#32770", NULL);
    ShowWindow(lobby,SW_RESTORE);
    return (int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0);
    // returnt die Anzahl der Rows einer Tabelle in dem Programm
    

    nun mein Problem:
    Wenn ich mein Programm starte, und das Zielprogramm ist minimiert und drücke dann den Button, damit das andere Fenster Wiederhergestellt wird, passiert nix. Wenn ich es Manuell Wiederherstelle (klick in die Taskleiste), es dann wieder Minimiere und dann in meinem Programm auf den Button klicke, um es groß zu machen, dann funktioniert es...
    Woran kann das liegen?
    Irgendwas mit Z-Order?

    Danke für die Hilfe

    PS: Das Problem besteht übrigens auch mit den Rows der Tabelle, die werden auch nur gefunden, wenn das andere Programm erst einmal maximiert wurde...



  • ShowWindow(lobby,SW_SHOWNORMAL)

    funktioniert auch nicht ..
    erst sobald ich es einmal manuell wiederherstelle, erst dann ..



  • Ich hab echt schon alles probiert, es ist immer das gleiche...
    Das Fenster wird einfach nicht angezeigt, es bleibt in der Taskleiste ...

    Erst sobald ich es manuell einmal öffne (mit click auf die Taskleiste), danach geht es ohne probleme
    das soll mal einer verstehen



  • so jetzt habe ich das mal mit Notepad probiert und da gehts.

    Liegt wohl an dem Programm... irgendwie reagiert das nicht (direkt) auf ShowWindow und konsorten...



  • schöner Monolog, mehr davon



  • In deinem Beispielcode suchst du nach einem Childwindow, das ein Child vom Desktop ist, da du im ersten Parameter NULL angegeben hast. Wenn du nun den Rückgabewert von FindWindowEx () prüfst, wirst du feststellen, dass NULL zurückgegeben wird, also kein entsprechender Handle gefunden wurde. Du solltest dir zuvor mittels FindWindow () ein Handle auf das Hauptfenster holen, um erst dann mit FindWindowEx nach dem Childfenster zu suchen. Als ersten Parameter übergibst du den zuvor ermittelten Hauptfensterhandle.

    Du hast geschrieben, dass es sich um ein Hauptfenster eines Programmes handelt, wobei das eher falsch formuliert, als richtig ist. Jedes Fenster ist irgendeinem anderen Fenster untergeordnet, bei deinem Suchobjekt handelt es sich eben höchstwahrscheinlich um ein Childfenster des Hauptprogrammes (-fensters).

    Guck dir am besten mal die Doku zu FindWindowEx und FindWindow an, da steht eigentlich alles beschrieben: http://msdn2.microsoft.com/en-us/library/ms633500.aspx
    🙂



  • danke mikey, ich werd mir das mal anschauen.
    Wobei ich das trotzdem noch nicht verstehe, er findet ja alles handles, auch mit meiner Version..
    Das Prob an der Sache war (ist), dass er dieses (Hauptfenster) des anderen Programmes nicht wiederherstellt, bevor ich es nicht einmal selbst wiederhergestellt habe. Ich kann alles mit diesem Fenster machen (Vergrößern, verschieben usw) aber ich kann es nicht "anzeigen" lassen. Er bringt es nicht nach vorne, bzw zeichnet es garnicht erst. Ich muss manuell auf die Taskleiste klicken..
    Wenn ich es dann minimiere und DANN in meinem Programm auf den Button drücke, gehts ohne Probleme ...

    @3 Punkte spack:
    Spar dir mal deine dummen Kommentare, das hat mir nicht weitergeholfen. Und das nächste mal dann mal nicht Anonym, stell dich wenigstens.



  • niemand noch eine Idee?

    was kann an diesem Fenster anders sein als an dem Fenster von Notepad z.B?
    Da es dort ja klappt ..

    ich hab mal mit Spy+ ein Screenshot gemacht von dem Teil, wenn das Fenster Minimiert ist und ich es dann per Mausklick auf die Taskleiste wiederherstelle. Vielleicht sieht jemand ja etwas besonderes..

    http://www.thasinus.de/messages.jpg

    danke!



  • Lumpeh schrieb:

    Ich muss manuell auf die Taskleiste klicken..
    Wenn ich es dann minimiere und DANN in meinem Programm auf den Button drücke, gehts ohne Probleme ...

    Möglicherweise hast Du mehrere Fenster deren "class name" "#32770" lautet.
    Wenn es maximiert und wieder minimiert wird, liegt es (fast) "ganz oben" und wird deshalb von FindWindowEx () als erstes gefunden.
    Gib mal bei FindWindowEx () auch den "window name" mit an (4. Parameter) damit es eindeutiger ist.



  • das könnte sein, ich werds gleich mal testen !

    vielen dank für den Hinweis!!



  • Also das hat mein Problem gelöst, es gab wirklich mehrere Fenster dieser Klasse.
    Da wäre ich in 10 Jharen nicht draufgekommen.
    Nochmals danke 🙂


Anmelden zum Antworten