Ciao, da me quella funzione è nella unit "LazFileUtils".
Va bene. L'ho provato ed effettivamente mi da un solo valore, quello corrispondente al programma attivo, l'unico in quel momento.
Ma l'informazione restituita dall'istruzione
procedure TForm1.FormCreate
dataAvvio= "1697576556"
percorso di DomusRatio= "/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/DomusRatio/bin/"
riguarda lo stesso programma che ha richiamato FileAgeUTF8.
Non è però quello che serve a me. Io infatti cerco di capire se oltre a quello in esecuzione, esistono altri programmi attivi con lo stesso nome.
Io pensavo di potere ottenere un risultato simile per proteggermi da eventuali presenze di duplicati dello stesso programma attivo.
:-\
Usa i Mutex, inserisci la variabile come globale e il codice nella prima Create (della tua Form ad esempio):
var Mutex: THandle;
// Crea un oggetto sincronizzato unico nel sistema operativo (anche tra terminal server)
hMutex:=CreateMutex(Nil,False, 'Sonogiainesecuzione'); //crea il MUTEX per tutto il sistema operativo
// Verifica che l'oggetto non sia gia' 'owned' da qualche altro processo (istanza del programma),
// nel qual caso esce dal programma
if (WaitForSingleObject(hMutex,0) = wait_TimeOut) then
exitprocess(255);
Questo impedisce che ci siano più istanze del programma.
Ciao
FileAgeUtf8, ti da la data/ora di ultima modifica di un file.
Per fare quello che serve a te, oltre a quanto ti è già stato risposto, c'è questo:
https://wiki.freepascal.org/UniqueInstance
Credo che si trovi anche in Online Package Manager.
C'è sempre pidof, ma ho il problema di come andare a leggere la risposta del comando; penso infatti che dovrei trasferire tale risultato in un file.text da consultare.
La soluzione UniqueInstance potrebbe essere più semplice da gestire a programma, anche se bisogna aggiungere un nuovo componente.
Ho provato la funzione che miu hai suggerito, ma non riesco a farla funzionare. Sicuramente non ho capito come usarla. Ho cercato esempi in menrito, ma non ne ho trovati.
Ho costruiito le 2 prove, la prima senza argomenti, la seconda coi due argomenti spiegati nel documento:
var
swDoppio: Boolean = False;
. . .
1.a prova:
swDoppio:= InstanceRunning;
if swDoppio then
begin
Close;
end;
2.a prova:
InstanceRunning('/media/dirdati/dativari/contabfam/DomusRatio_bin/DomusRatio.Lazarus', swDoppio);
if swDoppio then
begin
Close;
end;
FileAgeUtf8, ti da la data/ora di ultima modifica di un file.
Per fare quello che serve a te, oltre a quanto ti è già stato risposto, c'è questo:
https://wiki.freepascal.org/UniqueInstance
Credo che si trovi anche in Online Package Manager.
C'è sempre pidof, ma ho il problema di come andare a leggere la risposta del comando; penso infatti che dovrei trasferire tale risultato in un file.text da consultare.
La soluzione UniqueInstance potrebbe essere più semplice da gestire a programma, anche se bisogna aggiungere un nuovo componente.
Ho provato la funzione che miu hai suggerito, ma non riesco a farla funzionare. Sicuramente non ho capito come usarla. Ho cercato esempi in menrito, ma non ne ho trovati.
Ho costruiito le 2 prove, la prima senza argomenti, la seconda coi due argomenti spiegati nel documento:
var
swDoppio: Boolean = False;
. . .
1.a prova:
swDoppio:= InstanceRunning;
if swDoppio then
begin
Close;
end;
2.a prova:
InstanceRunning('/media/dirdati/dativari/contabfam/DomusRatio_bin/DomusRatio.Lazarus', swDoppio);
if swDoppio then
begin
Close;
end;
Nella prima il contenuto di swDoppio NON cambia, la seconda va addirittura in errore