Exécuter un exe

cs_Benbx Messages postés 1 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 1 juillet 2005 - 1 juil. 2005 à 11:06
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 - 1 juil. 2005 à 14:47
Bonjour, j'aimerai savoir s'il existe une commande qui nous permet d'exécuter un exe....



Merci à vous!

3 réponses

KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
1 juil. 2005 à 11:12
Bonjour,
Elle s'appelle : shell
Tu trouveras toutes la doc dont tu as beosin sur le site...

Oula

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
1 juil. 2005 à 11:30
Shell "C:\dossier\programme.exe"




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
1 juil. 2005 à 14:47
non beaucoup mieux la fonction API : ShellExecute car shell lance le programme mais tu n'as pas de retour sur la fin du processus.

Exemple ( qui n'est pas de moi mais que j'utilise dans des sources )

'************************************************************
'* Programmeur: Johanne Dorion Nick:ShanaBurns *
'* Date : 16 avril 2002 *
'*----------------------------------------------------------*
'* Modul permettant d'executer un programme sur le disk et *
'* d'attendre ou non la fin de son execution pour continuer.*
'*----------------------------------------------------------*
'* Dépendance: mdlProcess *
'************************************************************
Option Explicit


Public Const PROCESS_QUERY_INFORMATION = &H400


Public Const SW_HIDE = 0
Public Const SW_MAXIMIZE = 3
Public Const SW_MINIMIZE = 6
Public Const SW_RESTORE = 9
Public Const SW_SHOW = 5
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1


Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long


Public Sub ExecutFile(sFile As String, sParam As String, sDir As String, bWait As Boolean)
On Error GoTo errh_ExecutFile
Dim gup As Long


'ShellExecute frmInstall.hwnd, "Open", sFile, sParam, sDir, SW_SHOW
ShellExecute gup, "Open", sFile, sParam, sDir, SW_SHOW
If bWait Then: WaitEndProcess
errh_ExecutFile:
'ExecutError "ExecutFile"
End Sub

'************************************************************
'* Programmeur: Johanne Dorion Nick:ShanaBurns *
'* Date : 16 avril 2002 *
'*----------------------------------------------------------*
'* Modul permettant d'attendre la fin de l'execution *
'* d'un autre programme avant de poursuivre. *
'* Il permet egalement quelques petites fonctions comme *
'* récupérer le process Id d'un programme executer *
'* avec un ShellExecute et récupérer la version de windows *
'*----------------------------------------------------------*
'* Dépendance: Aucune *
'************************************************************


Option Explicit


Private Const MAX_PATH = 260
Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const PROCESS_VM_READ = 16


Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type


Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type


Private Type PROCESS_BASIC_INFORMATION
ExitStatus As Long
PebBaseAddress As Long
AffinityMask As Long
BasePriority As Long
UniqueProcessId As Long
InheritedFromUniqueProcessId As Long 'ParentProcessID'
End Type


Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function NtQueryInformationProcess Lib "ntdll" (ByVal ProcessHandle As Long, ByVal ProcessInformationClass As Long, ByRef ProcessInformation As PROCESS_BASIC_INFORMATION, ByVal lProcessInformationLength As Long, ByRef lReturnLength As Long) As Long


'Attend la fin du process avant de continuer
Public Sub WaitEndProcess(Optional ShellProcessId As Long)
Dim lRC As Long
Dim hProcess As Long

If ShellProcessId = 0 Then
ShellProcessId = GetShellProcessId()
End If
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ShellProcessId)
Do
GetExitCodeProcess hProcess, lRC
DoEvents
Loop While lRC > 0
CloseHandle hProcess
End Sub


'Retourne le process id du shell
Public Function GetShellProcessId() As Long
Select Case GetPlatformId
Case VER_PLATFORM_WIN32_NT
GetShellProcessId = GetProcessIdNT
Case VER_PLATFORM_WIN32_WINDOWS
GetShellProcessId = GetProcessID98
Case Else
MsgBox "Votre version de windows est incompatible avec ce programme.", vbCritical
End Select
End Function


'Trouve le process Id du shell pour windows 95-98
Public Function GetProcessID98() As Long
Dim lRC As Long
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim lMyProcessID As Long


'Cherche par le parent du process qui doit etre moi meme
lMyProcessID = GetCurrentProcessId
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
lRC = ProcessFirst(hSnapShot, uProcess)
Do While lRC
'Suis-je le parent du process??
If lMyProcessID = uProcess.th32ParentProcessID Then
GetProcessID98 = uProcess.th32ProcessID
Exit Do
End If
lRC = ProcessNext(hSnapShot, uProcess)
Loop
Call CloseHandle(hSnapShot)
End Function


'Renvoye l'id de la platform (Windows 95-98, NT)
Public Function GetPlatformId() As Long
Dim myOS As OSVERSIONINFO

myOS.dwOSVersionInfoSize = Len(myOS)
GetVersionEx myOS
'If myOS.dwMajorVersion = 4 Then
GetPlatformId = myOS.dwPlatformId
'End If
End Function


'Trouve le process Id du shell pour windows NT
Public Function GetProcessIdNT() As Long
Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim lRet As Long
Dim i As Long
Dim hProcess As Long
Dim lMyProcessID As Long
Dim lShelledProcessId As Long
Dim lntStatus As Long
Dim lProcessHandle As Long
Dim lProcessBasicInfo As Long
Dim tProcessInformation As PROCESS_BASIC_INFORMATION
Dim lProcessInformationLength As Long
Dim lReturnLength As Long

lMyProcessID = GetCurrentProcessId
'Creer un tableau avec les processID
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4

For i = 1 To NumElements
'Prend le handle du Process
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))

' Recherche par le parent du process qui doit etre moi meme
lProcessHandle = hProcess lProcessBasicInfo 0 '0 REQUEST PROCESS INFORMATION'
lProcessInformationLength = Len(tProcessInformation)

'Appel la fonction Nt pour obtenir les informations sur les process
lntStatus = NtQueryInformationProcess(lProcessHandle, lProcessBasicInfo, tProcessInformation, lProcessInformationLength, lReturnLength)

'Suis-je le parent du process??
If lMyProcessID = tProcessInformation.InheritedFromUniqueProcessId Then
lShelledProcessId = tProcessInformation.UniqueProcessId
'Ferme le handle du process
CloseHandle (hProcess)
Exit For
End If
CloseHandle (hProcess)
Next
GetProcessIdNT = lShelledProcessId
End Function
0
Rejoignez-nous