IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

[Projet Collaboratif (enfin si vous voulez ^^)] GUI KODA to powershell Windows Form


Sujet :

Scripts/Batch

  1. #1
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut [Projet Collaboratif (enfin si vous voulez ^^)] GUI KODA to powershell Windows Form
    Bonjour à tous,

    Je me permet de creer se post pour regrouper mes avancés sur un projet qui me tiens à cœur,
    je tiendrais ce post régulièrement à jour avec les dernière MàJ de mon script.

    Objectif :
    Utiliser du code généré par KODA
    (autoit)et le "transformer" en code Powershell/windows.form grace à ce script.

    si vous ne connaissez pas KODA : => http://www.autoitscript.com/forum/to...ner-koda-1730/

    Besoin Initial :
    Creer facilement des interfaces graphique pour scripts powershell.

    Quel admin n'a pas eu une fois l'envie de creer une petite interface graphique pour PS ?
    certes plusieurs solution s'offre rapidement à nous mais pas forcement des plus pratique :


    • VB : oui avec vb et du coups ses outils dédier on retrouve qq editeur de Forms WYSIWYG mais, je suis relativement allergique au VB...
    • Hta + Powershell : on peux tjs essayer de bidouiller avec les editeur WYSIWYG online pour générer des HTA mais bon, pas génial non plus.
    • AutoIT : jusque là c'est vers cette solution que je me tournais, KODA permet facilement la creation d'un GUI mais en revanche, l'echange de données entre script PS <> et autoit n'est pas tjs des plus évident et demande souvent des traitement de résultat, assez laborieux...
    • powershell + Windows Forms : là le résultat est là mais le travail de design est assez laborieux, les outils WYSIWYG sont tous payant (en tout cas ceux que j'ai trouvé comme powershell studio de SAPIEN.)


    Donc rien de gratuit et pratique...

    mon idée est donc d'attaquer du code que j'aurais généré avec KODA pour générer automatiquement mon interface Windows.form.

    exemple de code KODA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 156, 236, 192, 124)
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 32, 32, 75, 25)
    $Label1 = GUICtrlCreateLabel("Label1", 8, 72, 124, 153)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ce code générer en moins de 30 sec sur koda permet de créer une fenetre avec un champs texte, un bouton, et un label.

    voici mon script actuel (loin d'etre fini) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    function GUICreate ([string]$title , $width , $height , $left , $top) {
    # Créer la Form
    $script:Form1 = New-Object System.Windows.Forms.Form
    # Titre
    $script:Form1.Text = $title
    # Définit la taille
    $script:Form1.Size = New-Object System.Drawing.Size($width,$height)
    # Emplacement, si -1 -1 = centre sinon <<A FAIRE - emplacement fixe>>
    
    if (($left -eq -1) -and $top -eq -1) {
       $script:Form1.StartPosition = "centerscreen"
    
    }}
    
    function GUICtrlCreateButton( $label, $left, $top , $width , $height ) {
    $script:OKButton = New-Object System.Windows.Forms.Button
    $script:OKButton.Location = New-Object System.Drawing.Size($left,$top)
    $script:OKButton.Size = New-Object System.Drawing.Size($width,$height)
    $script:OKButton.Text = $label
    #$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
    $script:Form1.Controls.Add($script:OKButton)
    #echo $OKButton.Text 
    
    }
    
    function GUICtrlCreateInput( $text, $left, $top , $width , $height ) {
    
    $script:TextBox = New-Object System.Windows.Forms.TextBox 
    $script:TextBox.Location = New-Object System.Drawing.Size($left, $top) 
    $script:TextBox.Size = New-Object System.Drawing.Size($width , $height) 
    $script:TextBox.text = $text
    $script:Form1.Controls.Add($script:TextBox) 
    
    }
    
    # met la fenetre au premier plan
    
    # << A FAIRE - bug en dessous à voir >>
    #$Form1.Add_Shown({$Form.Activate()})
    
    # affiche Le formulaire
    
    
    $a = Get-Content (".\test2.koda")
    $a = ($a).Replace(",", " ")
    $a = ($a).Replace("(", " ")
    $a = ($a).Replace(")", " ")
    
    Foreach ( $line in $a ) {
    echo $line
       if ($line -match "guicreate" -or $line -match "GUICtrlCreateButton"  -or $line -match "GUISetState" -or $line -match "GUICtrlCreateInput"  ) {
    $line = $line.Split("=")[-1]
    
    iex $line
    
       }}
    function GUISetState($a){
    $script:Form1.Topmost = $True
    [void] $script:Form1.ShowDialog()
    }
    dans ce script, le code générer par KODA est dans un fichier nommer : ".\test2.koda"
    Comme vous pourrez le constater, le but est simple : transformer une ligne de type :
    $Form1 = GUICreate("Form1", 156, 236, 192, 124)

    en
    function définit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GUICreate "Form1" 156 236 192 124
    à terme en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Form1 = GUICreate "Form1" 156 236 192 124
    histoire de gérer la creation de plusieurs objets.

    Voila ce qui m'attend xD
    Je ne suis pas sure de m'etre exprimé clairement, pas sure que cela interesse du monde, mais quoi qu'il en soit, je reviendrais souvent pour des question technique en référence à ce script au vue de mon niveau en powershell xD

    je reste à votre dispo pour toutes demande d'information, ce script à pour but d'etre une alternative "efficace" ou outils payant et au full scripting.

    Etat actuel du script :
    Ce qui marche à l'heure actuelle :
    GUICreate : Crée l'objet Form au bonne proportion, si les valeur top et left sont à -1 lui donne comme emplacement par defaut le centre de l'ecran.
    GUICtrlCreateButton
    : affiche un bouton au bonne proportions, et au bon emplacement
    GUICtrlCreateInput : affiche un champs texte, au bonne proportions, et au bon emplacement

    Ce qu'il reste à faire :
    Généralité :
    • de manière générale, il me faut au sein des diverses fonctions intégrer une variable qui aura pour but de "nommer" le champs creer,

    cette variable devra prendre le nom de la valeur présente avant le signe "="
    ex : $Form1 = GUICreate("Form1", 156, 236, 192, 124)
    • Séléction de la zone à analyser dans le fichier koda :
      il faut limiter la zone de traitement entre les limites suivantes :
      #Region ### START Koda GUI section ###
      et #EndRegion ### END Koda GUI section ###
    • définir les type de variable et les valeurs par défaut.

    GUICreate :
    • gérer l'emplacement initial de la fenetre s'il il a été définit (autre que -1,-1).

    GUICtrlCreateButton :
    • Prise en charge de l'action lié.

    GUICtrlCreateInput :
    GUICtrlCreateLabel :

    • à faire

    GUICtrlCreateRadio:
    • à faire
    • gestion des groupes de boutons.

    GUICtrlCreateCombo :
    • à faire

    GUICtrlCreateCheckbox
    • à faire
    • gestion des groupes de boutons

    GUICtrlCreateList
    • à faire


    bon voilà ou j'en suis... je bosse dessus actuellement et mettrais à jour le scripts ici,
    si ce script interesse du monde, n'hésitez pas à me le dire, un peu de motivation en plus ne me fera pas de mal;
    si vous désirez bosser un peu dessus ou avoir qq infos dessus n'hésitez pas non plus

    ps : merci à ceux qui m'ont deja aider à en arriver ici !

  2. #2
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut
    je me permet de vous mettre ici un petit zip regroupant de quoi tester ce script dans son etat actuel

    koda2gui.zip

    unzip et lancez le pour avoir une petite idée de ce que cela donne

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    projet intéressant.
    Citation Envoyé par gretch Voir le message
    powershell + Windows Forms : là le résultat est là mais le travail de design est assez laborieux, les outils WYSIWYG sont tous payant (en tout cas ceux que j'ai trouvé comme powershell studio de SAPIEN.)
    Pour la construction de WinForm en WYSIWYG tu peux utiliser Visual Studio express puis convertir le fichier Designer.cs avec Convert-Form.
    Quant au labeur, je doute qu'on ai trouvé mieux comme outil de construction. Pour moi la conception de l'outil de Sapien, ne différe pas de celle de VS.
    Citation Envoyé par gretch Voir le message
    ce code générer en moins de 30 sec sur koda
    Même chose avec VS, de plus tu as les event de déclarer.
    Avec une version pro de VS, tu peux également utiliser les composants additionnels, sous réserve de charger les assemblies nécessaire.
    Avec KODA, je ne sais pas si cela est possible.

    Pour celui/celle qui connait ShowUI (WPF), je pense cela est également rapide.
    Je ne l'utilise pas, car je préfére VS et surtout PS est un outil d'automatisation qui se voulait s'affranchir des GUI ;-)

    Je ne connais pas Koda, mais il se peut que tu rencontres le même pb que celui que j'avais rencontré avec Convert-Form, à savoir qu'il est difficile de recenser toutes les combinaisons avant de débuter le codage.
    Il se peut donc que tu te retrouves a refondre ton code en cours de projet.

    As-tu mis en place un gestionnaire de source, type Subversion ?

    ps
    Pour transformer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Form1 = GUICreate("Form1", 156, 236, 192, 124)
    Tu peux utiliser les expressions régulières.

  4. #4
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut
    Pour la construction de WinForm en WYSIWYG tu peux utiliser Visual Studio express puis convertir le fichier Designer.cs avec Convert-Form.
    Quant au labeur, je doute qu'on ai trouvé mieux comme outil de construction. Pour moi la conception de l'outil de Sapien, ne différe pas de celle de VS.
    j'ai bien tenté qq truc depuis VS Express mais je n'ai abouti à aucun résultat concluant, (mais je n'avais jamais entendu parler de convert-form) je testerais

    mais dans l'esprit c'est tres proche de ce que je veut faire, sauf que c'est à partir de VS au lieu de KODA, pour avoir tester, leur utilisations est très proche (en terme d'interface en tout cas.)

    de plus tu as les event de déclarer.
    koda aussi peux les générer mais pour l'instant, ayant démarré ce projet hier, j’attends d'obtenir qq résultats suffisant sur la partie affichage avant d'attaquer la suite
    Pour celui/celle qui connait ShowUI (WPF), je pense cela est également rapide.
    pour l'avoir testé j'ai le sentiment qu'il est tres bien pour les interface ULTRA minimaliste (une fenetre, un bouton, un champs...) mais dès que l'interface devient un peu complexe, cela ne remplace pas un WYSIWYG comme VS, Koda, ou powershell studio.

    As-tu mis en place un gestionnaire de source, type Subversion ?
    non mais se serait une tres bonne idée xD un conseil ? (n'ayant jamsi usé de tel outils je reste ouvert à toutes proposition.)

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gretch Voir le message
    mais dès que l'interface devient un peu complexe, cela ne remplace pas un WYSIWYG comme VS, Koda, ou powershell studio.
    Je suis d'accord.
    Citation Envoyé par gretch Voir le message
    non mais se serait une tres bonne idée xD un conseil ? (n'ayant jamsi usé de tel outils je reste ouvert à toutes proposition.)
    Subversion pour débuter me semble suffisant. A associer à TortoiseSVN.

    Tu peux demander à créer une projet sur Développez (SVN+Redmine) ou le créer sur Codeplex.
    Je trouve que Redmine est un gestionnaire de projet simple et efficace pour ce type de projet.
    Le prise en main de l'ensemble demande un peu de temps, donc si tu veux te concentrer sur le code, Codeplex est + 'simple'.

    Sinon TortoiseSVN propose un service Windows en local, il faut juste penser aux sauvegardes
    Je te conseille l'installation en local pour ton 'apprentissage avant de passer à une solution en ligne. Je dois avoir un script pour cela si tu en as besoin, demande le moi.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Tout compte fais, j'ai regardé si la fonction Replace-String pouvait t'aider, je le pense.

    Je te joins un exemple utilisant ton fichier de test, voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ##Region ### START Koda GUI section ### Form=
    $Form1=GUICreate -Title "Form1" -Width 243 -Height 176 -Left 192 -Top 124
    $Input1=GUICtrlCreateInput -Text "Input1" -Left 16 -Top 16 -Width 121 -Height 21
    $Button1=GUICtrlCreateButton -Label "Button1" -Left 152 -Top 16 -Width 75 -Height 25
    $Label1=GUICtrlCreateLabel -Text "Label1" -Left 16 -Top 48 -Width 212 -Height 121
    #GUISetState @SW_SHOW #todo
    ##EndRegion ### END Koda GUI section ###
    J'ai ajouté une gestion statique des noms de paramètres de tes fonctions. Celles-ci n'utilisant pas, pour le moment, les possibilités avancées, on ne peut interroger les métadonnées liées aux arguments.

    Ceci dit il me semble que tu vas devoir créer de nombreuses fonctions pour encapsuler la création des composants supportés par Koda.
    Là où Convert-Form s’arrête à l'analyse et la transformation de texte, car il s'appuie sur les classes du framework dotnet (composants Winform).

    A toi de voir si tu peux/veux en faire qq chose
    Fichiers attachés Fichiers attachés

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Voici une version utilisant les métadonnées des fonctions Powershell.
    En passant, ce code Koda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $Radio1 = GUICtrlCreateRadio("Radio1", 104, 96, 113, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_LEFT,$BS_TOP), $WS_EX_CLIENTEDGE)
     GUICtrlSetState(-1, $GUI_CHECKED)
     GUICtrlSetFont(-1, 8, 400, 0, "MT Extra")
     GUICtrlSetResizing(-1, $GUI_DOCKRIGHT+$GUI_DOCKHEIGHT)
     GUICtrlSetTip(-1, "1")
     GUICtrlSetCursor (-1, 15)
    
    $List1 = GUICtrlCreateList("", 248, 160, 121, 97, BitOR($LBS_NOTIFY,$LBS_SORT,$WS_BORDER))
    Nécessite, à priori, de mémoriser la variable du dernier composant créé, ici '$Radio1'.
    Les lignes GUICtrlSetxxxx semble être liées au paramétrage des propriétés de ce composant.

    Bon dev .
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut Laurent, Gretch,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Voici une version utilisant les métadonnées des fonctions Powershell.
    En passant, ce code Koda
    Juste une petite rectification pour les non-initiés. C'est du code AutoIt géneré par KODA et non du code KODA.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  9. #9
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut
    arf, une grosse partie de ce code est bien au-dela de mon niveau xD

    j'ai tester ta dernière version, j'ai un souci avec "Replace-String" qui ne passe pas chez moi, j'enquete demain, je suis claqué ce soir ^^
    mais gros boulot ! merci j'ai bcp à apprendre encore !

    au passage j'ai tester, convert-form ! c'est exactement là où je voulais allez avec ce projet ! cela en est déséspérant xD j'avais pourtant cherché avant de me lancer là dedans ! bon je fait un petit retour demain (je mettrais à jour le scripts avec les qq implementations que j'ai fait depuis une fois mit au forme de ta dernière version )

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gretch Voir le message
    arf, une grosse partie de ce code est bien au-dela de mon niveau xD
    Qu'est-ce qui te pose problème ?

    Citation Envoyé par gretch Voir le message
    j'ai tester ta dernière version, j'ai un souci avec "Replace-String" qui ne passe pas chez moi,
    Les fonctions PS doivent être chargées avant d'exécuter le code de transformation, puisque j'y lis les métadonnées ( le nom et la position des paramètres).
    Quelle version de PS as-tu et quel OS ?

    Citation Envoyé par gretch Voir le message
    j'ai bcp à apprendre encore !
    Cela dépend si tu as des bases sur la POO et sur le framework dotnet. PS a peu d'instructions, mais beaucoup d'infos à mémoriser.
    Et sur ce type de projet de connaitre un peu les regex ça aide :-)
    Citation Envoyé par gretch Voir le message
    cela en est désespérant xD
    Faut pas. Mais j'espère que tu as conscience du projet dans le lequel tu t'embarques.
    Tu devrais étudier le code généré par Koda au travers de nombreux exemples avant de coder. L'outil est développé avec Delphi et certains composants me semble être des composants Win32 et pas dotnet, le portage, même si les objets sont similaires, peut s'avérer délicat. En tout cas c'est un point à vérifier.

Discussions similaires

  1. Vous voulez dire Merci ? C'est par ici !
    Par M.Dlb dans le forum Contribuez
    Réponses: 62
    Dernier message: 22/06/2012, 14h58
  2. Si vous voulez recruter pour votre projet
    Par dourouc05 dans le forum Projets
    Réponses: 0
    Dernier message: 14/12/2010, 19h44
  3. Si vous voulez faire un site sur la programmation
    Par BrYs dans le forum Mon site
    Réponses: 3
    Dernier message: 01/11/2009, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo