Abfragereset entspricht nicht dem Optimum



  • Hallo Leute,

    also ich habe folgenden Teil nach einer switch-case Anwendung zum Abrufen von Internet-Links mit dessen Ergebnis ich noch nicht ganz zufrieden bin.

    Die Passwortabfrage und das Programm funktionieren bereits einwandfrei, jedoch der fett markierte Bereich mit dem Neustartbefehl, verlangsamt einen wesentlich und muss verbessert werden.

    Wenn ich eine Nummer eingebe, dann wird der Link geöffnet und das Programm erfragt einen Neustart, den es dann auch absolviert. Im Programmdialogfenster stehen dann jedoch alle veralteten Informationen immernoch, wodurch die Linkliste ohne scrollen nicht mehr lesabr ist.
    Wünschenswert wäre, wenn man einen Link eingibt, dass sich das Programm weiterhin im Vordergrund aufhält, weil es sonst immer umständlich in den Vordergrund geholt werden muss und dass der Programm Neustart erfolgt ohne die alten Informationen, entweder durch kompletten reset, oder dadurch, dass die Abfrage sofort neu hinter die alte geschaltet wird, was ich auch schon gemacht hatte, weiß allerdings nicht mehr wie und habe von dem Versuch nur noch die executanble. Letzteres ist nicht die perfekte Lösung, da man nach dem Öffnen von einigen Links die Linkliste nicht mehr ansehen kann ohne zu scrollen, aber wenn das Program immer im Vordergrund steht kann ich das vetreten.

    #include <iostream>
    #include <iomanip>
    #include <windows.h>
    #include <shellapi.h>
    #include <stdlib.h>
    
    int main()
    {
        char abb = ' ';
        int Ant,Passwort,a=[i][b]Entsprechendes Passwort[/b][/i],i=0;
        cout << "Passwort: ";
        cin>>Passwort;
    
        if (Passwort==a)
        {
        do
        {
    
        [b]Hier steht eine Liste mit entsprechenden Links und deren Nummer für die    Eingabeaufforderung[/b][i]
    
        cout << endl << "Geben Sie die gewuenschte Nummer ein... ";
        cin >> Ant;
    
        switch (Ant)
        {
                    case 1:
                    ShellExecute(NULL, "open", "[i][b]Entsprechender Link[/b][/i]", NULL, NULL, SW_SHOW);
                    system("PAUSE");
                    break;
                    case 2:default:
                    cout << endl << "Ungueltige Eingabe";
                    break;
        } 
    
    [b]cout << "Programm neu starten? ";
                    cin>> abb;
        }
                    while ((abb=='j') || (abb=='J'))[/b];
    

    Bin hier für jeden Tip tierisch dankbar. Es handelt sich hierbei auschließlich um eine private rumspielerei mit selbst angeeigneten Kenntnissen aus den Unikursen und forschen im Internet.



  • Da du ja offensichtlich unter Windows arbeitest, kannst du folgende Funktion benutzen:

    system("cls"); //löscht den Inhalt des Konsolenfensters
    

    Damit das neu geöffnete Fenster im Hintergrund ist, schau dir mal den letzten Parameter von ShellExecute an (WM_SHOW). Hier ist eine Liste an Parametern, die steuern, wie sich das neue Fenster verhalten soll (damit dein Progrmam im Vordergund bleibt): http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx



  • Der Link mit der execute, hat für das eine Problem schonmal super geholfen, da habe ich wohl auch den richtigen Befehl gefunden:

    SW_SHOWMINNOACTIVE
    Displays the window as a minimized window. The active window remains active.

    Jedoch passiert beim Implementiren dessen, nichts verändertes.

    case 2:
                    ShellExecute(NULL, "open", "http://www.google.de", NULL, NULL,   SW_SHOWMINNOACTIVE);
                    system("PAUSE");
                    break;
    

    Kommt es darauf an welchen Browser man benutzt? Ich benutze nämlich firefox.
    Oder muss ich woanders noch etwas umschreiben.

    Das mit dem system("cls") schaue ich mir auch nochmal genauer an.



  • Wenn du Links über ShellExecute öffnest, gibt Windows das Managen des Öffnens an deinen Standard Browser weiter. Daher müsstest du da einstellen, wie das Fenster geöffnet werden soll



  • Du könntest aber auch über SetForegrounWindow dein Programm im den Vordergrund bringen. http://msdn.microsoft.com/en-us/library/ms633539(VS.85).aspx
    Die ID deines Fensters findeste über

    HWND Fenster = GetForegroundWindow(); //natürlich nur aufrufen, wenn dein programm sicher im Vordergrund ist.
    
    //dann später
    if(GetForegroundWindow() != Fenster)
        SetForegroundWindow(Fenster);
    

    Aber das gehört eigentlich ins WinApi Forum


Anmelden zum Antworten