Seite 1 von 2

fremdes fenster fokussieren

Verfasst: 18.02.2014 21:20
von Moxl
Hallo :allright:

ich hab schon google und die sufu benutzt aber ich finde nichts anständiges :(
ich suche ein befehl wie man ein fremdes fenster (also kein fenster aus meinem programm) fokussieren kann?
Das handle von dem fenster hätte ich.
SetForeGroundWindow_() bringt nichts. Da blinkt nur das Icon in der Taskleiste.

Danke schonmal im Vorraus :allright:

Re: fremdes fenster fokussieren

Verfasst: 18.02.2014 21:26
von ts-soft
Wenn es nur in der Taskleiste blinkt, ist das Fenster wohl minimiert.

Code: Alles auswählen

ShowWindow_(hWnd, #SW_SHOWNORMAL)
SetForeGroundWindow_(hWnd)
sollte helfen, wenn das fremde Fenster mit denselben Rechten wie das Eigene läuft.

Re: fremdes fenster fokussieren

Verfasst: 18.02.2014 22:08
von Moxl
fenster is leider nich minimiert, es hat nur nicht den fokus...
die kombination hab ich auch schon probiert aber klappt leider auch net :(

Re: fremdes fenster fokussieren

Verfasst: 18.02.2014 22:30
von ts-soft
Dann starte Dein Programm mal mit erhöhten Rechten (CompilerOptionen Adminrechte anfordern).

Re: fremdes fenster fokussieren

Verfasst: 19.02.2014 07:35
von Danilo
Das Verhalten von SetForeGroundWindow_() ist normal. Zu viele Programmierer haben das missbraucht,
um unbedingt ihr Fenster in den Vordergrund zu bringen. Das stört den User aber, wenn sich dauernd
irgendwelche Fenster in den Vordergrund bringen. Deshalb wurde es in das Blinken geändert, so dass
der User darauf aufmerksam wird, aber nicht direkt gestört wird. Glaube das ist schon seit Win98 so, das
andere Prozesse sich nicht einfach selbst nach vorn bringen können. Nur der aktive Vordergrundprozess darf
seine Fenster nach vorn bringen.

Du kannst mal SetForegroundWindowEx() probieren. Für 64bit musst Du aber die .l (Long) nach .i (Integer) ändern.

Dann gibt es noch SetWindowPos_() mit dem Flag HWND_TOP: Places the window at the top of the Z order.
To use SetWindowPos to bring a window to the top, the process that owns the window must have SetForegroundWindow permission.

Re: fremdes fenster fokussieren

Verfasst: 21.02.2014 15:19
von Moxl
funktioniert leider alles nicht :/
naja dann muss es halt ohne gehen :lol:

trotzdem danke für die antworten :allright:

Re: fremdes fenster fokussieren

Verfasst: 23.02.2014 22:59
von Sicro

Re: fremdes fenster fokussieren

Verfasst: 23.02.2014 23:11
von ts-soft
Wenn das Fenster mit den normalen Mitteln nicht zum Vordergrundfenster wird, sollte man das lieber
hinnehmen! Es ist sehr nervig, wenn man z.B. gerade einen Text schreibt und einem der Fokus durch ein
anderes Fenster geklaut wird :mrgreen:
Man macht sich durch sowas keine Fans. Windows ist nunmal MultiTasking und da sollte man andere laufende
Anwendungen neben der eigenen auch akzeptieren.

Gruß
Thomas

Re: fremdes fenster fokussieren

Verfasst: 24.02.2014 15:58
von chi
Nachdem Fred's snippet (http://forums.purebasic.com/english/vie ... oundWindow) leider nicht immer funktioniert...

Code: Alles auswählen

#LSFW_UNLOCK = 2
#ASFW_ANY = -1

Procedure.i ForceWindowIntoForeground(window.i)
  Protected currentThread.i, activeWindow.i, activeProcess.i, activeThread.i, windowProcess.i, windowThread.i, oldTimeout.i, newTimeout.i
  currentThread = GetCurrentThreadId_();
  activeWindow = GetForegroundWindow_();
  activeThread = GetWindowThreadProcessId_(activeWindow, @activeProcess);
  windowThread = GetWindowThreadProcessId_(window, @windowProcess);
  If currentThread <> activeThread
    AttachThreadInput_(currentThread, activeThread, #True)
  EndIf
  If windowThread <> currentThread
    AttachThreadInput_(windowThread, currentThread, #True)
  EndIf
  oldTimeout = 0
  newTimeout = 0
  SystemParametersInfo_(#SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @oldTimeout, 0);
  SystemParametersInfo_(#SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @newTimeout, 0);
  LockSetForegroundWindow_(#LSFW_UNLOCK);
  AllowSetForegroundWindow_(#ASFW_ANY);
  SetForegroundWindow_(window);
  If IsIconic_(window)
    ShowWindow_(window, #SW_RESTORE);
  EndIf
  SystemParametersInfo_(#SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @oldTimeout, 0);
  If currentThread <> activeThread
    AttachThreadInput_(currentThread, activeThread, #False)
  EndIf
  If windowThread <> currentThread
    AttachThreadInput_(windowThread, currentThread, #False)
  EndIf
EndProcedure
... hat mich nicht 1x im Stich gelassen ;)

cheers, chi

Re: fremdes fenster fokussieren

Verfasst: 27.02.2014 22:47
von 3dhubiflieger
Ich habe im Moment selbiges Problem. Alle hier beschriebenen Codes funktionieren mehr oder weniger gut. Sendmessage funktioniert noch am ehsten, aber auch nicht bei allen Programmen / Systemen. Ich suche eine allgemeingültige Lösung für Vollbild und Fenstermodus. Ich dachte dabei an sowas wie mit Alt Tab in Windows. Man simuliert die Tastenkombination und holt dann irgendwie so das Handle in den Vordergrund. Allerdings weiss ich nicht wie man das Handle in Verbindung mit der Tastenkombination ermittelt. Hat jemand einen Lösungsansatz ?