Minimiertes Window wieder in den Vordergrund?
Minimiertes Window wieder in den Vordergrund?
Hallo,
Ich möchte ein Window in den Systray minimieren (ohne Anzeige in der Taskbar) und mit Click auf das Systrayicon das Fenster wieder im Vordergrund anzeigen lassen.
Mein Vorgehen bisher:
Bei Click auf das Systray icon --> Hidewindow(0,1)
Bei erneutem Click --> Hidewindow(0,0)
So erscheint es aber leider hinter den aktuellen Fenstern wieder.
Und ich bin mir nicht sicher, ob das Hiden eines Windows dem Minimieren entspricht oder zu viel Recourcen braucht.
Ich möchte ein Window in den Systray minimieren (ohne Anzeige in der Taskbar) und mit Click auf das Systrayicon das Fenster wieder im Vordergrund anzeigen lassen.
Mein Vorgehen bisher:
Bei Click auf das Systray icon --> Hidewindow(0,1)
Bei erneutem Click --> Hidewindow(0,0)
So erscheint es aber leider hinter den aktuellen Fenstern wieder.
Und ich bin mir nicht sicher, ob das Hiden eines Windows dem Minimieren entspricht oder zu viel Recourcen braucht.
PB 5.62 on Win10
- 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
Minimieren bedeutet immer, das es in der Taskbar zu sehen ist. Ein Fenster
im Systray ist also meist versteckt!
bringt Dein Fenster mit etwas glück wieder nach vorne 
im Systray ist also meist versteckt!
Code: Alles auswählen
SetForegroundWindow_(WindowID(0))

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Danke!
Das heißt also, verstecken ist OK in diesem Fall?
Ich hab jetzt auch selbst ne Lösung gefunden:
Das funktioniert, scheint mir aber nicht sehr elegant. 
Das heißt also, verstecken ist OK in diesem Fall?
Ich hab jetzt auch selbst ne Lösung gefunden:
Code: Alles auswählen
StickyWindow(0,1)
StickyWindow(0,0)

PB 5.62 on Win10
- 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
Was anderes kenne ich nichtPhil hat geschrieben:Das heißt also, verstecken ist OK in diesem Fall?

Phil hat geschrieben: Ich hab jetzt auch selbst ne Lösung gefunden:Das funktioniert, scheint mir aber nicht sehr elegant.Code: Alles auswählen
StickyWindow(0,1) StickyWindow(0,0)
Das laß mal lieber sein, ist ja nicht was Du erreichen willst. Du willst nicht
das Fenster sein, das ständig über den Anderen erhaben ist, sondern Du
möchtest das Fenster mit dem Fokus sein, nutze lieber obige API

(SetForGroundWindow_)
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Mit SetForegroundWindow_() alleine wirst du nicht glücklich werden.
PB holt das Fenster Minimiert zurück (das hat mich auch schon Nerven gekostet), du musst also noch das hier hinzufügen:
PB holt das Fenster Minimiert zurück (das hat mich auch schon Nerven gekostet), du musst also noch das hier hinzufügen:
Code: Alles auswählen
SetWindowState(#Window, #PB_Window_Normal)
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
-
- Beiträge: 167
- Registriert: 29.12.2005 09:58
- Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)
Falls das Fenster ein Maximieren-Gadget hat sollte der Fensterstatus (Normal oder Maximiert) immer zwischengespeichert werden, damit dieser auch genauso wiederhergestellt werden kann. Denn es wäre für den Benutzer ärgerlich, wenn er ein maximiertes Fenster minimiert, und beim Wiederherstellen wäre es dann plötzlich nicht mehr maximiert, sondern hätte die Standardgröße.
- 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
Man kann sich den Aufwand aber sparen. Einfach das Event im Callback
abfangen und das minimieren garnicht ausführen
Braucht man den alten Zustand nicht speichern, nur Fenster verstecken oder
Anzeigen. Ist immer richtig.
abfangen und das minimieren garnicht ausführen

Braucht man den alten Zustand nicht speichern, nur Fenster verstecken oder
Anzeigen. Ist immer richtig.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Hier mal ein Beispielcode:
Wenns also für Windows ist, sollte dies am einfachsten sein.
Bei grösseren Anwendungen erspart man sich so auch die diversen
#WM_SIZE und #WM_MOVE, die sonst noch ackern würden
Code: Alles auswählen
#frmMain = 0
#SysTrayIcon = 0
Procedure Win_CB(hWnd, uMsg, wParam, lParam)
Protected result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_SYSCOMMAND
Select wParam
Case #SC_MINIMIZE
HideWindow(#frmMain, #True)
AddSysTrayIcon(#SysTrayIcon, WindowID(#frmMain), ImageID(LoadImage(#PB_Any, #PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico")))
SysTrayIconToolTip(#SysTrayIcon, GetWindowTitle(#frmMain))
result = 0
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
Define WinFlags = #PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget
OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 640, 480, "void", WinFlags)
SetWindowCallback(@Win_CB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_LeftClick
HideWindow(#frmMain, #False)
RemoveSysTrayIcon(#SysTrayIcon)
EndSelect
EndSelect
ForEver
Bei grösseren Anwendungen erspart man sich so auch die diversen
#WM_SIZE und #WM_MOVE, die sonst noch ackern würden

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
