fremdes fenster fokussieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

fremdes fenster fokussieren

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: fremdes fenster fokussieren

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: fremdes fenster fokussieren

Beitrag 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 :(
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: fremdes fenster fokussieren

Beitrag von ts-soft »

Dann starte Dein Programm mal mit erhöhten Rechten (CompilerOptionen Adminrechte anfordern).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: fremdes fenster fokussieren

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: fremdes fenster fokussieren

Beitrag von Moxl »

funktioniert leider alles nicht :/
naja dann muss es halt ohne gehen :lol:

trotzdem danke für die antworten :allright:
Benutzeravatar
Sicro
Beiträge: 969
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: fremdes fenster fokussieren

Beitrag von Sicro »

Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: fremdes fenster fokussieren

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
chi
Beiträge: 90
Registriert: 17.05.2007 09:30
Wohnort: Austria

Re: fremdes fenster fokussieren

Beitrag 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
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: fremdes fenster fokussieren

Beitrag 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 ?
Antworten