Page 1 sur 1
[R] Bouton Exécuter identique a celui de Windows
Posté : mar. 30 sept. 2014 07:41
par jl56
Bonjour à tous
Je cherche a reproduire le Bouton exécuter de windows pour pallier à son absence dans les versions 7 et 8.x
Code : Tout sélectionner
Local $sFileOpenDialog = FileOpenDialog("Sélectionnez le programme a exécuter","","")
If @error Then
; Display the error message.
MsgBox(0, "", "Pas de fichier sélectionné")
Else
$sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF)
MsgBox(0, "", "You chose the following files:" & @CRLF & $sFileOpenDialog)
ShellExecute($sFileOpenDialog)
;~ Run(@ComSpec & " /c " & $sFileOpenDialog, "", @SW_HIDE)
EndIf
Lorsque je sélectionne l'exécutable ou lorsque je tape le chemin complet ça fonctionne
mais lorsque je tape seulement la commande exemple services.msc ou msconfig, j'ai une erreur comme quoi il ne trouve pas la commande sur c:\
Alors que cette même commande tapé via le vrai bouton exécuter ou dans une session DOS fonctionne directement.
J'ai testé plusieurs commande mais je ne voie pas comment résoudre ce problème
Avez vous SVP des suggestions pour corriger mon code ou pour lancer directement la vrai commande exécuter
Merci
A+ JL56
Re: [..] bouton executer identique a celui de windows
Posté : mar. 30 sept. 2014 08:50
par jguinch
La commande "Exécuter" n'est pas absente, elle n'est simplement pas affichée par défaut.
Il suffit de la rendre disponible, dans les propriétés de la barre des tâches.
Re: [..] bouton executer identique a celui de windows
Posté : mar. 30 sept. 2014 13:40
par jl56
@guinch
Merci de ta réponse.
C'était implicite dans cette phrase
Alors que cette même commande tapé via le vrai bouton exécuter
Je connais bien cette manip mais je suis un technicien itinérant et je ne veux pas paramétrer cette option sur chaque PC client
d’où l’intérêt de l'intégrer à mon script.
A+
JL56
Re: [..] bouton executer identique a celui de windows
Posté : mar. 30 sept. 2014 14:18
par orax
Code : Tout sélectionner
Local $sFileOpenDialog = FileOpenDialog("Sélectionnez le programme a exécuter", "", "(*.*)")
If @error Then
; Display the error message.
MsgBox(0, "", "Pas de fichier sélectionné")
Else
; Si le fichier n'existe pas on supprime le chemin pour ne garder que le nom de l'exécutable.
If Not FileExists($sFileOpenDialog) Then $sFileOpenDialog = StringRegExpReplace($sFileOpenDialog,".+\\", "")
MsgBox(0, "", "You chose the following files:" & @CRLF & $sFileOpenDialog)
ShellExecute($sFileOpenDialog)
EndIf
Ou les touches [WIN] + [R].
Re: [..] bouton executer identique a celui de windows
Posté : mar. 30 sept. 2014 14:28
par jguinch
+1 pour WIN+R
Re: [R] Bouton Exécuter identique a celui de Windows
Posté : mar. 30 sept. 2014 22:37
par jl56
Bonsoir,
@orax ton script fonctionnais isolément mais pas dans mon script a cause de
#AutoIt3Wrapper_UseX64=n au début du script
Comme je veux utiliser mon script sur tous les postes possible je veux le compiler en 32 bits et la ça ne fonctionne plus sur un PC 64 bits
je me suis reporté sur
ça fonctionne sur mon windows 8.1 64 bits reste à tester sur d'autre OS
Merci a vous deux
A+
JL56
Re: [R] Bouton Exécuter identique a celui de Windows
Posté : mer. 01 oct. 2014 08:16
par jguinch
Sinon, y'a aussi ça : (testé uniquement sous seven)
Re: [R] Bouton Exécuter identique a celui de Windows
Posté : sam. 04 oct. 2014 06:31
par jl56
Bonjour a tous
@jguinch
Merci pour ton info
$oShell.FileRun()
testé sur 8.1 64b et xp32
le send me posais des problème de clavier
@ Tous
Ce code
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=ms32.exe
#AutoIt3Wrapper_Outfile_x64=ms64.exe
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
ShellExecute("msconfig.exe")
Fonctionne lorsque qu'il n'est pas compilé et lorsque que je lance l'exe compilé en 64 sur un OS 64
l'exe compilé en 32 sur un OS 32 fonctionne aussi mais pas sur l'os 64
J'aimerais avoir une seule compilation qui fonctionne sur tous les OS
Avez vous SVP une suggestion
merci
A+
JL56
Re: [R] Bouton Exécuter identique a celui de Windows
Posté : sam. 04 oct. 2014 16:26
par jguinch
C'est à cause de la redirection WOW64 : sous un OS 64 bits et un exécutable 32 bits,
@SystemDir correspond à
@WindowsDir &"\SysWOW64" (
@Windows & "\System32" devient alors un chemin virtuel qui est redirigé vers
@WindowsDir &"\SysWOW64")
Quand tu lances un programme (avec ShellExecute ou Run, ou même depuis ailleurs) sans spécifier le chemin complet, Windows va chercher le programme dans les répertoires définis dans le PATH (variables d'environnement), dans l'ordre de leur définition.
Dans ton cas,
msconfig.exe n'est pas trouvé car il n'est pas présent dans
@Windows & "\System32" à cause cette redirection (regarde dans c:\windows\SysWOW64, tu verras qu'il n'y est pas).
Il faut donc soit désactiver la redirection WOW64, soit indiquer le chemin NATIF System32 (qui lui, est accessible via répertoire virtuel mappé
@WindowsDir & "\sysnative")
Je sais pas si c'est très clair...Voici deux exemples :
► Afficher le texteAvec Sysnative
Code : Tout sélectionner
#include <WinAPIProc.au3>
Local $sSystemDir = @SystemDir
If _WinAPI_IsWow64Process() Then $sSystemDir = @WindowsDir & "\Sysnative"
ShellExecute($sSystemDir & "\msconfig.exe")
► Afficher le texteAvec désactivation de la redirection WOW64
Code : Tout sélectionner
#include <WinAPIProc.au3>
Local $sSystemDir = @WindowsDir & "\System32"
If _WinAPI_IsWow64Process() Then
$WOW64 = DllCall('kernel32.dll', 'bool', 'Wow64DisableWow64FsRedirection', 'ptr*', 0)
EndIf
ShellExecute($sSystemDir & "\msconfig.exe")
Pour le deuxième exemple, l'idéal sera de réactiver la redirection WOW64 après l'exécution de la commande :
DllCall('kernel32.dll', 'bool', 'Wow64RevertWow64FsRedirection', 'ptr*', $WOW64)