Page 1 sur 1
[..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 18:06
par TiDi
Bonjour à tous,
Voilà, j'ai créé un petit script Autoit tout simple permettant de lancer des script Python dans l'invité de commande Windows (ça permet de pouvoir voir les éventuelles erreurs) automatiquement.
Au début, je pensais créer une interface, sélectionner le fichier .py que l'on veut ouvrir et l'ouvrir avec le cmd.exe mais bon, autant dire à Windows de lancer tout les fichiers .py avec mon programme et là deux questions :
- Comment peut-on automatiser la procédure permettant l'ouverture automatique d'une extension avec un programme ?
- Une fois que Windows a fait son boulot, comment ça se passe au niveau du programme ?
Oui parce que ça :
c'est beau, mais je ne pense pas que lorsqu'on va cliqué sur un fichier .py, ma variable $sChemin va prendre le chemin du fichier tout seul
Merci d'avance pour votre aide.
Re: [..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 20:50
par parazitenew
TiDi a écrit :
Oui parce que ça :
c'est beau, mais je ne pense pas que lorsqu'on va cliqué sur un fichier .py, ma variable $sChemin va prendre le chemin du fichier tout seul

Bin si. Si tu double clique sur ton .py il se passera ceci.
Returns the full path of the file(s) chosen. Results for multiple selections are "Directory|file1|file2|..."
Ce qui veut dire que ta variable stockera le chemin complet.
Re: [..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 21:34
par TiDi
Merci pour ta réponse mais je me suis mal exprimé.
Par exemple, dans l'explorateur, lorsqu'on décide d'ouvrir un fichier .txt, il se lance avec le bloc-note.
Mais comment notepad.exe gère la possibilité qu'on lance le programme à partir de l'ouverture d'un fichier ?
En gros je voudrais que tous les fichiers .py, dès qu'on clique dessus, mon programme se lance et fasse ce qu'il a à faire avec le fichier. C'est là que j'ai besoin de vous, comment peut-on coder : si le programme se lance à partir de l'ouverture d'un fichier alors récupérer le chemin de ce fichier ?
Re: [..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 21:47
par parazitenew
TiDi a écrit :Merci pour ta réponse mais je me suis mal exprimé.
Par exemple, dans l'explorateur, lorsqu'on décide d'ouvrir un fichier .txt, il se lance avec le bloc-note.
Mais comment notepad.exe gère la possibilité qu'on lance le programme à partir de l'ouverture d'un fichier ?
En gros je voudrais que tous les fichiers .py, dès qu'on clique dessus, mon programme se lance et fasse ce qu'il a à faire avec le fichier. C'est là que j'ai besoin de vous, comment peut-on coder : si le programme se lance à partir de l'ouverture d'un fichier alors récupérer le chemin de ce fichier ?
Le bloc note se lance car il est défini comme programme par défaut pour ouvrir les fichiers txt. Il faudra donc définir ton programme comme celui qui ouvre les .py dans les propriétés des fichiers .py. Ensuite dans ton script; après le :
$sChemin = FileOpenDialog()
Rajoute
RunWait("$sChemin")
ça devrait marcher.
Re: [..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 22:11
par TiDi
Je reformule tout depuis le début :
Voici mon script avec interface :
► Afficher le texte
Code : Tout sélectionner
#Region ### Fichiers inclus ###
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#EndRegion ### Fichiers inclus ###
#Region ### Création de l'interface ###
Local $oGUI = GUICreate("Exécuteur de script Python", 378, 98, 192, 124)
Local $oParcourir = GUICtrlCreateButton("Parcourir...", 8, 8, 361, 25)
Local $oChemin = GUICtrlCreateInput("Aucun fichier n'a été sélectionné", 8, 40, 361, 21)
Local $oOuvrir = GUICtrlCreateButton("Ouvrir", 8, 64, 361, 25)
#EndRegion ### Création de l'interface ###
#Region ### Déclaration des variables ###
Local $sChemin, $sFichier, $sDrive, $sDir, $sFileName
Local $sExtension = ".py"
#EndRegion ### Déclaration des variabvles ###
#Region ### Gestion des évènements ###
GUISetState(@SW_SHOW, $oGUI)
While 1
Local $oMsg = GUIGetMsg()
Switch $oMsg
Case $GUI_EVENT_CLOSE
Exit
Case $oParcourir
$sChemin = FileOpenDialog("Ouvrir", @DocumentsCommonDir, "Fichier python (*.py)")
$aFichier = _PathSplit($sChemin, $sDrive, $sDir, $sFileName, $sExtension)
$sRepertoire = $aFichier[1] & $aFichier[2]
$sFichier = $aFichier[3] & $aFichier[4]
GUICtrlSetData($oChemin, $sChemin)
Case $oOuvrir
Run("cmd.exe")
Sleep(1000)
Send("cd " & $sRepertoire & "{ENTER}")
Sleep(500)
Send("py " & $sFichier & "{ENTER}")
Exit
EndSwitch
WEnd
#EndRegion ### Gestion des évènements ###
Lui il marche pas de problèmes. Mais ça prend autant de temps d'utiliser l'interface que d'écrire la commande sur l'invité de commande.
Ce que je voudrais maintenant, c'est de pouvoir faire reconnaitre mon programme, comme programme par défaut pour les fichiers python directement dans le script. Et c'est là où je bloque, le fichier est censé s'ouvrir avec mon programme, mais comment gérer le fait que l'ouverture du fichier provoque le lancement du programme ?
Reprenons l'exemple du bloc-note, dans le script, il devrait bien y avoir un truc du genre :
Code : Tout sélectionner
Si l'ouverture d'un fichier .txt provoque le lancement du programme alors la variable chemin prend le chemin du fichier ouvert.
Re: [..] Ouverture fichier dans mon script
Posté : lun. 24 août 2015 22:15
par jguinch
Les associations des fichiers sont gérées dans la base de registre.
En général, l'association est créée à l'installation de l'application. Le programme d'installation d'AutoIt créé les associations pour les fichiers .au3 et a3x (et peut-être d'autres...)
Python droit probablement faire la même chose à l'installation.
Que se passe-t-il si tu double-clic sur un fichier .py ? Si Python se lance, alors l'association est bien créé, il suffira d'exécuter le fichier avec
ShellExecute et le tour est joué.
Sinon, tu peux créer l'association manuellement dans le registre. Par exemple, pour les script .au3, on trouve les entrées suivantes :
► Afficher le texte
Code : Tout sélectionner
RegWrite("HKEY_CLASSES_ROOT\.au3", "", "REG_SZ", "AutoIt3Script") ; Extension du fichier.au3, associé au type AutoIt3Script
RegWrite("HKEY_CLASSES_ROOT\AutoIt3Script", "", "REG_SZ", "AutoIt v3 Script") ; Désignation du type de fichier AutoIt3Script = "AutoIt v3 Script"
RegWrite("HKEY_CLASSES_ROOT\AutoIt3Script\DefaultIcon", "", "REG_SZ", @ProgramFilesDir & "\AutoIt3\Icons\au3script_v10.ico") ; Icône par défaut
RegWrite("HKEY_CLASSES_ROOT\AutoIt3Script\Shell", "", "REG_SZ", "Run") ; Action par défaut (lors du clic droit)
RegWrite("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run", "", "REG_SZ", "Run Script") ; Nom de l'action Run
RegWrite("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run\Command", "", "REG_SZ", '"' & @ProgramFilesDir & '"\AutoIt3\AutoIt3.exe" "%1" %*') ; Commande à exécuter pour Run
Re: [..] Ouverture fichier dans mon script
Posté : mer. 26 août 2015 12:10
par TiDi
Non en fait, je voudrais que lorsque l'on double-clique sur un fichier .py, mon programme se lance et récupère juste le chemin du fichier
Re: [..] Ouverture fichier dans mon script
Posté : mer. 26 août 2015 13:57
par jguinch
OK, donc il faut que tu créé les entrées dans la base de registre.
J'ai mis un exemple dans le message précédent, il te suffit de le modifier légèrement.
Sinon, il me semble avoir déjà vu sur le forum une fonction qui permet de créer une association de fichiers simplement...