Connecter/déconnecter plusieurs lecteurs réseaux

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Connecter/déconnecter plusieurs lecteurs réseaux

#1

Message par YannYann »

Bonjour,
Gros débutant qui souhaite effectuer un tout 1er script « simpliste » mais qui Ôoooh combien me ferai gagner du temps. Cela me permettra également de mettre un pied à l’étrier concernant AutoIt...
Une fenêtre GUI sous Koda est créée (ou je renseigne utilisateur + mdp avec en plus 2 boutons). En cliquant sur le bouton "connecter" de cette GUI, l’action sera de connecter 4 lecteurs réseau (visibles dans l’explorateur de fichiers de Windows) puis en cliquant sur un autre bouton cela aura pour action de déconnecter ces 4 lecteurs réseaux.
Pouvez-vous m'apporter vos lumières pour ce 1er script ? Ou au moins me donner des pistes car je me perds un peu.
Je vous en serais tellement reconnaissant.
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 444, 204, 701, 553)
$text = GUICtrlCreateLabel("CONNECTER LECTEURS RÉSEAUX - VEEAM", 4, 8, 422, 34)
GUICtrlSetFont(-1, 16, 800, 4, "Nirmala UI")
GUICtrlSetCursor (-1, 2)
$Button1 = GUICtrlCreateButton("CONNECTER", 88, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x00FF00)
$Button2 = GUICtrlCreateButton("DECONNECTER", 242, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFF0000)
$Input1 = GUICtrlCreateInput("Nom d'utilisateur", 128, 60, 193, 28)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("Mot de passe", 128, 96, 193, 28, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
      MouseClick = $Button1
                DriveMapAdd("Z:" ,0, "\\serveur1\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
      DriveMapAdd("Y:" ,0, "\\serveur2\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
      DriveMapAdd("X:" ,0, "\\serveu3\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
         
      MouseClick = $Button2
      DriveMapDel("Z:")
      DriveMapDel("Y:")
      DriveMapDel("X:")
           
        Case $GUI_EVENT_CLOSE
            Exit
   EndSwitch
WEnd
Je vous remercie par avance,
Cordialement,
YannYann
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#2

Message par Tlem »

Bonsoir YannYann.
Si vous regardez l'aide de la commande Switch (cliquez sur le mot), la structure de celle-ce doit être :

Code : Tout sélectionner

Switch <expression>
    Case <valeur> [To <valeur>] [,<valeur> [To <valeur>] ...]
        instruction1
        ...
    [Case <valeur> [To <valeur>] [,<valeur> [To <valeur>] ...]
        instruction2
        ...]
    [Case Else
        instructionN
        ...]
EndSwitch
Mais vous, vous faites :

Code : Tout sélectionner

Switch <expression>
    MouseClick = <valeur>
        instruction1
        ...
    MouseClick = <valeur>
        instruction2
        ...]
    Case $GUI_EVENT_CLOSE
        Exit
            
EndSwitch
Du coup ça ne peux pas fonctionner ...

Essayez plutôt :

Code : Tout sélectionner

Switch $nMsg
    Case $Button1
         DriveMapAdd("Z:" ,0, "\\serveur1\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
         DriveMapAdd("Y:" ,0, "\\serveur2\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
         DriveMapAdd("X:" ,0, "\\serveu3\sauvegarde"), $DMA_DEFAULT, "NomDomaine\$Input1", "$Input2")
                
    Case $Button2
        DriveMapDel("Z:")
        DriveMapDel("Y:")
        DriveMapDel("X:")
        
    Case Else
        Exit
EndSwitch
PS: Même si cela vous parait compliqué, je vous conseillerais de stocker les chemins réseau et les lettres associées dans un fichier .ini. Cela vous évitera de devoir recompiler le script si le nom des partages change. ^^
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é".
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#3

Message par YannYann »

Bonjour Tlem,
Merci pour votre réponse.
J'effectuerai les modifs demain et j'irai voir aussi la commande switch en détail...
Bonne journée.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#4

Message par walkson »

Bonjour,
Une petite rectif. C'est vrai qu'il y a beaucoup d'erreurs comme "\\serveur1\sauvegarde") avec un ")" en trop :mrgreen:
     Case $Button1
         Local $poste = GUICtrlRead($Input1)
         Local $MP = GUICtrlRead($Input2)
                DriveMapAdd("Z:", "\\serveur1\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $poste, $MP) ;DriveMapAdd ( "device", "remote share" [, flags = 0 [, "user" [, "password"]]] )
                If @error Then MsgBox(16,"Error", "Erreur: " & @error); voir l'aide pour connaitre l'erreur, utile à chaque connection
                ;etc.............................
Il faut lire les inputs pour connaitre leurs valeurs
"$Input" est considéré comme du texte. $Input est considéré comme une variable ( valeur ID du control)
J'ai rajouté une gestion d'erreur bien pratique en cas de problème
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#5

Message par Tlem »

walson a écrit : C'est vrai qu'il y a beaucoup d'erreurs
Effectivement, je ne m'étais pas penché sur les variables et le reste. ^^
C'est juste la structure de Switch qui m'avait légèrement choqué.
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é".
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#6

Message par YannYann »

Bonjour walkson,
Cette précision, et pas des moindre, tombe à pic ! Là ou je me mets "dedans" à été un mix avec les exemples de l'aide du DriveMapAdd...

Là ou j'en suis actuellement (depuis votre rectification)
1) les différents mappages s'effectuent maintenant, correctement.
Concernant les Inputs, mon erreur je suppose à été par pur méconnaissance, de penser que le $input1 était une variable définie.
#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 444, 204, 701, 553)
$text = GUICtrlCreateLabel("CONNECTER LECTEURS RÉSEAUX - VEEAM", 4, 8, 422, 34)
GUICtrlSetFont(-1, 16, 800, 4, "Nirmala UI")
GUICtrlSetCursor (-1, 2)
$Button1 = GUICtrlCreateButton("CONNECTER", 88, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x00FF00)
$Button2 = GUICtrlCreateButton("DECONNECTER", 242, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFF0000)
$Input1 = GUICtrlCreateInput("Nom d'utilisateur", 128, 60, 193, 28) ; MON ERREUR => $Input non défini en fait, c'est juste la partie graphique  
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("Mot de passe", 128, 96, 193, 28, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
La solution est (merci beaucoup!) l'utilisation de Local pour définir la variable "$USER" se rapportant à "$Input1".
 Local $USER = GUICtrlRead($Input1)
Maintenant je comprends mieux pourquoi
DriveMapAdd ("Z:", "\\serveur\sauvegarde", $DMA_DEFAULT, "NomDomaine\Input1", "Input2") ; =>ERREUR
DriveMapAdd("Z:", "\\serveur\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $USER, $MP) ; SOLUTION !
Un grand merci donc pour cette contribution.

YannYann
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#7

Message par YannYann »

Tlem a écrit : jeu. 31 janv. 2019 14:47 Effectivement, je ne m'étais pas penché sur les variables et le reste. ^^
C'est juste la structure de Switch qui m'avait légèrement choqué.
Tlem,
C'est au pied du mur qu'on voit mieux le mur, je vais me familiariser avec "Switch" , "Local" , la déclaration des variables et continuer à corriger des soucis ainsi qu'approfondir le fonctionnement de "Case Else"...
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#8

Message par walkson »

$Input1 = GUICtrlCreateInput("Nom d'utilisateur", 128, 60, 193, 28) ; MON ERREUR => $Input non défini en fait, c'est juste la partie graphique
J'ai pas tout compris !
$Input1 = GUICtrlCreateInput("Nom d'utilisateur", 128, 60, 193, 28) quand vous créez un control celui-ci renvoie un ID, c'est à dire un nombre qui varie selon la construction du GUI. Il peut être 6 ou 22 etc... enregistré dans la variable $input1 dans le cas présent
Dans un code, vous construisez un GUI avec ses contrôles. Vous le faites apparaitre avec GUISetState(@SW_SHOW).
Pour maintenir le GUI en vie, il faut une boucle infinie (qui fait tourner le code) avec While 1
Dans cette boucle, vous écoutez les messages de Windows avec $nMsg = GUIGetMsg(). $nMsg étant l'ID du controle cliqué si clic il y a, sinon $nMsg = 0 .
Pour retrouver le controle cliqué, on utilise Switch que je traduirais "glisser vers" par rapport à "Select" une autre méthode. à travers les Case exemple Case $Button1 on repère le control cliqué et on envoie une tache, ex: DriveMapAdd()
local est la portée d'une variable, exemple: les normands parlent aux normands. Sinon, il y a Global les normands parlent à la France si je me fais comprendre :mrgreen: . On déclare les variables selon la construction du code mais Autoit n'est pas trop "chinois".
Dans certains cas, les déclarations sont obligatoires comme quand on utilise cette option
Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration
ou quand on crée un array (tableau)
#include <Array.au3>

Local $monArray[10][2] ;tableau de 10 lignes et 2 colonnes

For $i = 0 To 9 ;on commence à 0 pour les lignes ou les colonnes
   $monArray[$i][0] = $i
   $monArray[$i][1] = $i * 2
Next
_ArrayDisplay($monArray, "Mon Array")
ou quand une variable est utilisée dans une fonction
Global $nombre
$nombre = InputBox("nombre", "entrez un chiffre",4)
MaFonction()

Func MaFonction()
   If $nombre = 4 Then
      MsgBox(64,"Réponse","le nombre est " & $nombre)
   Else
      MsgBox(48,"Réponse","le nombre est " & $nombre)
   EndIf
EndFunc
etc...
En espérant avoir été compréhensible :D
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#9

Message par YannYann »

Bonjour walkson,
Un grand merci pour cet éclaircissement !
YannYann
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 janv. 2019 11:20
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#10

Message par YannYann »

Bonjour Tlem, walkson,

Je me permet de vous solliciter afin de me dire si ce "script" est propre. Pour le moment il fonctionne très bien et c'est un réel gain de temps (grâce à vous deux) et je souhaiterai m'assurer que cette base soit sûre avant de la complexifier (ajout de 4 boutons radio se rapportant aux 4 lecteurs réseaux à connecter, tous sélectionner par défaut, ce qui me permettrai d'avoir le choix d'en désélectionner un ou deux car actuellement ils se montent les 4 en même temps).
Je vous propose de m'identifier les erreurs afin que je me creuse la tête pour les surmonter.
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 434, 204, 496, 408)
$text = GUICtrlCreateLabel("CONNECTER LECTEURS RÉSEAUX - v1.2", 12, 8, 392, 34)
GUICtrlSetFont(-1, 16, 800, 4, "Nirmala UI")
GUICtrlSetCursor (-1, 2)
$Button1 = GUICtrlCreateButton("CONNECTER", 32, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x00FF00)
$Button2 = GUICtrlCreateButton("DECONNECTER", 170, 139, 105, 41, $WS_GROUP)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFF0000)
$Input1 = GUICtrlCreateInput("Nom d'utilisateur", 128, 60, 193, 28)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("Mot de passe", 128, 96, 193, 28, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("QUIT", 304, 139, 105, 41, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1 ;Bloucle infinie pour maintenir le GUI en vie =fait tourner le code
    $nMsg = GUIGetMsg() ; écouter les messages de Windows. $nMsg est l'ID du controle cliqué si clic il y a si non alors $nMsg = 0
   Switch $nMsg ; ce traduit par "glisser vers" par rapport a

      Case $Button1
         Local $USER = GUICtrlRead($Input1)
         Local $MP = GUICtrlRead($Input2)
                DriveMapAdd("Z:", "\\serveur1\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $USER, $MP) ;DriveMapAdd ( "device", "remote share" [, flags = 0 [, "user" [, "password"]]] )
                DriveMapAdd("Y:", "\\serveur2\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $USER, $MP)
            DriveMapAdd("X:", "\\serveur3\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $USER, $MP)
            DriveMapAdd("W:", "\\serveur4\sauvegarde", $DMA_DEFAULT, "NomDomaine\" & $USER, $MP)

            If @error Then MsgBox(16,"Error", "Erreur: " & @error); voir l'aide pour connaitre l'erreur, utile à chaque connection
                ;etc.............................

      Case $Button2
            DriveMapDel("Z:")
            DriveMapDel("Y:")
            DriveMapDel("X:")
            DriveMapDel("W:")

      Case $Button3
            ExitLoop

   EndSwitch
WEnd
En vous remerciant par avance.
YannYann
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Connecter/déconnecter plusieurs lecteurs réseaux

#11

Message par walkson »

Bonjour,
YannYann a écrit : ven. 08 févr. 2019 16:12 Pour le moment il fonctionne très bien
c'est qu'il n'y a pas d'erreurs :mrgreen:
Plus sérieusement, je n'ai pas vu d'erreurs sauf pour GUICtrlCreateButton("CONNECTER", 32, 139, 105, 41, $WS_GROUP) et les autres button où $WS_GROUP est totalement inutile ici. Sinon, rien à signaler
[Edit] à si, il y a une chose qui ne va pas If @error Then MsgBox(16,"Error", "Erreur: " & @error) est à mettre à chaque DriveMapAdd() car cela permet de connaitre le problème de cette connection.
@error =
1 = Erreur Indéfinie/Autre. @extended est défini avec le code de retour de l'API Windows
2 = L'accès au partage distant a été refusé
3 = Le périphérique est déjà assigné
4 = Nom de périphérique invalide
5 = Partage distant invalide
6 = Mot de passe invalide
Voir l'aide (F1)
Si vous voulez avoir le détail de l'erreur, collez cette fonction à la fin du code
Func _Erreur($error)
   Local $text
Switch $error
   Case 1
      $text = "Erreur Indéfinie/Autre"
   Case 2
      $text = "L'accès au partage distant a été refusé"
   Case 3
      $text = "Le périphérique est déjà assigné"
   Case 4
      $text = "Nom de périphérique invalide"
   Case 5
      $text = "Partage distant invalide"
   Case 6
      $text = "Mot de passe invalide"
EndSwitch
MsgBox(16,$error,$text)
EndFunc
et en dessous de chaque DriveMapAdd() à la place de "If @error Then MsgBox(16,"Error", "Erreur: " & @error)" mettre
If @error Then _Erreur(@error) pour lancer la fonction et connaitre le détail de l'erreur
[\Edit]
Bon courage pour la suite :D
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre