Newsgroup: it.comp.lang.delphi
Titolo: Domanda da FAQ

Come si fa per fare in modo che il programma
verifichi e segnali la sua apertura, in modo da
evitare che venga avviato più volte?
Grazie, ciao.

you wrote:

Da' uno sguardo all'API Windows CreateMutex. 
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

ti allego un tip non fatto  da me che dovrebbe fare al caso tuo
Lawrence Oluyede
rhy...@tiscalinet.it
"Per cambiare, 
per diventare un' altra cosa
dobbiamo prima sapere cosa siamo"
Bruce Lee


 Da' uno sguardo all'API Windows CreateMutex.
Gli oggetti Mutex servono per la sincronizzazione dei threads, non è cio'
che cercavo.
A me interesserebbe sapere un metodo per scoprire se una certa finestra (o
programma), tramite handle o nome, sia o non sia in esecuzione. L'ideale
sarebbe poter conoscere l'elenco di tutti i programmi attivi in un
determinato istante, e verificare se ci sia già il mio programma.
Ciao :-)

you wrote:

Ok, visto che non mi credi :
Da MSDN April 1999 :
------------------
HOWTO: Identify a Previous Instance of an Application
Last reviewed: December 21, 1998
Article ID: Q106385 
--------------------------------------------------------------------------------
The information in this article applies to: 
Microsoft Win32 Software Development Kit (SDK) 
SUMMARY
The entry point of both 16-bit (Win16) and 32-bit (Win32) Windows
applications is documented as follows: 
   int WinMain( hInstance, hPrevInstance, lpszCmdLine, nCmdShow )
   HINSTANCE hInstance;        /* Handle of current instance  */
   HINSTANCE hPrevInstance;    /* Handle of previous instance */
   LPSTR lpszCmdLine;          /* Address of command line     */
   int nCmdShow;               /* Show state of window        */
However, under Win32, hPrevInstance is documented to always be NULL.
The reason is that each application runs in its own address space and
may have the same ID as another application. 
To determine whether another instance of the application is running,
use a named mutex. If opening the mutex fails, then there are no other
instances of the application running.


  // Controllo instanza unica
  CreateMutex(nil,True,'MyApp');
  if (GetLastError=ERROR_ALREADY_EXISTS) then
  begin
    MessageBeep(0);
    MessageDlg('Il programma č gią aperto.', mtInformation, [mbOk], 0);
    [..ecc..]
  end;
Ciao,
-=SIMO=-


FANTASTICO! E incredibilmente semplice!
Grazie, Andrea!
Per chi avesse lo stesso problema, è sufficiente aggiungere al primo evento
CreateForm della vostra applicazione il seguente codice, e il gioco è fatto:
  CreateMutex( nil, true,  'MutexName'+#0 );
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    ShowMessage('Attenzione: il programma è già attivo');
    Application.Terminate;
  end;
Ciao ciao :-))
--
(*****      MBSoftware       *****)
http://web.tiscalinet.it/mbsoftware

 ha scritto nel messaggio
news:s64vksct295o8k4jf...@4ax.com...


Scusami se mi dai l'email te lo mando..
Lawrence Oluyede
rhy...@tiscalinet.it
"Per cambiare, 
per diventare un' altra cosa
dobbiamo prima sapere cosa siamo"
Bruce Lee
