DOS - PIPE : UN DOS PIPE REVU ET CORRIGÉ EN OCX DONC FACILE À UTILISER
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 2009
-
15 févr. 2005 à 16:54
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
15 mars 2010 à 09:30
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 15 mars 2010 à 09:30
ben là :
DosPipe.dll
linkdu64
Messages postés2Date d'inscriptiondimanche 26 juillet 2009StatutMembreDernière intervention24 juin 2010 14 mars 2010 à 12:23
ou est le ocx ? svp
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 avril 2009 à 10:48
pas sur de bien comprendre, mais je pense que la source que je t'indique va bien.
si tu génère ton .exe en tant qu'executable en mode console...
ce que tu va y ecrire (donc, ton menu, je suppose)
s'affichera dans la fenetre console courante, et non dans une nouvelle.
cs_mmiguel
Messages postés21Date d'inscriptionjeudi 17 mars 2005StatutMembreDernière intervention19 août 2009 2 avril 2009 à 10:33
Ce que je veux dire c'est que si je lance manuellement un logiciel de type console sous cmd, je vois le menu de mon programme. Tandis que si je fais cmd/c c:\monprogramme.exe, je ne vois pas le menu de mon programme.
Avez vous une idée?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 avril 2009 à 09:57
cs_mmiguel
Messages postés21Date d'inscriptionjeudi 17 mars 2005StatutMembreDernière intervention19 août 2009 2 avril 2009 à 09:21
Bonjour, est il possible de lancer un programme avec un affichage dos depuis ce code?
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 6 déc. 2006 à 20:51
Re après pas mal de temps d'absence (désolé)
le but est de répondre à cet problématique d'exécution d'une commande du style "DIR".
la solution (testée pour sur XP) :
au lieu de faire "dir c:" il faut faire : "cmd /c dir c:"
en effet le dospipe execute un programme et en récupère les messages donc c'est le même principe ici on execute le programme "cmd" avec le paramètre "/c" pour exécuter la commande et quitter puis ajouter la commande souhaitée (ici "dir c:")
note:
je pense que pour une exécution sur un Windows98 il doit faloir faire "command.com /c dir c:" ou quelque chose du genre.
voilà, je suis repassé sur ce code vite fait alors je me suis dit que cela pouvait servir de fournir l'info ;-)
@+ et bon dev @ tous !!!
cs_xon
Messages postés13Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention 9 septembre 2011 2 nov. 2006 à 20:11
Très bonne idée... ! Mais ne fonctionne pas avec les fichiers de commande (.CMD), par exemple en plaçant une commande "DIR C:" dans un fichier .CMD. Solution ? Merci de ta réponse
tictac01
Messages postés5Date d'inscriptionjeudi 6 janvier 2005StatutMembreDernière intervention17 juillet 2006 14 juil. 2006 à 09:11
bonjour tout le monde
je veux executer un programme puis le suivre d'une commande propre
a ce programme tout ça dans une meme fenetre dos depuis VB
merci
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 2 déc. 2005 à 18:28
>>Bing2000
Salut, tu peux pas passer ton password en paramètre lors de l'appel?
Bing2000
Messages postés18Date d'inscriptionlundi 28 octobre 2002StatutMembreDernière intervention12 mars 2007 2 déc. 2005 à 15:22
alors moi j'ai une petite question par rapport à ce bout de code qui me semble trèa intéressant sauf que dans mon cas avant de pouvoir récupérer la valeur je dois saisir un mot de passe et seulement ensuite après j'ai une valeur.
Alors comment faire. Si je lance ce bout de code, il bloque à la lecture du pipe. Comment puis-je faire pour le faire suelement lire dès que j'ai tapé monn pass.?
Merci d'avance
BZY1
Messages postés214Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention12 avril 2008 10 mai 2005 à 16:50
salut j'utilise windows 2000 au boulot et j'ai essayé le prog test qui est en commentaire et ca marche pas est ce que tu sais d'ou ca peut venir?
j'ai aussi le meme probleme avec la fonction shutdown en reseau....
sinon c super interessant ça va m'aider dans mes prog a venir merci
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 25 avril 2005 à 14:15
Salut a tous,
Très présent sur le réseau je me permets de vous demandez un petit geste.
Voilà un concour est ouvert pour des jeunse artistes musicaux et un groupe me tien particulièrement à coeur puiske ma cousine en fait partie.
et de voter si cela vous plait , pour le groupe Lezard. L'inscription est gratuite et on peut voter une fois par jour....s'il vous plait c'est tellement difficile de percer dans ce millieux alors je vous demande un petit geste...
les votes s'arretent le 13 mai
merci pour eux
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 11 mars 2005 à 13:19
merci
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 10 mars 2005 à 17:20
alors :
1-j'ai fait la modif de ton petit 1, c'est simplement un "Text1.SelStart = Len(Text1.Text)" après le Text1.Refresh
pour le point numéro 2....je me suis pas poser la question , j'y réfléchirai...
@+
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 10 mars 2005 à 09:12
Yomm
je viens de lancer ton nouveau prog.. et ça marche ;o)))
Mais deux questions / commentaires
1. Serait il possible, lorsque tu lances plusieurs commandes que le textbox descende toujours à la fin de la dernire réponse. ?
2. lorsque je lance une commande du type Dir, il me répond "fichier ou commande non trouvé".
Comment lancer ce type de commandes ?
Drissou
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 9 mars 2005 à 16:55
drissou j'ai fait une modif , cela corrigera surement ton pb!
@+
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 25 févr. 2005 à 09:51
c'est étrange car d'après la MSDN :
---------------------------------------------------------------
Requirements
Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
Header Declared in Winbase.h; include Windows.h.
à la rigueur il faudrait que tu fasses un msgbox err.LastDllError afin de savoir pourquoi l'API GetFileSize te retourne INVALID_FILE_SIZE (= -1) après faut trouver sur le net la signification de ce code ....
affaire à suivre
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 23 févr. 2005 à 15:32
Dans ligne
toto = GetFileSize(HLecturePipe, 0&)
après exécution toto est à -1..
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 23 févr. 2005 à 11:55
essai de remplacer la function:
Public Function ExecuteCommand() As String
par : (et tiens moi au courant)
---------------------------------------------------------------
Public Function ExecuteCommand() As String
Dim Result As Long
Dim Start As STARTUPINFO
Dim sa As SECURITY_ATTRIBUTES
Dim LngOctetRec As Long
Dim strBuff As String
' Dim strBuff As String * 255
mOutputs = ""
If Len(mCommand) = 0 Then
MsgBox "La commande à lancer n'a pas été renseignée!!!", vbCritical
Exit Function
End If
'Renseignement de la structure SECURITY_ATTRIBUTES
sa.nLength = Len(sa)
sa.bInheritHandle = 1&
sa.lpSecurityDescriptor = 0&
'Création du "Pipe" et Test du résultat
Result = CreatePipe(HLecturePipe, HEcriturePipe, sa, 8000)
DoEvents
If Result = 0 Then
MsgBox "Erreur de création du Pipe. Erreurr: " & Err.LastDllError, vbCritical
Exit Function
End If
'Renseignement de la structure STARTUPINFO
Start.cb = Len(Start)
Start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
Start.hStdOutput = HEcriturePipe
Start.hStdError = HEcriturePipe
Start.wShowWindow = SW_HIDE
'Création du process = Exécution de la commande
Result = CreateProcessA(0&, mCommand, sa, sa, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, ProcI)
WaitForSingleObject ProcI.hProcess, INFINITE
If Result <> 1 Then
'Si une erreur, fermeture des Handles
Call CloseHandle(ProcI.hProcess)
Call CloseHandle(ProcI.hThread)
Call CloseHandle(HLecturePipe)
Call CloseHandle(HEcriturePipe)
MsgBox "Fichier ou commande non trouvé.", vbCritical
Exit Function
End If
'Lecture du "pipe" en lecture pour récupérer les infos !
Dim toto As Long
toto = GetFileSize(HLecturePipe, 0&)
If toto > 0 Then
' If GetFileSize(HLecturePipe, 0) > 0 Then
' Do
'frmMain.EcritureLog "avant readfile"
strBuff = String(toto + 1, vbNullChar)
Result = ReadFile(HLecturePipe, strBuff, toto, LngOctetRec, 0&)
' strBuff = String(255, vbNullChar)
' Result = ReadFile(HLecturePipe, strBuff, 255, LngOctetRec, 0&)
'frmMain.EcritureLog "après readfile"
mOutputs = mOutputs & Left(strBuff, LngOctetRec)
RaiseEvent ReceiveOutputs(Left(strBuff, LngOctetRec))
'frmMain.EcritureLog "LngOctetRec" & CStr(LngOctetRec)
DoEvents
' If LngOctetRec < 255 Then Exit Do
' Loop While Result <> 0
End If
'Fermeture de tous les Handles
Call CloseHandle(ProcI.hProcess)
Call CloseHandle(ProcI.hThread)
Call CloseHandle(HLecturePipe)
Call CloseHandle(HEcriturePipe)
'Renvoie du résultat
ExecuteCommand = mOutputs
End Function
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 22 févr. 2005 à 18:26
Bonjour,
oui je viens de le faire et j'ai relancé en mode pas à pas
et la condition
GetFileSize(HLecturePipe, 0) > 0
n'est pas remplie donc je ne récupère rien..
Drissou
mythic_kruger
Messages postés241Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention10 novembre 2005 22 févr. 2005 à 13:24
Super programme. D'ailleurs un excellent exemple pour créer une dll ActiveX et son groupe de projet adequat.
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 21 févr. 2005 à 17:38
tu as bien fait un regsvr32 pour enregistrer la dll ?
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 21 févr. 2005 à 13:47
Bonjour
je viens d'essayer sur W98 SE et je ne vois rien dans le textbox noir ..
Quid ?
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 15 févr. 2005 à 19:17
Et donc maintenant ça marche sans problème (dsl je ne teste pas j'ai déjà vu la source d'origine) ?
Parce que je trouve ça super interessant.
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 15 févr. 2005 à 18:42
>>Urgo
en effet il semble en effet que tu es retrouvé le source d'origine, merci
Pour info : ce n'est pas une copie (je suis pas du genre à revendiquer un source alors qu'il n'est pas de moi LOL )
En effet, j'avais pas mal de problème sous windows 98, notament lorsque je lancais une appli via le dos pipe, il s'executait mais ne me rendait jamais la main. un ctrl+alt+sup et fin de tache s'imposait...puis miracle une fois la même commande relancée cela marchait très bien...je redémarrais la machine et hop un ctrl+alt+sup s'imposait de nouveau...donc voilà j'ai pris les bases et j'ai reposté pensant que d'autres avaient peut être rencontré ce problème...j'ai modifié le source d'origine pour moi donc je dois pas etre le seul ayant besoin des modif non ?
merci encore
et donc merci à fredlynx pour le source d'origine
@+
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 15 févr. 2005 à 16:54
15 mars 2010 à 09:30
DosPipe.dll
14 mars 2010 à 12:23
2 avril 2009 à 10:48
si tu génère ton .exe en tant qu'executable en mode console...
ce que tu va y ecrire (donc, ton menu, je suppose)
s'affichera dans la fenetre console courante, et non dans une nouvelle.
2 avril 2009 à 10:33
Avez vous une idée?
2 avril 2009 à 09:57
voir:
http://www.vbfrance.com/codes/APPLICATION-TYPE-CONSOLE-ADDIN_41156.aspx
2 avril 2009 à 09:21
6 déc. 2006 à 20:51
le but est de répondre à cet problématique d'exécution d'une commande du style "DIR".
la solution (testée pour sur XP) :
au lieu de faire "dir c:" il faut faire : "cmd /c dir c:"
en effet le dospipe execute un programme et en récupère les messages donc c'est le même principe ici on execute le programme "cmd" avec le paramètre "/c" pour exécuter la commande et quitter puis ajouter la commande souhaitée (ici "dir c:")
note:
je pense que pour une exécution sur un Windows98 il doit faloir faire "command.com /c dir c:" ou quelque chose du genre.
voilà, je suis repassé sur ce code vite fait alors je me suis dit que cela pouvait servir de fournir l'info ;-)
@+ et bon dev @ tous !!!
2 nov. 2006 à 20:11
14 juil. 2006 à 09:11
je veux executer un programme puis le suivre d'une commande propre
a ce programme tout ça dans une meme fenetre dos depuis VB
merci
2 déc. 2005 à 18:28
Salut, tu peux pas passer ton password en paramètre lors de l'appel?
2 déc. 2005 à 15:22
Alors comment faire. Si je lance ce bout de code, il bloque à la lecture du pipe. Comment puis-je faire pour le faire suelement lire dès que j'ai tapé monn pass.?
Merci d'avance
10 mai 2005 à 16:50
j'ai aussi le meme probleme avec la fonction shutdown en reseau....
sinon c super interessant ça va m'aider dans mes prog a venir merci
25 avril 2005 à 14:15
Très présent sur le réseau je me permets de vous demandez un petit geste.
Voilà un concour est ouvert pour des jeunse artistes musicaux et un groupe me tien particulièrement à coeur puiske ma cousine en fait partie.
Il s'agit d'un concour important sur RTL2...
je vous demande simplement d'aller sur le lien suivant :
http://www.rtl2.fr/jeux/playlist/votes_prt2005.asp
et de voter si cela vous plait , pour le groupe Lezard. L'inscription est gratuite et on peut voter une fois par jour....s'il vous plait c'est tellement difficile de percer dans ce millieux alors je vous demande un petit geste...
les votes s'arretent le 13 mai
merci pour eux
11 mars 2005 à 13:19
10 mars 2005 à 17:20
1-j'ai fait la modif de ton petit 1, c'est simplement un "Text1.SelStart = Len(Text1.Text)" après le Text1.Refresh
pour le point numéro 2....je me suis pas poser la question , j'y réfléchirai...
@+
10 mars 2005 à 09:12
je viens de lancer ton nouveau prog.. et ça marche ;o)))
Mais deux questions / commentaires
1. Serait il possible, lorsque tu lances plusieurs commandes que le textbox descende toujours à la fin de la dernire réponse. ?
2. lorsque je lance une commande du type Dir, il me répond "fichier ou commande non trouvé".
Comment lancer ce type de commandes ?
Drissou
9 mars 2005 à 16:55
@+
25 févr. 2005 à 09:51
---------------------------------------------------------------
Requirements
Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
Header Declared in Winbase.h; include Windows.h.
Library Link to Kernel32.lib.
DLL Requires Kernel32.dll.
---------------------------------------------------------------
donc ça devrait fonctionner....
à la rigueur il faudrait que tu fasses un msgbox err.LastDllError afin de savoir pourquoi l'API GetFileSize te retourne INVALID_FILE_SIZE (= -1) après faut trouver sur le net la signification de ce code ....
affaire à suivre
23 févr. 2005 à 15:32
toto = GetFileSize(HLecturePipe, 0&)
après exécution toto est à -1..
23 févr. 2005 à 11:55
Public Function ExecuteCommand() As String
par : (et tiens moi au courant)
---------------------------------------------------------------
Public Function ExecuteCommand() As String
Dim Result As Long
Dim Start As STARTUPINFO
Dim sa As SECURITY_ATTRIBUTES
Dim LngOctetRec As Long
Dim strBuff As String
' Dim strBuff As String * 255
mOutputs = ""
If Len(mCommand) = 0 Then
MsgBox "La commande à lancer n'a pas été renseignée!!!", vbCritical
Exit Function
End If
'Renseignement de la structure SECURITY_ATTRIBUTES
sa.nLength = Len(sa)
sa.bInheritHandle = 1&
sa.lpSecurityDescriptor = 0&
'Création du "Pipe" et Test du résultat
Result = CreatePipe(HLecturePipe, HEcriturePipe, sa, 8000)
DoEvents
If Result = 0 Then
MsgBox "Erreur de création du Pipe. Erreurr: " & Err.LastDllError, vbCritical
Exit Function
End If
'Renseignement de la structure STARTUPINFO
Start.cb = Len(Start)
Start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
Start.hStdOutput = HEcriturePipe
Start.hStdError = HEcriturePipe
Start.wShowWindow = SW_HIDE
'Création du process = Exécution de la commande
Result = CreateProcessA(0&, mCommand, sa, sa, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, ProcI)
WaitForSingleObject ProcI.hProcess, INFINITE
If Result <> 1 Then
'Si une erreur, fermeture des Handles
Call CloseHandle(ProcI.hProcess)
Call CloseHandle(ProcI.hThread)
Call CloseHandle(HLecturePipe)
Call CloseHandle(HEcriturePipe)
MsgBox "Fichier ou commande non trouvé.", vbCritical
Exit Function
End If
'Lecture du "pipe" en lecture pour récupérer les infos !
Dim toto As Long
toto = GetFileSize(HLecturePipe, 0&)
If toto > 0 Then
' If GetFileSize(HLecturePipe, 0) > 0 Then
' Do
'frmMain.EcritureLog "avant readfile"
strBuff = String(toto + 1, vbNullChar)
Result = ReadFile(HLecturePipe, strBuff, toto, LngOctetRec, 0&)
' strBuff = String(255, vbNullChar)
' Result = ReadFile(HLecturePipe, strBuff, 255, LngOctetRec, 0&)
'frmMain.EcritureLog "après readfile"
mOutputs = mOutputs & Left(strBuff, LngOctetRec)
RaiseEvent ReceiveOutputs(Left(strBuff, LngOctetRec))
'frmMain.EcritureLog "LngOctetRec" & CStr(LngOctetRec)
DoEvents
' If LngOctetRec < 255 Then Exit Do
' Loop While Result <> 0
End If
'Fermeture de tous les Handles
Call CloseHandle(ProcI.hProcess)
Call CloseHandle(ProcI.hThread)
Call CloseHandle(HLecturePipe)
Call CloseHandle(HEcriturePipe)
'Renvoie du résultat
ExecuteCommand = mOutputs
End Function
22 févr. 2005 à 18:26
oui je viens de le faire et j'ai relancé en mode pas à pas
et la condition
GetFileSize(HLecturePipe, 0) > 0
n'est pas remplie donc je ne récupère rien..
Drissou
22 févr. 2005 à 13:24
21 févr. 2005 à 17:38
21 févr. 2005 à 13:47
je viens d'essayer sur W98 SE et je ne vois rien dans le textbox noir ..
Quid ?
15 févr. 2005 à 19:17
Parce que je trouve ça super interessant.
15 févr. 2005 à 18:42
en effet il semble en effet que tu es retrouvé le source d'origine, merci
Pour info : ce n'est pas une copie (je suis pas du genre à revendiquer un source alors qu'il n'est pas de moi LOL )
En effet, j'avais pas mal de problème sous windows 98, notament lorsque je lancais une appli via le dos pipe, il s'executait mais ne me rendait jamais la main. un ctrl+alt+sup et fin de tache s'imposait...puis miracle une fois la même commande relancée cela marchait très bien...je redémarrais la machine et hop un ctrl+alt+sup s'imposait de nouveau...donc voilà j'ai pris les bases et j'ai reposté pensant que d'autres avaient peut être rencontré ce problème...j'ai modifié le source d'origine pour moi donc je dois pas etre le seul ayant besoin des modif non ?
merci encore
et donc merci à fredlynx pour le source d'origine
@+
15 févr. 2005 à 16:54
http://www.vbfrance.com/code.aspx?ID=6395
(peut-être celui à l'origine de ton prog??)