LANCER UN FICHIER ET RÉCUPÉRER LE HANDLE DE L'APPLICATION LANCÉE

l0st3d Messages postés 205 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 13 novembre 2009 - 29 mai 2004 à 02:11
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 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.

https://codes-sources.commentcamarche.net/source/23215-lancer-un-fichier-et-recuperer-le-handle-de-l-application-lancee

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 2 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 25 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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Derniè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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
27 juil. 2007 à 19:17
Merci Jack :)
et sans le msgbox ca donnerait ?
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Derniè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és 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
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és 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
7 juin 2004 à 23:17
STUPIDE MICROSOFT!!! Y PENSENT TU DESFOIS?
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
29 mai 2004 à 07:12
p.s. ce module est de moi
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 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és 235 Date d'inscription mercredi 4 avril 2001 Statut Membre Derniè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és 205 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 13 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és 205 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 13 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!
Rejoignez-nous