[R] _Singleton ()
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] _Singleton ()
Bonjour,
Pourrirez-vous éclairer ma lanterne sur cette fonction ?
La doc nous dit : String to identify the occurrence of the script
Mais encore ? Est ce le nom du script ? Si oui, une fois compilé et que je change le nom de l'exe ?
Merci.
Pourrirez-vous éclairer ma lanterne sur cette fonction ?
La doc nous dit : String to identify the occurrence of the script
Mais encore ? Est ce le nom du script ? Si oui, une fois compilé et que je change le nom de l'exe ?
Merci.
Modifié en dernier par DimVar le sam. 29 déc. 2018 11:02, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] _Singleton ()
Essaye
StringTrimRight(@ScriptName, 4)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] _Singleton ()
Ben ca va me donner le nom du fichier *.au3, et ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: [..] _Singleton ()
Je crois que monsieur le chat a lu trop vite ta question.
$sOccurrenceName est une chaîne quelconque, ce n'est pas forcément le nom du script.
Je compile le code suivant en A.exe et en B.exe.
Premier cas. Je n'utilise que A.exe.
$sOccurrenceName est une chaîne quelconque, ce n'est pas forcément le nom du script.
Je compile le code suivant en A.exe et en B.exe.
Code : Tout sélectionner
_Singleton(@ScriptName)
MsgBox($MB_SYSTEMMODAL, "", "test")
- J'exécute A.exe. Le message "test" s'affiche. Je ne ferme pas le script. À ce stade, il y a une instance de A.exe (avec $sOccurrenceName = "A.exe").
- J'exécute à nouveau A.exe. Il y a donc deux instances de A.exe (avec $sOccurrenceName = "A.exe"). _Singleton détecte qu'il y a déjà une instance du script (avec $sOccurrenceName = "A.exe"). Le script s'arrête. Le message "test" NE s'affiche PAS.
- J'exécute A.exe. Le message "test" s'affiche. Je ne ferme pas le script. À ce stade, il y a une instance de A.exe (avec $sOccurrenceName = "A.exe"). Jusque là, aucun changement.
- J'exécute B.exe. Il y a donc une instance de A.exe (avec $sOccurrenceName = "A.exe") et une instance de B.exe (avec $sOccurrenceName = "B.exe"). _Singleton voit qu'il n'y a qu'une seule instance de B.exe. Le script NE s'arrête PAS. Le message "test" s'affiche.
_Singleton("test", 1)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: [..] _Singleton ()
Merci Orax pour les details.
J'ai du mal à appréhender "chaine constante", qu'entends tu par là ?
J'ai du mal à appréhender "chaine constante", qu'entends tu par là ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: [..] _Singleton ()
Je ne sais pas si le terme "chaîne constante" est bien choisi, mais il n'y a rien de compliqué. Je voulais simplement dire une chaîne de caractères qui ne varie pas d'une exécution du script à l'autre. La valeur de @ScriptName est susceptible de changer et elle n'est pas connue avant l'exécution du script. Alors que la chaîne "blabla...", par exemple, ne changera pas.
Code : Tout sélectionner
$a = "blabla..." ; chaîne de caractères "constante"
$b = @AutoItPID ; cette valeur change à chaque exécution du script
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: [..] _Singleton ()
Ok, c'est plus clair, merci.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [R] _Singleton ()
Bonjour.
Si vous souhaitez éviter certains problèmes concernant le fait que le script peut avoir été renommé voir ses ressources modifiées, il serait sans doute judicieux d'utiliser une structure de ce type :
Si le nom du script importe peut, comme l'a déjà dit Orax, il vous suffit d'utiliser la variable
Si vous souhaitez éviter certains problèmes concernant le fait que le script peut avoir été renommé voir ses ressources modifiées, il serait sans doute judicieux d'utiliser une structure de ce type :
Code : Tout sélectionner
#include <Misc.au3>
; Nom utilisé pour le script : "Script Test"
Global $ScriptName = "Script Test"
Global $Error = 0
; On vérifie si le script à bien le bon nom.
If @Compiled Then
If @ScriptName <> $ScriptName & ".exe" Then $Error = 1
Else
If @ScriptName <> $ScriptName & ".au3" Then $Error = 1
EndIf
If $Error = 1 Then
MsgBox(16, "Erreur", "Ce programme a été renommé ! Pour qu'il fonctionne correctement, veuillez remettre le nom d'origine : " & $ScriptName)
Exit
EndIf
; Test Singleton pour $ScriptName
If _Singleton($ScriptName, 1) = 0 Then
MsgBox(16, "Attention", @ScriptName & " est déjà lancé et en cours de fonctionnement ! La fonction _Singleton() n’autorise qu'une seul instance du script.")
Exit
EndIf
MsgBox(32, @ScriptName, "Gardez cette fenêtre ouverte et lancez le script une seconde fois pour voir le résultat de la fonction _Singleton()")
Si le nom du script importe peut, comme l'a déjà dit Orax, il vous suffit d'utiliser la variable
@ScriptName
.
Code : Tout sélectionner
#include <Misc.au3>
; Test Singleton pour @ScriptName
If _Singleton(@ScriptName, 1) = 0 Then
MsgBox(16, "Attention", @ScriptName & " est déjà lancé et en cours de fonctionnement ! La fonction _Singleton() n’autorise qu'une seul instance du script.")
Exit
EndIf
MsgBox(32, @ScriptName, "Gardez cette fenêtre ouverte et lancez le script une seconde fois pour voir le résultat de la fonction _Singleton()")
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".