Hi, Leute
Ich überprüfe per AppRunning, ob mein Programm bereits läuft. Möche aber keine Fehlermeldungen (nicht so wie Windows) ausgeben, sondern das Programm, dass bereits läuft aus dem Hintergrund wiederherstellen (d.h. das Fenster ist danach wieder im Vordergrund und damit benutzbar). Wie geht das?
minimiertes Fenster wiederherstellen?
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
minimiertes Fenster wiederherstellen?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- 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
Code: Alles auswählen
Procedure MyRestore(FensterName.s)
Protected hWnd.l = FindWindow_(0, @FensterName)
Protected result = CreateMutex_(0, 0, @FensterName)
If GetLastError_() = #ERROR_ALREADY_EXISTS
ReleaseMutex_(result)
CloseHandle_(result)
If hWnd
ShowWindow_(hWnd, #SW_SHOWNORMAL)
SetForegroundWindow_(hWnd)
EndIf
End
EndIf
ProcedureReturn result
EndProcedure
Define.l Mutex = MyRestore("MeinEinmaligerFensterTitel")
; der restliche Code
; ...
; am ende den Mutex entfernen
CloseHandle_(Mutex)
Ungetestet, AppRunning nicht benötigt
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.

- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
ok. danke. hat funktioniert.
Zuletzt geändert von PureBasic4.0 am 13.04.2007 20:07, insgesamt 1-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Kann man nicht einfach dem Programm nen string übergeben, welcher dann die maximieren funkion auslöst?
das wäre im endeffekt noch komplizierter.
- du müsstest im programm einen globalen speicher reservieren, aber vorher prüfen, ob er schon von einer vorherigen instanz reserviert wurde.
- in der bestehenden instanz müsstest du permanent prüfen, ob in den globalen speicher was geschrieben wurde, also eine weitere instanz aufgerufen wurde, damit du die aktuelle wiederherstellen kannst.
also, der lösungsansatz
> einfach dem Programm nen string übergeben, welcher dann die maximieren funkion auslöst
erfüllt völlig den anspruch
> geht's noch ein bisschen komplizierter?
btw: denk auch dran, dass maximieren der falsche vorgang ist.
du brauchst "wiederherstellen", das prog soll ja nur maximiert werden, wenn es vorher maximiert war.
wenn es vorher auf halb-desktop resized war, willst du es ja in der größe wiederhaben.
also, SetForeground + Show ist schon korrekt. Activate geht damit automatisch einher.
das wäre im endeffekt noch komplizierter.
- du müsstest im programm einen globalen speicher reservieren, aber vorher prüfen, ob er schon von einer vorherigen instanz reserviert wurde.
- in der bestehenden instanz müsstest du permanent prüfen, ob in den globalen speicher was geschrieben wurde, also eine weitere instanz aufgerufen wurde, damit du die aktuelle wiederherstellen kannst.
also, der lösungsansatz
> einfach dem Programm nen string übergeben, welcher dann die maximieren funkion auslöst
erfüllt völlig den anspruch
> geht's noch ein bisschen komplizierter?
btw: denk auch dran, dass maximieren der falsche vorgang ist.
du brauchst "wiederherstellen", das prog soll ja nur maximiert werden, wenn es vorher maximiert war.
wenn es vorher auf halb-desktop resized war, willst du es ja in der größe wiederhaben.
also, SetForeground + Show ist schon korrekt. Activate geht damit automatisch einher.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
> gehts auch noch ein bisschen komplizierter?
Du könntest dir TSsi's Code ruhig mal anschauen, er benutzt eine gute Technik!
Du könntest allerdings auch selber drauf kommen, dass dein Programm die WindowID in einer Datei speichert. Wenn das Programm zum 2. Mal gestartet wird, liest es den Wert aus. So muss man nicht erst die WindowID der 1. Instanz ermitteln, sondern kann direkt einen Befehl hinsenden.
Dies ist eine sehr einfach gestrickte Lösung. Gibt sicher besseres.
//Edit: Oh hi Kaeru!
Du könntest dir TSsi's Code ruhig mal anschauen, er benutzt eine gute Technik!
Du könntest allerdings auch selber drauf kommen, dass dein Programm die WindowID in einer Datei speichert. Wenn das Programm zum 2. Mal gestartet wird, liest es den Wert aus. So muss man nicht erst die WindowID der 1. Instanz ermitteln, sondern kann direkt einen Befehl hinsenden.
Dies ist eine sehr einfach gestrickte Lösung. Gibt sicher besseres.
//Edit: Oh hi Kaeru!
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1