Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Backup Hero (https://www.delphipraxis.net/189719-backup-hero.html)

FarAndBeyond 13. Jul 2016 15:59

AW: Backup Hero
 
Zitat:

Ein Mutex oder eine Semaphore ist da aber ehrlichgesagt performanter, einfacher UND zuverlässiger als deine Fenstersuche.
Na ich wette das stimmt... hab' ich halt nur noch nie benutzt.. :-)
Dafür gibt es die Beiden ja schließlich...

dGeek 13. Jul 2016 17:00

AW: Backup Hero
 
Ich mache es schon seit Jahren so - zum Beispiel in der DPR-Datei des Projekts:

Delphi-Quellcode:
var
  hExistingInstance: THandle;
  aHandle: THandle;
 
const
 sUniqueMutexID: String = 'irgendeineuniquemutexid';
 
begin
 // Prüfen, ob das Fenster existiert. Wenn ja, kann man ja bei ".............." mit SendMessage Nachrichten an das Fenster senden o.ä.
 hExistingInstance := FindWindow('TMeinProgrammOderSo', nil);
 
 // Fenster scheint zu existieren...
 if hExistingInstance <> 0 then
  begin
   // ..............
   
   Halt(1);
  end;
 
 // Wenn das Fenster nicht existiert, nur dann einen Mutex erstellen
 aHandle := CreateMutex(nil, False, PWideChar(sUniqueMutexID));

 // Und wenn auch das schief gehen sollte.... abbrechen
 if GetLastError = ERROR_ALREADY_EXISTS then
  begin
   CloseHandle(aHandle);
   Halt(1);
  end;
end;
Man wird mich für diesen Code köpfen. Aber er funktioniert seit Jahren auf den unterschiedlichsten System vollkommen einwandfrei.

FarAndBeyond 13. Jul 2016 18:21

AW: Backup Hero
 
Zitat:

Ich mache es schon seit Jahren so...
Muß ich auch mal ausprobieren...
Aber "FindWindow" findet doch nur Fenster, die sichtbar sind oder ???
Ist schon 'ne Weile her als ich das zum letzten Mal benutzt habe.

dGeek 13. Jul 2016 18:26

AW: Backup Hero
 
Zitat:

Zitat von FarAndBeyond (Beitrag 1342607)
Aber "FindWindow" findet doch nur Fenster, die sichtbar sind oder ???

Ne. Es findet auch Fenster, die minimiert sind oder auch im Systembereich minimiert sind.
Das FindWindow mache ich auch nur, damit ich Kommandos ans Programm schicken kann. Würde man das FindWindow weglassen, würde notfalls CreateMutex greifen. Dort kann man ja auch reagieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz