begin process at 2010 02 09 20:25:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBScript

 > 

Communication entre plusieurs scripts


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Communication entre plusieurs scripts

lundi 9 juin 2008 à 13:13:09 | Communication entre plusieurs scripts

Celestus

Voici le problème, et je ne trouve pas la réponse sur le net...

J'ai un script qui, à sa fermeture, a besoin d'envoyer un signal à un autre script pour que ce second script réagisse lorsque le premier se termine.

J'ai essayé avec ERRORLEVEL et WScript.quit 1 => Ca ne marche pas
J'ai essayé avec l'objet Err => Ca ne marche pas

J'ai essayé avec des prétendues variables globales
Public ma_variable => Ca ne marche pas
Public static ma_variable => Ca ne marche pas (erreur de syntaxe)
Public ma_variable static => Ca ne marche pas (erreur de syntaxe)

J'ai toujours la solution de créer un fichier bidon dans les tmp et de vérifier son existence, mais c'est bâtard comme solution.

Quelqu'un sait-il comment inscrire une variable en ram capable de perdurer dans que wscript.exe est actif, et même au-delà ?
lundi 9 juin 2008 à 14:41:49 | Re : Communication entre plusieurs scripts

us_30

Membre Club

Bonjour,

Je dirais, qu'il faut que le premier script, lance le second avant de quitter... c'est plus simple... en passant une variable dans l'appel d'une sub... Un truc comme : Sub machin(Variables() as string) ... A priori, dès tu quitte un script toutes ses variables sont détruites...

Amicalement,

Us.

lundi 9 juin 2008 à 16:24:47 | Re : Communication entre plusieurs scripts

Celestus

J'y ai pensé.

Le problème, c'est que le second script qui se lance est en fait le premier qui se lance selon runas.exe

Donc si je quitte comme ça, le second quittera aussi.

PS : La notation dim/sub/public/private variable [as machin]
n'admet pas [as machin] en VBS.
l'attribution du type de variable est automatique en VBS.
lundi 9 juin 2008 à 23:05:28 | Re : Communication entre plusieurs scripts

JMO

Membre Club


 Bonsoir,

Utilisez le registre pourrait être une solution, genre

WshShell.RegWrite "HKLM\SOFTWARE\" & strCompany & "\xx\yyyyy\"_
& "LastEmail",Date, "REG_SZ"

et

