LANCER UN FICHIER ET RÉCUPÉRER LE HANDLE DE L'APPLICATION LANCÉE
l0st3d
Messages postés205Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention13 novembre 2009
-
29 mai 2004 à 02:11
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
26 oct. 2007 à 08:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 26 oct. 2007 à 08:26
la fenetre cible risque de ne pas etre interessée par la pression de tes touches...
cible plutot un textbox qu'elle contient, par exemple (voir Spy++ et l'APi FindWindowEx)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 oct. 2007 à 23:54
Désolé, ça sort de l'utilisation de cette source.
Pose simplement la question sur le forum :
"Comment utilisé SendKeyEx une fois qu'on a le handle de destination"
Fais aussi une simple recherche avec le mot "SendKeysEx" parmi les sources et les questions du forum, tu auras plus de chance de trouver ta réponse.
phixfoxphixfox
Messages postés2Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention25 octobre 2007 25 oct. 2007 à 17:52
une question certainement très bête !!
j'ai essayé d'envoyer des caractères en utilisation ton module que je trouve très bien et aussi le code SendkeysEX
mais .... que neni
ca ne marche absolument pas :(
pourrais tu donne un exemple pour utiliser ton handle afin d'envoyer quelque petits caractères
merci ^par avance
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 28 juil. 2007 à 04:14
Re
Regarde dans l'aide de la fonction Shell : Tu choisis le comportement du Shell : Normal, minimisé, avec ou sans focus ...
S'il te plait : va poser tes questions dans le forum, c'est fait pour ça
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention 2 décembre 2011 28 juil. 2007 à 01:25
Certes je suis novice avec vb je l'utilise pour créer des applications simple, ton source peux je l'espère palier un problème que j'ai avec l'utilisation de shell pour appeler un exécutable !
Exemple : shell « c:\program Files\blabla.exe »
Le soft appelé est minimisé dans la barre de taches car mon interface semble garder le focus !
Apres un 1er test ton module semble résoudre le problème mais est ce la bonne solution ????
Cordialement
Léo
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 juil. 2007 à 19:41
Re
Léo, le but de cette source est :
- de lancer l'exécutable associé au fichier qu'on veut lancer. Ca, c'est le rôle de ShellExecute.
- de récupérer le handle de l'application qui vient d'être lancée (à condition que cela ne lance pas une forme enfant).
Donc, oui, sans le MsgBox, tu peux lancer cette fonction :
Call LanceShell("C:\mon fichier.txt", True, True)
mais ce n'est pas le but premier de cette source.
Je sens que tu n'es pas très à l'aide avec le VB.
Si tu as des questions de programmation, fais des recherches dans les questions du forum et/ou pose des question sur le forum, c'est fait pour ça.
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention 2 décembre 2011 27 juil. 2007 à 19:17
Merci Jack :)
et sans le msgbox ca donnerait ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 juil. 2007 à 18:31
Salut Leo
Rien de compliqué !
Dans Command1_Click(), tu mets
MsgBox "Le Handle = " & CStr(LanceShell("C:\mon fichier.txt", True, True))
Leo_Robotic_Passion
Messages postés135Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention 2 décembre 2011 27 juil. 2007 à 13:54
Bonjour a tous,
Pourrais-je avoir un exemple simple de l'utilisation de ce module svp ?
Un bouton, un clique et exécution de notepad par exemple !
Merci d'avance
Cordialement
Léo
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 3 oct. 2006 à 11:47
Salut,
Exactement ce que je recherchais. Simple et efficace !
Dommage que tu n'es pas laissé le commentaire suivant dans ton module (Case 42) :
pas d'erreur, c'est Lesieur .... LOL
Merci
Bye
Philippe
DeadlyPredator
Messages postés222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 juin 2008 7 juin 2004 à 23:17
STUPIDE MICROSOFT!!! Y PENSENT TU DESFOIS?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 mai 2004 à 04:18
Ce serait trop beau : ShellExecute ne renvoit qu'un code de résultat et pas le handle (d'où l'utilité de cette source ... et la boucle est bouclée)
DeadlyPredator
Messages postés222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 juin 2008 30 mai 2004 à 02:57
c'est pas un problème. Tu fait lancer le prog par shellExecute et tu utilise le handle retourné à la place de pinfo.hprocess je crois
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 mai 2004 à 14:53
Re DeadlyPredator
C'est surement très bien, mais avec ton code, tu ne peux lancer que des exécutables. On n'y retrouve pas la fonctionnalité bien pratique du ShellExecute qui va rechercher quelle est l'application par défaut associée au fichier que tu lui donnes.
Pour info : erreur de saisie du paramètre optionnel WindowState (manque le t)
DeadlyPredator
Messages postés222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 juin 2008 29 mai 2004 à 07:12
p.s. ce module est de moi
DeadlyPredator
Messages postés222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 juin 2008 29 mai 2004 à 07:11
Ouais. c'est vrai pour GetTickCount, de ce côté là ... J'ai trouvée une belle façon de lancer des progs en VB et de récupérer leur ExitCode. Il est utilise car il attent la fin du prog et permet de spéficier plein d'options. Voici son code :
'<
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Const INFINITE = &HFFFF
Private Const STARTF_USESHOWWINDOW = &H1
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Public Enum Process_Priority
NORMAL_PRIORITY_CLASS = &H20
IDLE_PRIORITY_CLASS = &H40
HIGH_PRIORITY_CLASS = &H80
End Enum
Public Enum WindowSates
SW_HIDE = 0
SW_NORMAL = 1
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
End Enum
Function LaunchAndWait(AppPath As String, WorkPath As String, ExitCode As Long, Optional Priority As Process_Priority NORMAL_PRIORITY_CLASS, Optional WindowSate As WindowSates SW_NORMAL, Optional WaitTime As Long = INFINITE) As Boolean
Dim handle As Long
Dim StartDat As STARTUPINFO, pInfo As PROCESS_INFORMATION
With StartDat
.cb = Len(StartDat)
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = WindowState
End With
handle = CreateProcess(vbNullString, AppPath, ByVal 0&, ByVal 0&, False, CLng(Priority), ByVal 0&, WorkPath, StartDat, pInfo)
If handle = 0 Then Exit Function 'WTF!!!
WaitForSingleObject pInfo.hProcess, WaitTime
GetExitCodeProcess pInfo.hProcess, ExitCode
LaunchAndWait = True
End Function
'>
Chez moi ça marche correct. Voici comment on l'utilise :
'<
Dim ec As Long'Pour stocker le ExitCode
MsgBox LaunchAndWait("app", "app path", ec)'RETOURNE TRUE SI OK
MsgBox ec 'On fait ce qu'on veut avec le ExitCode
'>
Je crois que les anti-virus utilisent ça pour retourner si le fichier qu'on à fait scanné à partir de la ligne de commande, est contaminé ou non.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 mai 2004 à 04:00
Merci de vos comments.
DeadlyPredator : Et quand tu fais ton test aux alentours de minuit, il se passe quoi ? (un retour à zéro --> tu vas pouvoir attendre longtemps)
DeadlyPredator
Messages postés222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 juin 2008 29 mai 2004 à 03:22
LOL. Utilise pas une diff de date. Je crois que ça serait beaucoup mieux d'utiliser GetTickCount, prendre une mesure juste avant la boucle et attendre jusqu'à ce que GetTickCount > sa vieille valeur + 10000. Et du dit OU pour la boucle alors que c'est ET.
cs_OphidiaN
Messages postés235Date d'inscriptionmercredi 4 avril 2001StatutMembreDernière intervention 9 novembre 2007 29 mai 2004 à 03:09
ouais ... enfin bon.... un module dont on se sert tous les jours c fun ça :)
g commenté la source de l0st3d avec le meme genre ke ta source (javais pas vu que yavait deja une replique), excepté ke j'évite une tonne de truc inutiles....
faudrait cree une dll qui possède la capacité de renvoyer un handle au lieu d'un processID, ça serait.... bien! (pcq passer par CreateProcess c un peu pompeux...)
l0st3d
Messages postés205Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention13 novembre 2009 29 mai 2004 à 02:13
P.S J'ai rien contre toi, j'ai jeter un oeuil a ton code et puis c'est tres bien.
l0st3d
Messages postés205Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention13 novembre 2009 29 mai 2004 à 02:11
heuuu ouain en tk... pourquoi vous les francais vous essayer toujour de trouver des solutions au probleme qu'on ne cherche pas ET NE VENEZ PAS CONTREDIRE VOUS ETES COMME SA (bon pas tous mais beaucoup)! Je n'ai aucun probleme a trouver le hwnd d'un app si je cherche le nom GNEH! rien de plus facile!
26 oct. 2007 à 08:26
cible plutot un textbox qu'elle contient, par exemple (voir Spy++ et l'APi FindWindowEx)
25 oct. 2007 à 23:54
Pose simplement la question sur le forum :
"Comment utilisé SendKeyEx une fois qu'on a le handle de destination"
Fais aussi une simple recherche avec le mot "SendKeysEx" parmi les sources et les questions du forum, tu auras plus de chance de trouver ta réponse.
25 oct. 2007 à 17:52
j'ai essayé d'envoyer des caractères en utilisation ton module que je trouve très bien et aussi le code SendkeysEX
mais .... que neni
ca ne marche absolument pas :(
pourrais tu donne un exemple pour utiliser ton handle afin d'envoyer quelque petits caractères
merci ^par avance
28 juil. 2007 à 04:14
Regarde dans l'aide de la fonction Shell : Tu choisis le comportement du Shell : Normal, minimisé, avec ou sans focus ...
S'il te plait : va poser tes questions dans le forum, c'est fait pour ça
28 juil. 2007 à 01:25
Exemple : shell « c:\program Files\blabla.exe »
Le soft appelé est minimisé dans la barre de taches car mon interface semble garder le focus !
Apres un 1er test ton module semble résoudre le problème mais est ce la bonne solution ????
Cordialement
Léo
27 juil. 2007 à 19:41
Léo, le but de cette source est :
- de lancer l'exécutable associé au fichier qu'on veut lancer. Ca, c'est le rôle de ShellExecute.
- de récupérer le handle de l'application qui vient d'être lancée (à condition que cela ne lance pas une forme enfant).
Donc, oui, sans le MsgBox, tu peux lancer cette fonction :
Call LanceShell("C:\mon fichier.txt", True, True)
mais ce n'est pas le but premier de cette source.
Je sens que tu n'es pas très à l'aide avec le VB.
Si tu as des questions de programmation, fais des recherches dans les questions du forum et/ou pose des question sur le forum, c'est fait pour ça.
27 juil. 2007 à 19:17
et sans le msgbox ca donnerait ?
27 juil. 2007 à 18:31
Rien de compliqué !
Dans Command1_Click(), tu mets
MsgBox "Le Handle = " & CStr(LanceShell("C:\mon fichier.txt", True, True))
27 juil. 2007 à 13:54
Pourrais-je avoir un exemple simple de l'utilisation de ce module svp ?
Un bouton, un clique et exécution de notepad par exemple !
Merci d'avance
Cordialement
Léo
3 oct. 2006 à 11:47
Exactement ce que je recherchais. Simple et efficace !
Dommage que tu n'es pas laissé le commentaire suivant dans ton module (Case 42) :
pas d'erreur, c'est Lesieur .... LOL
Merci
Bye
Philippe
7 juin 2004 à 23:17
30 mai 2004 à 04:18
30 mai 2004 à 02:57
29 mai 2004 à 14:53
C'est surement très bien, mais avec ton code, tu ne peux lancer que des exécutables. On n'y retrouve pas la fonctionnalité bien pratique du ShellExecute qui va rechercher quelle est l'application par défaut associée au fichier que tu lui donnes.
Pour info : erreur de saisie du paramètre optionnel WindowState (manque le t)
29 mai 2004 à 07:12
29 mai 2004 à 07:11
'<
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Const INFINITE = &HFFFF
Private Const STARTF_USESHOWWINDOW = &H1
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Public Enum Process_Priority
NORMAL_PRIORITY_CLASS = &H20
IDLE_PRIORITY_CLASS = &H40
HIGH_PRIORITY_CLASS = &H80
End Enum
Public Enum WindowSates
SW_HIDE = 0
SW_NORMAL = 1
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
End Enum
Function LaunchAndWait(AppPath As String, WorkPath As String, ExitCode As Long, Optional Priority As Process_Priority NORMAL_PRIORITY_CLASS, Optional WindowSate As WindowSates SW_NORMAL, Optional WaitTime As Long = INFINITE) As Boolean
Dim handle As Long
Dim StartDat As STARTUPINFO, pInfo As PROCESS_INFORMATION
With StartDat
.cb = Len(StartDat)
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = WindowState
End With
handle = CreateProcess(vbNullString, AppPath, ByVal 0&, ByVal 0&, False, CLng(Priority), ByVal 0&, WorkPath, StartDat, pInfo)
If handle = 0 Then Exit Function 'WTF!!!
WaitForSingleObject pInfo.hProcess, WaitTime
GetExitCodeProcess pInfo.hProcess, ExitCode
LaunchAndWait = True
End Function
'>
Chez moi ça marche correct. Voici comment on l'utilise :
'<
Dim ec As Long'Pour stocker le ExitCode
MsgBox LaunchAndWait("app", "app path", ec)'RETOURNE TRUE SI OK
MsgBox ec 'On fait ce qu'on veut avec le ExitCode
'>
Je crois que les anti-virus utilisent ça pour retourner si le fichier qu'on à fait scanné à partir de la ligne de commande, est contaminé ou non.
29 mai 2004 à 04:00
DeadlyPredator : Et quand tu fais ton test aux alentours de minuit, il se passe quoi ? (un retour à zéro --> tu vas pouvoir attendre longtemps)
29 mai 2004 à 03:22
29 mai 2004 à 03:09
g commenté la source de l0st3d avec le meme genre ke ta source (javais pas vu que yavait deja une replique), excepté ke j'évite une tonne de truc inutiles....
faudrait cree une dll qui possède la capacité de renvoyer un handle au lieu d'un processID, ça serait.... bien! (pcq passer par CreateProcess c un peu pompeux...)
29 mai 2004 à 02:13
29 mai 2004 à 02:11