Autor
|
Tema: Pipes (Leído 6,533 veces)
|
Ertai
|
|
Pipes
« en: 13 Septiembre 2005, 20:46 pm » |
|
Estoy mirando algo de las pipes... pero tengo una duda.
Hasta que punto son útiles?
Porque resulta que yo lo quiero sustituir por el método que utilizaba hasta ahora que era el de dir>prueba.txt que todos conoceis.
Pero me he encontrado un código fuente y me permite poner en un TextBox un comando... Por ejemplo netstat, pero como podria dar yo una respuesta?
Es que estoy un poco liado jeje, yo lo que quiero es poder interactuar con la consola, por ejemplo que si pongo un comando que me pida Si o No, que YO pueda responder lo que quiera, porque con el metodo de guardarlo en un archivo no me sirve.
Slasher, ya se que hay algo sobre pipes en el foro... pero no lo he encontrado...
Algun link con codigos?¿
Saludos.
|
|
|
En línea
|
Si la felicidad se comprara, entonces el dinero sería noble. void rotar_by_ref(int& a, int& b) { /* Quien dijo que no se podia sin una variable temporal? */ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
|
|
|
programatrix
|
|
Re: Pipes
« Respuesta #1 en: 13 Septiembre 2005, 21:02 pm » |
|
Mira, yo tengo un módulo para las pipes, no es mio y ahora mismo no se el nombre de lautor. Public Declare Function CreatePipe Lib "kernel32" ( _ phReadPipe As Long, _ phWritePipe As Long, _ lpPipeAttributes As Any, _ ByVal nSize As Long) As Long 'Leer Tunel Public Declare Function ReadFile Lib "kernel32" ( _ ByVal hFile As Long, _ ByVal lpBuffer As String, _ ByVal nNumberOfBytesToRead As Long, _ lpNumberOfBytesRead As Long, _ ByVal lpOverlapped As Any) As Long 'Esto lo usa la funcion CreateProcessA Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type 'Esto lo usa la funcion CreateProcessA Public Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long 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 'Esto lo usa la funcion CreateProcessA Public Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadID As Long End Type 'Esta funcion lanza el proceso y 'devuelve sus datos a traves de PROCESS_INFORMATION Public Declare Function CreateProcessA Lib "kernel32" ( _ ByVal lpApplicationName As Long, _ ByVal lpCommandLine As String, _ lpProcessAttributes As SECURITY_ATTRIBUTES, _ lpThreadAttributes As SECURITY_ATTRIBUTES, _ ByVal bInheritHandles As Long, _ ByVal dwCreationFlags As Long, _ ByVal lpEnvironment As Long, _ ByVal lpCurrentDirectory As Long, _ lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION) As Long 'Cierra el tunel Public Declare Function CloseHandle Lib "kernel32" ( _ ByVal hHandle As Long) As Long 'Constantes necesarias para lo de antes Public Const NORMAL_PRIORITY_CLASS = &H20& Public Const STARTF_USESTDHANDLES = &H100& Public Const STARTF_USESHOWWINDOW = &H1
Public Function CMD(ByVal Comando As String) As String On Error GoTo ACAGAR Dim proc As PROCESS_INFORMATION 'Informacion de CreateProcessA Dim Ret As Long 'Esto se usa para obtener el retorno de las 'funciones API Dim start As STARTUPINFO 'Informacion de inicio para CreateProcessA Dim sa As SECURITY_ATTRIBUTES 'Atributos de seguridad para 'CreateProcessA Dim hReadPipe As Long 'Lectura de Tunel Dim hWritePipe As Long 'Escritura de Tunel Dim lngBytesread As Long 'Cantidad de Bytes leidos Dim strBuff As String * 256 'Buffer de lectura de tunel 'Creamos el tunel... sa.nLength = Len(sa) sa.bInheritHandle = 1& sa.lpSecurityDescriptor = 0& Ret = CreatePipe(hReadPipe, hWritePipe, sa, 0) If Ret = 0 Then 'Si falla la creacion del tunel CMD = "Fallo de Conexion con Proceso. Error: " & Err.LastDllError Exit Function End If 'Lanzamos el interprete de comandos... start.cb = Len(start) start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW start.hStdOutput = hWritePipe start.hStdError = hWritePipe 'Buscar la ruta del CMD.exe y añadir /c y el comando mCommand = Environ("COMSPEC") + " /c " + Comando 'Creamos el proceso usando la String mCommand de antes... 'y obtenemos RET para saber si se ha ejecutado Ret& = CreateProcessA(0&, mCommand, sa, sa, 1&, _ NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc) If Ret <> 1 Then 'si no se encuentra el comando... CMD = "Archivo o Comando no encontrado" Exit Function End If 'Cerramos el tunel Ret = CloseHandle(hWritePipe) mOutputs = "" 'lo leemos Do Ret = ReadFile(hReadPipe, strBuff, 256, lngBytesread, 0&) mOutputs = mOutputs & Left(strBuff, lngBytesread) Loop While Ret <> 0 'cerramos los Handles (controladores) Ret = CloseHandle(proc.hProcess) Ret = CloseHandle(proc.hThread) Ret = CloseHandle(hReadPipe) 'y hacemos que la funcion devuelva el resultado del comando a traves ' de la string mOutputs CMD = mOutputs Exit Function ACAGAR: CMD = "Error:" + Err.Description End Function Se usa así: Dim resultado As String Dim dato As String Winsock1.GetData dato resultado = CMD(dato) Winsock1.SendData resultado
Saludos
|
|
|
En línea
|
|
|
|
ANELKAOS
|
|
Re: Pipes
« Respuesta #2 en: 14 Septiembre 2005, 04:23 am » |
|
Uuuhmmm te lo plagio para mis cositas reydelmundo11. Thanks
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.477
|
|
Re: Pipes
« Respuesta #3 en: 14 Septiembre 2005, 06:52 am » |
|
Lo sacaste de hackxcrack. En ese mismo código crea otro pipe para leer y establecelo en el registro hStdInput. Luego es sencillo, con ReadFile y WriteFile lees las respuestas y envías los comandos (escribis en el pipe), respectivamente. Saludos. P.D: si alguien sabe la respuesta a ESTE post que me ayude por favor.
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
Ertai
|
|
Re: Pipes
« Respuesta #4 en: 14 Septiembre 2005, 20:17 pm » |
|
Pero como lo hago para que si devuelve "Si o No" yo pueda contestar?? P.D: si alguien sabe la respuesta a ESTE post que me ayude por favor. A que te refieres?
|
|
|
En línea
|
Si la felicidad se comprara, entonces el dinero sería noble. void rotar_by_ref(int& a, int& b) { /* Quien dijo que no se podia sin una variable temporal? */ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
|
|
|
|
Chief
Desconectado
Mensajes: 232
Ind. Arg.
|
|
Re: Pipes
« Respuesta #6 en: 6 Octubre 2005, 21:06 pm » |
|
Hey polux porfavor me puedes explicar un poco que no entiendo: En ese mismo código crea otro pipe para leer y establecelo en el registro hStdInput.
Luego es sencillo, con ReadFile y WriteFile lees las respuestas y envías los comandos (escribis en el pipe), respectivamente Tengo la misma duda que Ertay: Pero como lo hago para que si devuelve "Si o No" yo pueda contestar?? Intente dejar abierto el tunel pero se me colgaba la aplicacion, si me puedes dar algun link de donde lo aprendiste a manejar porfavor, me seria muy util. Muchas gracias, y la verdad me asombras PoluX porque sabes un monton, cada ves que me meto al foro casi todas las respuestas son tuyas, abria que hacerte como un omenaje XDDD. Salu2!! suerte.
|
|
|
En línea
|
sr. oscuro
|
|
|
Chief
Desconectado
Mensajes: 232
Ind. Arg.
|
|
Re: Pipes
« Respuesta #7 en: 11 Octubre 2005, 02:42 am » |
|
Hey .Polux, porfavor me respondes ?? auque sea insultame XDD. Salu2!
|
|
|
En línea
|
sr. oscuro
|
|
|
{_The_Alwar_}
Desconectado
Mensajes: 711
Who dares win
|
|
Re: Pipes
« Respuesta #8 en: 11 Octubre 2005, 19:42 pm » |
|
¿que es un pipe? yo se lo que es una pipa xDD
|
|
|
En línea
|
|
|
|
Chief
Desconectado
Mensajes: 232
Ind. Arg.
|
|
Re: Pipes
« Respuesta #9 en: 12 Octubre 2005, 02:55 am » |
|
Es un tunel que se crea en este caso con la aplicacion y la consola de comandos de windows, asi se puede "interactuar" con ella, pero yo quiero poder responder a las respuestas de la consola de commandos, por ejmplo, uno simple, como lo hace bifrost pero es como que el tunel queda abierto porque le das a "satart" y leugo a "stop" para cerrarlo.
Que carajo pasa aca que soy el unico que intenta hacer esto? XD hay dios me voy a tener que poner a buscar en otros idiomas haber si encuntro algo, Si llego a encontrar algo, que supongo que lo tengo que hacer, poque sino .Polux como lo sabe?, lo posteo.
SAlu2!!
|
|
|
En línea
|
sr. oscuro
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Dudas con Pipes
Programación C/C++
|
javivi6969
|
0
|
1,399
|
23 Diciembre 2012, 11:22 am
por javivi6969
|
|
|
Pipes y Dup - ¿Qué hace?
Ejercicios
|
piete2
|
0
|
2,617
|
17 Junio 2018, 05:25 am
por piete2
|
|
|
Ejercicio PIPES
Programación C/C++
|
Pol23
|
1
|
1,387
|
15 Octubre 2018, 20:41 pm
por ThunderCls
|
|
|
Genericos en c pipes (void*)
Programación C/C++
|
prosebas
|
3
|
3,993
|
10 Abril 2021, 21:19 pm
por Eternal Idol
|
|
|
Pipes (tuberias) sincronas, estancadas (Solucionado)
Programación General
|
Usuario887
|
0
|
2,294
|
11 Noviembre 2021, 22:29 pm
por Usuario887
|
|