[R] Bouton Exécuter identique a celui de Windows

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

[R] Bouton Exécuter identique a celui de Windows

#1

Message 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
Modifié en dernier par jl56 le mar. 30 sept. 2014 22:37, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] bouton executer identique a celui de windows

#2

Message 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.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] bouton executer identique a celui de windows

#3

Message 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
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] bouton executer identique a celui de windows

#4

Message 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].
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] bouton executer identique a celui de windows

#5

Message par jguinch »

+1 pour WIN+R
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [R] Bouton Exécuter identique a celui de Windows

#6

Message 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

Code : Tout sélectionner

Send("{LWINDOWN}{r}{LWINUP}")
sleep (500)
ça fonctionne sur mon windows 8.1 64 bits reste à tester sur d'autre OS

Merci a vous deux

A+
JL56
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Bouton Exécuter identique a celui de Windows

#7

Message par jguinch »

Sinon, y'a aussi ça : (testé uniquement sous seven)

Code : Tout sélectionner

$oShell = ObjCreate("shell.application")
$oShell.FileRun()
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [R] Bouton Exécuter identique a celui de Windows

#8

Message 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
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Bouton Exécuter identique a celui de Windows

#9

Message 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
► Afficher le texteAvec désactivation de la redirection WOW64
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)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre