Page 1 sur 1

[R] Fermeture après un ShellExecute()

Posté : jeu. 29 août 2013 14:12
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.

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

Posté : jeu. 29 août 2013 15:33
par mikell
Essaye le même WinClose en mettant en tête de script

Code : Tout sélectionner

Opt("WinTitleMatchMode", -2)

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

Posté : jeu. 29 août 2013 15:46
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.

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

Posté : jeu. 29 août 2013 16:06
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

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

Posté : jeu. 29 août 2013 16:40
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:

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

Posté : jeu. 29 août 2013 16:51
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 ?

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

Posté : jeu. 29 août 2013 16:58
par mikell
La solution la plus commode serait quand même de faire afficher l'image dans une gui qu'on peut commander à volonté

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

Posté : jeu. 29 août 2013 17:16
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...

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

Posté : jeu. 29 août 2013 19:24
par mikell
Nan tu rêves pas :mrgreen:
Extrait de WinApi.au3
► Afficher le texte
ou
► Afficher le texte
Mais ensuite c'est ProcessClose()

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

Posté : jeu. 29 août 2013 20:01
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)
 

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

Posté : jeu. 29 août 2013 20:16
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

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

Posté : jeu. 29 août 2013 21:19
par aulus
Wahooo... ça fonctionne ! La journée se termine bien...

Grand merci à tous deux.

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

Posté : ven. 30 août 2013 00:29
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.