Foreground Window setzen mit AttachThreadInput



  • Hallo! Ich habe folgenden Code hier gefunden:

    BOOL SetToForeground(HWND hwnd){
        if ( ! hwnd )
            return FALSE;
    
        DWORD    idThread_foreground = 0;
        DWORD    idThread_me = 0;
        BOOL    retValue = FALSE;
    
        if ( hwnd == GetForegroundWindow() )
            return TRUE;
    
        idThread_foreground = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
        idThread_me = GetWindowThreadProcessId(hwnd,NULL);
    
        if ( idThread_foreground != idThread_me )
        {
            AttachThreadInput(idThread_foreground, idThread_me, TRUE);
            retValue = SetForegroundWindow(hwnd);
            AttachThreadInput(idThread_foreground, idThread_me, FALSE);
         }
        else
            retValue = SetForegroundWindow(hwnd);
    
        ShowWindow(hwnd, IsIconic(hwnd) ? SW_RESTORE : SW_SHOW);
    
        return retValue ? TRUE : FALSE;
    }
    

    Damit soll es möglich sein, das nach vorne bringen eines beliebigen Fensters zu erzwingen.

    Das ganze funktioniert auch, nur mit der Einschränkung, dass ich einmal von Hand das Toplevelwindow minimiere -> wiederherstelle, danach mein Fenster dass ich wiederherstellen will selbst wiederherstelle. Danach kann mein Programm dieses Fenster selbstständig nach vorne setzen.

    Woran kann das liegen? Wenn das Fenster, das ich wiederherstellen will minimiert ist, und ich starte mein Progran, führe diese Routine auf, dann passiert nichts. Erst wenn ich selbst bissel rumklicke funktionierts dann.

    Jemand eine Idee?



  • return retValue ? TRUE : FALSE;
    


  • Evtl den ShowWindow -Aufruf vor dem SetForegroundWindow -Aufruf platzieren (ist nur geraten)?



  • supercode schrieb:

    return retValue ? TRUE : FALSE;
    

    kannst du vielleicht noch einen Satz dazu schreiben, wohin das kommen soll ?



  • Er will dir damit sagen, dass du dir die Zeile mal ganz genau anschauen sollst, ob das wirklich nötig ist was du da machst.


  • Mod

    Ich vermute auch das was Badestrand schon schrieb:
    Man kann nur ein sichtbares nicht minimiertes Fenster nach vorn setzen!


Anmelden zum Antworten