Was ist hierdran Falsch(GetNextWindow)



  • Hallo, ich habe folgendes versucht. Das Programm soll alle offenen Fenster durchgehend anzeigen.

    HWND fhWnd = GetActiveWindow();
           HWND stepwnd;
           for(int y=0;y<=10;y++)
           {
           stepwnd = GetNextWindow(Form1->Handle,GW_HWNDPREV);
           SetForegroundWindow(stepwnd);
           Sleep(5000);
           }
    

    Also es nimmt das Programm als Ausgangspunkt, und geht danach rückwärts oder vorwärts alle Fenster durch. Danach setzt es jedes Fensters in Vordergrung und wartet 5 Sekunden bis es das nächste sucht.

    Leider tut es garnix, und die Lösung das momentane Programm als Ausgangspunkt zu nutzen finde ich auch nicht so genial. Ebenso wie for Schleife, aber die ist ja durch die Handle und NULL abfrage umgehbar.

    Hatt einerden Fehler enddeckt oder evtl. ein besseren Vorschlag?



  • Solltest Du GetNextWindow() nicht mit stepwnd als handle aufrufen ?
    (und vor der schleife einmal stepwnd=fhWnd)



  • HWND fhWnd = GetActiveWindow();
           HWND stepwnd;
           stepwnd=fhWnd;
           for(int y=0;y<=10;y++)
           {
           GetNextWindow(stepwnd,GW_HWNDPREV);
           SetForegroundWindow(stepwnd);
           Sleep(5000);
           }
    

    Weder so noch mit stepwnd = Get... klappt das.



  • [cpp]HWND fhWnd = GetActiveWindow();
    HWND stepwnd;
    stepwnd=fhWnd;
    for(int y=0;y<=10;y++)
    {
    **stepwnd=**GetNextWindow(stepwnd,GW_HWNDPREV);
    SetForegroundWindow(stepwnd);
    Sleep(5000);
    }
    [/cpp]



  • Kann nicht sein.
    Dem Code zufolge müsste der alle Fenster durchgehen und in den Vordergrund bringen. Nur der bringt kein einziges Fenster in Vordergrund.



  • Hat deine Anwendung überhaupt die nötigen Rechte für SetForegroundWindow ?
    (Lies mal bei den Remarks zu SetForegroundWindow...)

    Hast du mal erstmal probiert an die Anwendungen WM_GETTEXT zu senden und die Fenstertitel irgendwie auszugeben ?



  • FindWindow und SetForeGround klappen einwandfrei.



  • hast du mal überprüft, ob von den einzelnen funktionen überhaupt einen rückgabewert != NULL geben?

    bei mir z.B. kehrt GetNextWindow([...]) immer mit 0 zurück



  • Also ich hab nochmal geguckt und EnumWindows ist ja noch da.
    Das muss glaube ich per while Schleife laufen.

    Leider klappt das nicht kompiliert mit BCB6.

    in unit1.h

    static BOOL CALLBACK WndEnumProc(
    HWND hwnd,
    LPARAM lParam
    );

    Das steht im Public:

    Und das in der cpp

    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    EnumWindows((WNDENUMPROC)WndEnumProc, 0);
    
     }
    

    Ergibt:
    [Linker Fehler] Unresolved external '__stdcall TForm1::WndEnumProc(void *, long)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\TEST\UNIT1.OBJ



  • kannstst mal das hier angucken:

    //---------------------------------------------------------------------------
    #include<windows.h>
    //---------------------------------------------------------------------------
    int main(int argc, char* argv[])
    {
           HWND fhWnd = GetForegroundWindow();
           if(!fhWnd){MessageBox(NULL,"error1","hm",MB_OK);return 1;}
           HWND stepwnd=fhWnd;
           for(int i=0;i<10;i++)
           {
           stepwnd=GetNextWindow(stepwnd,GW_HWNDPREV);//NEXT);
           if(!stepwnd){MessageBox(NULL,"error2","hm",MB_OK);return 1;}
           SetForegroundWindow(stepwnd);
           ShowWindow(stepwnd,SW_SHOW);
           Sleep(1000);
           }
           return 0;
    }
    //---------------------------------------------------------------------------
    

    bei mir tauchen da die erstaunlichsten fenster auf.. die auch voll tapfer dableiben, was immer man versucht. 🙂

    kA, weiß sonst auch keinen rat.

    grüße, die plapperkatz



  • Ich bekomme immer Fehler 2 zurück.


Anmelden zum Antworten