strMykey = WSHShell.RegRead("HKLM\SOFTWARE\" & strCompany & "\xx\yyyyy\")

Ceci permet de communiquer (top/flag).

jean-marc
lundi 9 juin 2008 à 23:18:52 | Re : Communication entre plusieurs scripts

Celestus

Pas con du tout ça...
Vraiment pas con du tout.

C'est même une idée tellement bonne qu'on va dire que c'est moi qui l'ai eueu OK ? ^^
mardi 10 juin 2008 à 12:25:50 | Re : Communication entre plusieurs scripts

Celestus

Réponse acceptée !
BUG DE WBScript :

En fait, la solution du registre ne fonctionne pas.

Pour une raison que j'ignore, wscript garde en mémoire les paramètres du 1er script ce qui empêche le second de fonctionner correctement : Tout doit être fait en double.

=> Le script écrit une clé dans la base des registres, puis le relance via runas
=> Le second script NE DETECTE PAS la clé, puis la réécrit, puis se relance via runas
=> Le troisième script DETECTE la clé, il NE L'EFFACE PAS puis continu
=> La prochaine fois, la clé sera encore là et runas ne se lancera pas

SEULE SOLUTION :

On écrit un fichier temporaire qui relancera le script via runas.exe
Ce fichier sera un nouveau fichier, donc les paramètres seront réinitialisés, et le fichier sera relancé correctement.

Code :
_____________________________________________________



  file_full_name = objet_shell.currentdirectory & "\runas launcher.vbs"

  If objet_systeme_de_fichier.FileExists(file_full_name)=TRUE Then                               ' Si le fichier existe déjà
    objet_systeme_de_fichier.DeleteFile file_full_name, TRUE                                     ' On le détruit

  Else                                                                                           ' S'il n'existe pas

    If version_NT>=5.1 And Nom_du_compte_administrateur<>"" And Mot_de_passe_du_compte_administrateur<>"" Then
'   Si >= XP (runas n'existe qu'à partir d'XP), Si un nom de compte et un mot de passe ont été écrit  (Pas de mot de passe vide)
'   If >= XP (runas exists only since XP)     , If a name of account and a password have been written (No empty password)

      Tableau=Split(Nom_du_compte_administrateur, " ")                                           ' Pas d'espace dans le nom du compte    No space in the name of account
      If UBound(Tableau)>=1 Then
        msgbox "Les espaces dans le nom du compte ne sont pas supportés." & vbCRLF _
        & "Ce script va donc s'arrêter.",vbcritical,"Espaces non supportés"
        Wscript.quit 0
      End If

      Set objet_fichier = objet_systeme_de_fichier.CreateTextFile(file_full_name,TRUE)           ' On le créé dans le même dossier
      Set objet_fichier = objet_systeme_de_fichier.GetFile(file_full_name)                       ' et on le met en fichier caché
      If objet_fichier.attributes xor 2 Then
        objet_fichier.attributes = objet_fichier.attributes + 2
      End If

      Set objet_fichier = objet_systeme_de_fichier.OpenTextFile(file_full_name,8,TRUE)           ' Ensuite on écrit dedans la séquence de lancement de runas.exe (On peut utiliser "" pour forcer à écrire ")
      objet_fichier.writeline "Set objet_shell = WScript.CreateObject(""WScript.Shell"")"
      objet_fichier.writeline "program_full_name = objet_shell.ExpandEnvironmentStrings(""%WinDir%"") & ""\system32\runas.exe"""
      objet_fichier.writeline "program_arguments = ""/noprofile /env /user:"" & objet_shell.ExpandEnvironmentStrings(""%USERDOMAIN%"") & ""\" _
      & Nom_du_compte_administrateur & """ & chr(32) & chr(34) & objet_shell.ExpandEnvironmentStrings(""%WinDir%"") & ""\system32\wscript.exe"" & "" \"" & chr(34) & """ _
      & WScript.ScriptFullName & """ & ""\"" & chr(34) & chr(34)"
      objet_fichier.writeline "objet_shell.Run program_full_name & chr(32) & program_arguments, 2, FALSE"                                                                                            ' On lance Runas.exe, en taille réduite au premier plan, sans attendre sa fermeture pour continuer
      objet_fichier.writeline "objet_shell.AppActivate program_full_name"                                                                                                                            ' On active la fenêtre comme si on cliquait dessus pour taper le mot de passe
      objet_fichier.writeline "WScript.Sleep 150"                                                                                                                                                    ' On attend 150 millisecondes
      objet_fichier.writeline "objet_shell.SendKeys" & chr(32) & chr(34) & Mot_de_passe_du_compte_administrateur & chr(34) & chr(32) & "& ""~"""                                                     ' On entre le mot de passe suivit du caractère de validation
      objet_fichier.close

      objet_shell.Run objet_shell.ExpandEnvironmentStrings("%WinDir%") _
      & "\system32\wscript.exe" & chr(32) & chr(34) & file_full_name & chr(34), 2, FALSE         ' Puis on lance le fichier temporaire
      wscript.quit 0                                                                             ' Et on quitte

    End If
  End If
_________________________________________________

[Applaudissements]


Cette discussion est classée dans : script, public, variable, marche, essayé


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec Variable Public dans module [ par jcharles ] J'ai déclaré dans mon module cette variable:Public fichier As Stringavec le debogueur fichier="c:\appli1\dico1.ini"jusque la pas de problemeQuand j'ou Script qui marche en VBS mais pas en HTM [ par SuperClic ] J' enregistre sous format HTML le script suivant:msgbox "a"set fso=createobject("Scripting.FileSystemObject")Set WshShell = WScript.Createobject("WScr perte de variable public en vb.net [ par novicevb ] J'utilise des variables publique pour les reprendre dans un autre foremulaire ert je je pers la valeur de cette variable et je la pers dans les autres perte de valeur public dans un module [ par novicevb ] je fais un module pour garder ma variable public d'un autre formulaire et je perd la valeur de la variable publique du formulaire que j'ai besoin, il Modifier une variable JavaScript avec VB [ par NeoEsteban ] Salut tout le mondeJ'utilise actuellement l'objet WebBrowser pour afficher une page avec un script JavaScript et j'aimerai, par l'intermédiaire de VB, session et frameset [ par azeryu ] Je rencontre des problemes avec mes sessions: je dois mettre "accepter tous les cookies" dans les propriétés d'explorer pour que la session marche dan Aide sur WshShell [ par Spr ] Salut, quelqu'un peut-il m'aider : Mon prog marche très bien sous XP, mais dès que je passe sous 98, mes commandes Wshshell ne marche plus 'erreur d'e getchunk comment ca marche??? [ par pcpunch ] ci dessous mon code pour faire un telechargement avec inet et une progresse bar.il marche si je donne manuellement la taille du fichier a telecharger, Passer une variable a un script PHP [ par Overcro ] Hello tous le monde ;o)Je cherche déséspérement un moyen d'échanger des données courtes (comme un mot,une phrase) entre mon prog VB et mon site qui hé If Form = Nothing Then, ca marche pas !!! [ par phtribaudeau ] Bonjour, voici une question technique : Je déclare une variable suivante : Dim F As FormEt je souhaite savoir plus loin dans mon code si cette va


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,513 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales