[R] Fermeture après un ShellExecute()

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] Fermeture après un ShellExecute()

#1

Message par aulus »

Bonjour,

Je lance l' exécutable graphique via son fichier associé, cela parce que je ne connais pas le logiciel graphique par défaut du futur utilisateur de mon programme :

Code : Tout sélectionner

$prog = "fichier.jpg"
ShellExecute($prog)
 
Est-ce possible de fermer en fin de programme l'exécutable graphique s'il est ouvert ainsi ?
J'ai essayé sans succès :

Code : Tout sélectionner

WinClose($prog)
WinKill($prog)
 
Je vous remercie de votre réponse.
Modifié en dernier par aulus le jeu. 29 août 2013 21:20, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#2

Message par mikell »

Essaye le même WinClose en mettant en tête de script

Code : Tout sélectionner

Opt("WinTitleMatchMode", -2)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#3

Message par aulus »

Bonjour Mikell et merci.

J'avais opté pour :

Code : Tout sélectionner

Opt("GUIOnEventMode", 1)
 
Si je le remplace par Opt("WinTitleMatchMode", -2) le programme plante.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#4

Message par jguinch »

Mikell part du principe que le nom du fichier apparaîtra dans le titre de la fenêtre, ce qui n'est pas forcément le cas tout le temps :P
Certes, je propose plus compliqué, mais normalement ça couvre le besoin :
► Afficher le texte
_ShellExecuteEx trouvé sur le forum US
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#5

Message par mikell »

aulus a écrit :Si je le remplace par Opt("WinTitleMatchMode", -2) le programme plante.
Faut pas remplacer l'option, faut la rajouter

@jguinch
"ce qui n'est pas forcément le cas tout le temps"
Exact, on va dire seulement à 99,9 % (et certainement beaucoup plus pour les éditeurs d'images) :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#6

Message par aulus »

mikell a écrit :Faut pas remplacer l'option, faut la rajouter
"ce qui n'est pas forcément le cas tout le temps"
Exact, on va dire seulement à 99,9 % (et certainement beaucoup plus pour les éditeurs d'images) :mrgreen:
J'avais essayé les 2 options (en laissant les 2 Opt() ou en ne laissant que celle que vous m'avez proposée.

J'utilise Le logiciel Imagina, et bien sûr rien dans la barre de titre ! Quand on n'a pas de pot...

@jguinch
Tout d'abord merci pour ce long code.
L'essai n'a pas été concluant. Si je comprends le code, le logiciel de graphisme devait se fermer au bout d'une seconde. J'ai bien sûr modifié le chemin du fichier .JPG à ouvrir pour l'adapter à mon cas. Aurais-je oublié autre chose ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#7

Message par mikell »

La solution la plus commode serait quand même de faire afficher l'image dans une gui qu'on peut commander à volonté
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#8

Message par aulus »

Les images à afficher sont des photos de pages de vieux registres parfois difficiles à lire tant l'écriture est mauvaise ou les pages décolorées. Il est nécessaire de disposer de toutes les fonctions d'un bon logiciel de graphisme comme retourner l'image, zoomer, éclaircir, etc.

Autre piste : Est-il possible de détecter quel programme est associé à telle extension de fichier ? Si oui, je détecte le programme et mon WinClose() s'y réfère... Je rêve...
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#9

Message par mikell »

Nan tu rêves pas :mrgreen:
Extrait de WinApi.au3
► Afficher le texte
ou
► Afficher le texte
Mais ensuite c'est ProcessClose()
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#10

Message par aulus »

les 2 codes provoquent la fermeture du programme appelant, mais ne ferment pas le logiciel de graphisme.
D'autre part, "run" ouvre le logiciel de graphisme, tandis que ShellExecute ne l'ouvre pas. Quelle différence entre les deux fonctions ?
Voici mon code (2° proposition) :

Code : Tout sélectionner

$prog = FileGetLongName(_WinAPI_AssocQueryString(".jpg", $ASSOCSTR_EXECUTABLE))
run($prog & " " & @ScriptDir & "\image.jpg")
sleep(4000)
ProcessClose($prog)
 
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#11

Message par mikell »

Dans ce cas vaudrait mieux faire

Code : Tout sélectionner

$prog = FileGetLongName(_WinAPI_AssocQueryString(".jpg", $ASSOCSTR_EXECUTABLE))
$pid = run($prog & " " & @ScriptDir & "\image.jpg")
sleep(4000)
ProcessClose($pid)
En simplifiant : ShellExecute ouvre un fichier, Run lance un programme
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..]Fermeture après un ShellExecute()

#12

Message par aulus »

Wahooo... ça fonctionne ! La journée se termine bien...

Grand merci à tous deux.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Fermeture après un ShellExecute()

#13

Message par jchd »

ShellExecute renvoit maintenant (beta) ou plutôt renverra bientôt le PID du programme lancé.
En fait, il y avait plusieurs bugs au niveau de Run, RunAs, etc.
Option a été choisie de corriger tout ça et de rendre plus cohérentes entre-alles ces fonctions.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre