*-- L'application est elle utilisée par un autre utilisateur ? *-- IsAppRunning. 12/2003 MILCENT bernhart *-- D'après une idée originale du NG fr + Franck 7/12/2003. *-- This est un container application représenté par la variable publique goapp. *-- THIS.cdefaultdirectory = LocalIsation du DBC et des tables. *-- THIS.cfcreateip_log = Fichier texte nommé par l 'IP du poste lancant l'application + ext .log *-- THIS.nfcreateip_log = Affecte un numéro de descripteur de fichier ( THIS.cfcreateip_log ) *-- à une variable mémoire que vous pouvez utiliser pour accéder au fichier avec *-- d'autres fonctions fichier de bas niveau. THIS.nfcreateip_log = FCREATE( THIS.cdefaultdirectory + THIS.cfcreateip_log ) LOCAL cFile,; cViP,; oIPSocket,; lnselect,; lnretval,; gnFichierErreur lnselect = SELECT( 0 ) *-- Récupérer l'adresse IP de la machine. *-- CreateObject( "MSWinsock.Winsock.1" ) && Impossible car erreur 1426 licence non autorisée. *-- IL faut placer l'activex sur un container . oIPSocket = CREATEOBJECT("Winsock") *oIPSocket = CREATEOBJECT("MSWinsock.Winsock") lnretval = .T. IF VARTYPE( oIPSocket ) = 'O' cViP = oIPSocket.olecontrol1.OBJECT.localip ELSE cViP = "999999999999" =Errormsg("Pas possible de trouver l'IP de la machine ...") ENDIF *-- Fichier user.dbf ( Table ind.) comprenant l'IP de toutes les machines suceptibles *-- d'avoir accès à l'application. cFile = ADDBS( ALLTRIM( THIS.cdefaultdirectory ) ) + 'cUser.dbf' IF !FILE( THIS.cdefaultdirectory + 'cUser.dbf' ) CREATE TABLE ( cFile ) FREE ( cIP C(20) , dDebut T(12) , dFin T(8) ) INDEX ON cIP TAG cViP ELSE THIS.USE( 'cUser.dbf' , THIS.cdefaultdirectory , .T. ) ENDIF IF !SEEK( cViP , "cUser" , "cViP" ) INSERT INTO cUser ( cIP ) VALUES ( cViP ) ENDIF *DO ZZ REPLACE dDebut WITH DATETIME() IN cUser && petit auditrail. REPLACE dFin WITH { / / } IN cUser SELECT cUser *-- On passe en revue tous les postes utilisateurs avec leur IP. *-- Comme une routine vérifie au préalable si l'application n'est pas lancée *-- 2 fois du même poste , on a pas à vérifier si un poste a créé ce fichier. SCAN ALL cFile = ADDBS( ALLTRIM( THIS.cdefaultdirectory ) ) + ALLTRIM( cUser.cIP ) + '.log' *-- Le fichier XXX.XXX.XXX.XXX.log existe t'il ? ( les zéros sont cachés). *-- A noter que ce fichier est supprimé si la sortie s'est bien déroulée. *-- cela permet entr'autres de visualiser sur l'explorateur windows les *-- postes qui sont connectés sur les données. IF FILE( cFile ) *-- Un utilisateur est il connecté ? gnFichierErreur = FOPEN( cFile ) *-- FOPEN( ) renvoie la valeur –1 si le fichier ou le port ne peut pas être ouvert. IF gnFichierErreur = -1 lnretval = .F. WAIT WINDOW NOWAIT ; "Application en cours d'utilisation par un autre poste Ip = " + cUser.cIP EXIT ELSE =FCLOSE( gnFichierErreur ) && Bug 12/2003 ENDIF && gnFichierErreur = -1 ENDIF && FILE( cFile ) ENDSCAN THIS.cfcreateip_log = ALLTRIM( cViP ) + '.log' THIS.nfcreateip_log = FCREATE( THIS.cdefaultdirectory + THIS.cfcreateip_log ) SELECT ( lnselect ) RETURN lnretval