Accueil > Forum > > > > Utilisation de ExecCmd
Utilisation de ExecCmd
dimanche 16 décembre 2007 à 18:34:51 |
Utilisation de ExecCmd

PROGRAMMIX
|
Bonjour Dans une application, j'affiche une feuille fille dans laquelle se trouve un bouton permettant de lancer une autre application en utilisant le code suivant : Dim retval As Long If AfficherFormulaire Then retval = ExecCmd(App.Path & "\ListeDuPersonnel.exe " & RepertoirePersonnel & "FichierDuPersonnel.txt") End If ListeSalariés.LireLeCarnet (RepertoirePersonnel & "FichierDuPersonnel.txt")Mais si, je ferme ma feuille fille sans avoir précédamment fermer l'application appelée, ça plante. Théoriquement, je ne devrais pas procéder ainsi, mais ceci est une projection d'une mauvaise manipulation de la part d'un utilisateur lambda. Que devrais-je faire pour éviter cela ? Programmix
|
|
dimanche 16 décembre 2007 à 19:49:30 |
Re : Utilisation de ExecCmd

jmfmarques
|
Bonjour,
Euh...
Et si tu nous parlais de la fonction ExecCmd qui n'est ni une fonction de VB ni une fonction de l'Api de Windows (du moins à ma connaissance) ?
Tu as apparemment donné ce nom à une fonction ... (tu aurais pu l'appeler toto...)
Que fait-elle (son code ) ?
|
|
dimanche 16 décembre 2007 à 20:35:23 |
Re : Utilisation de ExecCmd

PROGRAMMIX
|
OUPS,
Effectivement, c'est une fonction qui appelle la procédure suivante qui appelle certaines API :
Public Function ExecCmd(cmdline$) Dim proc As PROCESS_INFORMATION Dim start As STARTUPINFO Dim ret& ' Initialisez la structure STARTUPINFO : start.cb = Len(start)
' Démarrez l'application Shell : ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
' Attendez la fin de l'application Shell : ret& = WaitForSingleObject(proc.hProcess, INFINITE) Call GetExitCodeProcess(proc.hProcess, ret&) Call CloseHandle(proc.hThread) Call CloseHandle(proc.hProcess) ExecCmd = ret&
End Function
Les variables et déclarations sont les suivantes :
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 Long hStdInput As Long hStdOutput As Long hStdError As Long End Type
Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _ ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _ ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _ lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Const NORMAL_PRIORITY_CLASS = &H20& Private Const INFINITE = -1&
Programmix
|
|
dimanche 16 décembre 2007 à 21:20:24 |
Re : Utilisation de ExecCmd

jmfmarques
|
Juste une question :
Si ce n'est que pour faire celà, pourquoi n'utilises-tu pas directement la fonction ShellExecute de l'Api de Windows, voire la fonction Shell de VB ?
genre :
Private RetVal As Long
Private Sub Command1_Click() RetVal = Shell("C:\WINNT\notepad.EXE", 1) ' Run Calculator. End Sub
Et tu ne serais pas "planté" en fermant ta form Fille ...
|
|
dimanche 16 décembre 2007 à 21:30:02 |
Re : Utilisation de ExecCmd

PROGRAMMIX
|
C'est qu'avec ShellExecute, la procédure n'attend pas la fermeture de l'exe avant de continuer.
Or dans mon cas, il me faut attendre avant de pouvoir recharger le fichier avec les données modifiées via l'exe en question.
Programmix
|
|
lundi 17 décembre 2007 à 07:17:57 |
Re : Utilisation de ExecCmd

Renfield
|
vu que tu as le proc.hProcess, tu es en mesure de forcer la fermeture de l'application distante (via API) lorsque l'utilisateur souhaite fermer la form fille.
autre possibilité, empecher la fermeture de la fenetre fille tant que l'appi en question n'est pas fermée (dans QueryUnload)
tiens une version plus complète de ExecCmd:
http://www.vbfrance.com/codes/SHELLANDWAIT-EXECUTER-APPLICATION-ATTENDRE-FIN-RENVOYER-SON-CODE_34867.aspx
|
|
mardi 18 décembre 2007 à 20:03:30 |
Re : Utilisation de ExecCmd

PROGRAMMIX
|
Réponse acceptée !
Merci Renfield pour ton code.
Je n'ai pas testé les possibilités que tu proposes avec le proc.hProcess et le QueryUnload.
Je verrai peut-être cela plus tard, mais pour l'instant, ton code me convient.
Programmix
|
|
Cette discussion est classée dans : application, feuille, utilisation, fille, execcmd
Répondre à ce message
Sujets en rapport avec ce message
utilisation de feuille mdi [ par molbento ]
Bonjour, je développe enn visual basic. J'ai un problème pour développer une application. J'aimerais que pour utilisé mon application l'utilisateur do
Première utilisation d'une application avec une page d'accueil [ par Garba51 ]
Bonsoir tout le monde, Je me suis inscrit sur ce forum car j'ai besoin de votre aide. Je suis entrain de développer une application en VB2010. Cett
Utilisation du "DataSet" [ par math_gury ]
Bonjour à tous,J'utilise actuellement dans mon développement un DataSet et TableAdapter :PiloteTableAdapter.InsertQuery("549784136", "PNo", "Nolly", "
Utilisation d'une userform et application excel cachée [ par silarkhar ]
Bonjour, je crée un formulaire de déclaration avec divers informations à préciser. Pour cela, j'ai créé des userform avec textbox et boutons. Les donn
ouvrir une feuille excel sous vb6 [ par Ackby ]
Bonjour, je voudrais afficher une feuille donnée d'uu fichier excel, je fais ceci : Private Sub Command1_Click() Dim fichier As Excel.Application
Comment créer un log qd utilisation de la base [ par freeman151248 ]
Bonjour, Je voudrais pouvoir creer un fichier log pour savoir qui s'est connecté à une base de donnée. La base est interfacée avec une application V
VB6 et Excel [ par pask25 ]
Bonjour, Ceci est mon premier message qui concerne une demande d'aide de votre part. En principe je vais fouiller dans les forums, les sites et je fi
détruire une feuille à l'éxécution [ par igorprg ]
Bonjour le monde,je suis presque à la fin de ma petite application, et j'aimerai que pendant le lancement de l'application qu'il y ait juste l'image q
Utilisation des codes [ par iznogoud47 ]
Bonjour, Je suppose que la question a du être posée quelques fois mais je ne trouve rien par la recherche ni en fouillant dans le forum. J'aimerai sa
Utilisation du CPU par une application définie [ par websmiley ]
Bonjour à tous.Voilà plusieurs jours que je bloque là-dessus...Je voudrais vérifier l'utilisation CPU d'un processus défini depuis mon application.Par
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
TéLéCHARGEMENTTéLéCHARGEMENT par bernardPare
Cliquez pour lire la suite par bernardPare
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|