Setforeground und ein riesen Problem



  • Ich habe das ja schon im BCB Forum geschrieben, aber das liegt wohl eher an der WinAPI.

    Wenn ich ein Programm in Vordergrund holen will klappt das nicht immer.

    Folgendes Beispiel, alle Fenster sind grau, aber kein aktives, zumindest laut Getforegroundwindow.

    Anderes Beispiel, das Programm wird per SetforegroundWindow versucht in Vordergrund zurufen. Das Programmfenster in der Taskleiste blinkt blau, und Ende.

    Ich weiss nicht weiter, und habe schon unzählige Stunden damit zugebracht.



  • Ich hab die Erfahrung gemacht, das es was bringt wenn man das Fenster vorher via ShowWindow() minimiert und anschließend wieder anzeigen lässt.
    Danach scheint man fast immer alle Berechtigungen für SetForegroundWindow() zu haben.
    Ist allerdings Gefrickel und funktioniert auch nicht ganz 100%...



  • 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;
    }
    


  • Ich bedanke mich recht herzlich, für die Hilfe.


Anmelden zum Antworten