Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source



Description

Je vois que tout le monde galère pour retrouver le handle d'une fenêtre ou encore le handle de l'application que l'on vient de lancer.
Ce module (que j'utilise tous les jours) permet :
- De retrouver le handle d'une fenêtre à partir d'un texte = fonction "HwndFenetre"
- De lancer un fichier (txt, doc, xls ...) ou une application (exe) et récupérer en retour le handle de l'objet ainsi créé.

Seule limite et incertitude :
La fonction "HwndFenetre" recherche les fenêtres correspondants partiellement à notre texte. Le problème est que, si vous avez plusieurs fenêtre dans lequel se trouve le texte que vous rechercher, il vous fournira un handle, mais pas forcement le bon.
C'est une approximation qui ne m'a jamais génée, personnellement.

 

Conclusion

Pour vous servir de ce module, simple :
- Mettez le fichier de ce module dans votre répertoire VB6\Template\Modules
- Dans votre application, menu "Projet", "Ajouter un module" --> ModShell doit apparaitre dans la liste des modules de l'onglet "Nouveau". Cliquez dessus -> le module est dans votre appli.
- N'oubliez pas de le sauvegarder dans le répertoire de votre application (intégrité du projet)

Pour lancer les fonctions :
- MonHandle = HwndFenetre("Ma feuille excel") ' pour récupérer le handle de l'application Excel qui tourne actuellement et qui utilise votre fichier "Ma feuille excel.xls"
- MonHandle = LanceShell("Ma présentation PowerPoint.ppt", True) ' pour récupérer le handle de PowerPoint qui sera lancé avec votre fichier "Ma présentation PowerPoint.ppt"
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de l0st3d le 29/05/2004 02:11:31

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!

signaler à un administrateur
Commentaire de l0st3d le 29/05/2004 02:13:30

P.S J'ai rien contre toi, j'ai jeter un oeuil a ton code et puis c'est tres bien.

signaler à un administrateur
Commentaire de OphidiaN le 29/05/2004 03:09:39

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...)

signaler à un administrateur
Commentaire de DeadlyPredator le 29/05/2004 03:22: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.

signaler à un administrateur
Commentaire de jack le 29/05/2004 04:00:44 administrateur CS

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)


signaler à un administrateur
Commentaire de DeadlyPredator le 29/05/2004 07:11:00

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.

signaler à un administrateur
Commentaire de DeadlyPredator le 29/05/2004 07:12:21

p.s. ce module est de moi

signaler à un administrateur
Commentaire de jack le 29/05/2004 14:53:37 administrateur CS

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)

signaler à un administrateur
Commentaire de DeadlyPredator le 30/05/2004 02:57:01

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

signaler à un administrateur
Commentaire de jack le 30/05/2004 04:18:25 administrateur CS

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)

signaler à un administrateur
Commentaire de DeadlyPredator le 07/06/2004 23:17:48

STUPIDE MICROSOFT!!! Y PENSENT TU DESFOIS?

signaler à un administrateur
Commentaire de philippe laschweng 1 le 03/10/2006 11:47:09

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

signaler à un administrateur
Commentaire de Leo_Robotic_Passion le 27/07/2007 13:54:47

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

signaler à un administrateur
Commentaire de jack le 27/07/2007 18:31:32 administrateur CS

Salut Leo
Rien de compliqué !
Dans Command1_Click(), tu mets
MsgBox "Le Handle = " & CStr(LanceShell("C:\mon fichier.txt", True, True))

signaler à un administrateur
Commentaire de Leo_Robotic_Passion le 27/07/2007 19:17:25

Merci Jack :)
et sans le msgbox ca donnerait ?

signaler à un administrateur
Commentaire de jack le 27/07/2007 19:41:52 administrateur CS

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.

signaler à un administrateur
Commentaire de Leo_Robotic_Passion le 28/07/2007 01:25:28

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

signaler à un administrateur
Commentaire de jack le 28/07/2007 04:14:25 administrateur CS

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

signaler à un administrateur
Commentaire de phixfoxphixfox le 25/10/2007 17:52:59

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

signaler à un administrateur
Commentaire de jack le 25/10/2007 23:54:12 administrateur CS

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.

signaler à un administrateur
Commentaire de Renfield le 26/10/2007 08:26:19 administrateur CS

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)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Lancer un programme a partir be VBA [ par lulociel ] Bonjour! Je souhaite lancer une application pour extraire des données de l'AS400(que j'utilise au travail).Je voulais savoir s'il est possible d'execu comment lancer une application sur serveur , apartir du poste client [ par Zied ] bonjour a tous,j'ai besoin d'aide pour pouvoir executer une applacation (VB,WNT,SQLSERVER 7.) , installée sur le serveur, à partir d'un poste clientme Lancer un appli avec un fichier [ par Loïc ] Sous Windows, pour lancer une application, il lui faut un fichier. On prend ce fichier, on le fait glisser sur l'exe (sur l'application) et on relache Lancer un process avec des droits particuliers [ par cyrilp ] Bonjour,J'aimerai savoir comment faire avec les API windows (NT) pour lancer une application sous un compte particulier.Par exemple, je suis connecté LANCER UNE APPLICATION SANS DONNER LE NOM DE L'EXECUTABLE [ par kenshi ] bonjourj'ai vu plusieurs fois sur ce site, que pour lancer une application externe à votre programme vous utilisez la fonction shell(..), le problème Gestion de fenêtres et API [ par cobra84 ] J'aimerais lancer une application/document externe à mon application VB et récuperer l'Handle de la fenêtre ainsi créée. J'utilise donc ShellExecute, Gestion de fenêtres et API [ par cobra84 ] J'aimerais lancer une application/document externe à mon application VB et récuperer l'Handle de la fenêtre ainsi créée. J'utilise donc ShellExecute, API ShellExecute [ par jockos ] Salut,LE premier paramètre de la méthode Api ShellExecute est un Long qui a pour nom Hwnd...J'ai été voir sur la MSDN et il semblerai que ce soit l'ha Lancer une application en plein ecran [ par bbernard ] Bonjour,Je suis debutant dans ce domaine et je m'entraine en creant de petite application pour mon confort et j'ai besoin d'un peu d'aide.J'ai creer u


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.