begin process at 2012 02 17 07:58:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Exécution

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Exécution Classé sous :lancer, application, handle, shellexecute Niveau :Débutant Date de création :29/05/2004 Vu / téléchargé :9 916 / 1 332

Auteur : jack

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R...
Source avec Zip Source avec une capture [VBA EXCEL] CALCULER LA DISTANCE ENTRE DEUX COORDONNÉES GÉOG...
Source avec Zip Source avec une capture Source .NET (Dotnet) JPG + ZIP = JPG ET ZIP
Source avec Zip Source avec une capture SYSTRAY + BALLOON - VARIANTE AVEC TEXTE DANS L'ICÔNE
Source avec Zip Source avec une capture DATE-HEURE DE LANCEMENT D'UN PROGRAMME

 Sources de la même categorie

Source avec Zip CALCULATRICE par TPB
Source avec Zip Source .NET (Dotnet) PIERRE PAPIER CISEAUX par Ultrabytes
Source avec Zip Source avec une capture UN PATCH EN VB (V3) par PhoenixBytes
Source avec Zip Source .NET (Dotnet) [VB.NET 2008] EXECUTION MULTITHREAD DE PLUSIEURS FONCTION À ... par ShadowTzu
Source avec Zip Source avec une capture MULTITHREADING ACTIVEX par Philippe734

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip Source avec une capture HANDLISTER par Christ_OFF
Source .NET (Dotnet) VÉRIFIER SI UNE APPLICATION EST LANCÉ, SINON ON LA DÉMARRE ! par scoubigee
Source avec Zip RÉCUPÉRER LE HANDLE APRÈS UN SHELLEXECUTE par jack
COMMENT EMPÉCHÉ MON APLI DE SE LANCÉ 2 FOIS ? par youl46

Commentaires et avis

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!

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.

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

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.

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)


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.

Commentaire de DeadlyPredator le 29/05/2004 07:12:21

p.s. ce module est de moi

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)

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

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)

Commentaire de DeadlyPredator le 07/06/2004 23:17:48

STUPIDE MICROSOFT!!! Y PENSENT TU DESFOIS?

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

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

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

Commentaire de Leo_Robotic_Passion le 27/07/2007 19:17:25

Merci Jack :)
et sans le msgbox ca donnerait ?

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.

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

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

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

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.

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,571 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales