Delphi-Quellcode:
initialization
AppHandle := CreateFile(PChar(SYS.TmpDir+ MakeFileNameFromTimeReadableCompact(GetLocalComputerName+'_'+GetLocalUserName +'_'+ ExtractFileName(Application.ExeName)+'_','','APP',true)), GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE or FILE_ATTRIBUTE_TEMPORARY, 0);
if AppHandle = INVALID_HANDLE_VALUE then
AppHandle := 0;
Auch dieser Monster_Unglaublich_Lange_Mit_Informationen_Gespic kte_Dateiname ist nicht nötig, denn man kann diese Informationen einfach in die Datei schreiben. Für den Dateinamen selber nimmt man einfach eine
GUID.
Um diese Datei dann auch von anderer Stelle öffnen zu können muss die Datei so angelegt werden:
CreateFile( PChar( FFileName ), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_DELETE, nil, CREATE_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE, 0 );
Alle anderen greifen auf die Datei dann so zu:
CreateFile( PChar( FFileName ), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0 );
Um also nun alle laufenden Instanzen des Programms zu ermitteln öffnet man einfach nacheinander diese Dateien, liest den Inhalt heraus und gibt das
Handle wieder frei.
Um in diese Dateien etwas schreiben oder heraus lesen zu können gibt es
THandleStream.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)