Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
Question funcion para invocar comandos con fallos

necesito ayuda para esta funcion....sirve para invocar comandos de consola de windows pero sin que se muestre la ventana negra esa tan fea

la cosa es que lo he convertido de un codigo delphi y no he tenido mucha suerte

a ver si algun manitas puede arreglarmela para que funcione (creo que me he hecho el lio con los ifs y el do while repeat ese

Código PHP:
bool IsWinNT(void)
{
OSVERSIONINFO *OSV;

OSV->dwOSVersionInfoSize sizeof(OSV);
GetVersionEx(OSV);
int Result OSV->dwPlatformId;
return(
Result);
}

void CmdExec(AnsiString Cmd)
{
 
char Buffer[4096];
 
STARTUPINFO si;
 
SECURITY_ATTRIBUTES sa;
 
SECURITY_DESCRIPTOR sd;
 
PROCESS_INFORMATION pi;
THandle newstdinnewstdoutread_stdoutwrite_stdin ;
unsigned int exitcod;
unsigned int bread;
unsigned int avail;

int Result 0;
if (
IsWinNT)
{
InitializeSecurityDescriptor(&sdSECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sdtrueNULLfalse);
sa.lpSecurityDescriptor = &sd;
}
else 
sa.lpSecurityDescriptor NULL;
sa.nLength sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle true;
  if (
CreatePipe(newstdinwrite_stdin, &sa0))
   {
     if (
CreatePipe(read_stdoutnewstdout, &sa0))
      {
         
GetStartupInfo(&si);

          
si.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
          
si.wShowWindow SW_HIDE;
           
si.hStdOutput newstdout;
           
si.hStdError newstdout;
           
si.hStdInput newstdin;

           
Fillchar(Buffersizeof(Buffer), 0);
             
GetEnvironmentVariable('COMSPEC', &Buffersizeof(Buffer) - 1);
         
StrCat(&Buffer,PChar(' /c ' Cmd));
      }
      if (
CreateProcess(NULL, &BufferNULLNULLtrueCREATE_NEW_CONSOLENULLNULLsipi)
      {
          while(
exitcod != STILL_ACTIVE && bread 0)
             {
               
PeekNamedPipe(read_stdout, @BufferSizeOf(Buffer) - 1, @bread, @availnil);
                if 
bread 0 then
                
{
                   
Fillchar(BufferSizeOf(Buffer), 0);
                   
ReadFile(read_stdoutBufferbreadbreadnil);
                   
Result Result String(PChar(&Buffer));
                 }
             }

Application.ProcessMessages;
GetExitCodeProcess(pi.hProcessexitcod);
      }
CloseHandle(read_stdout);
CloseHandle(newstdout);
end;
CloseHandle(newstdin);
CloseHandle(write_stdin);
    }
   } 
Responder Con Cita
  #2  
Antiguo 05-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
Talking

vale, no es necesario ya

lo he solucionado con

Código PHP:
ShellExecute(0NULL"cmd.exe""NETS.bat"NULLSW_HIDE); 
Responder Con Cita
  #3  
Antiguo 06-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
alguna idea para finalizar el proceso de consola en memoria una vez haya terminado???

tengo esto puesto pero parece que no funciona correctamente porque no finaliza la consola

Código PHP:
HWnd h 0

FindWindow(NULL"cmd.exe");
  if (
!= 0)
   {
    
ShowMessage("Cerrando CMD Line");
    
PostMessage(hWM_CLOSE00);
   } 

Última edición por Snaked fecha: 06-04-2017 a las 12:21:27.
Responder Con Cita
  #4  
Antiguo 06-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Snaked Ver Mensaje
necesito ayuda para esta funcion....sirve para invocar comandos de consola de windows pero sin que se muestre la ventana negra esa tan fea

la cosa es que lo he convertido de un codigo delphi y no he tenido mucha suerte

a ver si algun manitas puede arreglarmela para que funcione (creo que me he hecho el lio con los ifs y el do while repeat ese

Código PHP:
bool IsWinNT(void)
{
OSVERSIONINFO *OSV;

OSV->dwOSVersionInfoSize sizeof(OSV);
GetVersionEx(OSV);
int Result OSV->dwPlatformId;
return(
Result);
}

void CmdExec(AnsiString Cmd)
{
 
char Buffer[4096];
 
STARTUPINFO si;
 
SECURITY_ATTRIBUTES sa;
 
SECURITY_DESCRIPTOR sd;
 
PROCESS_INFORMATION pi;
THandle newstdinnewstdoutread_stdoutwrite_stdin ;
unsigned int exitcod;
unsigned int bread;
unsigned int avail;

int Result 0;
if (
IsWinNT)
{
InitializeSecurityDescriptor(&sdSECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sdtrueNULLfalse);
sa.lpSecurityDescriptor = &sd;
}
else 
sa.lpSecurityDescriptor NULL;
sa.nLength sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle true;
  if (
CreatePipe(newstdinwrite_stdin, &sa0))
   {
     if (
CreatePipe(read_stdoutnewstdout, &sa0))
      {
         
GetStartupInfo(&si);

          
si.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
          
si.wShowWindow SW_HIDE;
           
si.hStdOutput newstdout;
           
si.hStdError newstdout;
           
si.hStdInput newstdin;

           
Fillchar(Buffersizeof(Buffer), 0);
             
GetEnvironmentVariable('COMSPEC', &Buffersizeof(Buffer) - 1);
         
StrCat(&Buffer,PChar(' /c ' Cmd));
      }
      if (
CreateProcess(NULL, &BufferNULLNULLtrueCREATE_NEW_CONSOLENULLNULLsipi)
      {
          while(
exitcod != STILL_ACTIVE && bread 0)
             {
               
PeekNamedPipe(read_stdout, @BufferSizeOf(Buffer) - 1, @bread, @availnil);
                if 
bread 0 then
                
{
                   
Fillchar(BufferSizeOf(Buffer), 0);
                   
ReadFile(read_stdoutBufferbreadbreadnil);
                   
Result Result String(PChar(&Buffer));
                 }
             }

Application.ProcessMessages;
GetExitCodeProcess(pi.hProcessexitcod);
      }
CloseHandle(read_stdout);
CloseHandle(newstdout);
end;
CloseHandle(newstdin);
CloseHandle(write_stdin);
    }
   } 
Y partiendo de una función publicada en el mismo foro, ¿no crees que hubiese sido elegante citar la fuente y su autor? Ejecutar comando y capturar su salida (Domingo Seoane)

Saludos.
Responder Con Cita
  #5  
Antiguo 06-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
querido escafandra..... yo con darle las gracias a dios por poder respirar creo que cumplo como creyente fiel......

(mira que estais quisquillosos X-D)

pero en fin, ya no os molesto mas no vaya a ser que os de un acceso de furia porque tengo tendencia a mandar a tomar por culo a la gente que me toca las pelotas cuando no hay necesidad de tocarlas

creo que no sois mi tipo de gente asi que buen viaje por la vida chicos

Última edición por Snaked fecha: 06-04-2017 a las 22:44:59.
Responder Con Cita
  #6  
Antiguo 06-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Snaked Ver Mensaje
querido escafandra..... yo con darle las gracias a dios por poder respirar creo que cumplo como creyente fiel......

(mira que estais quisquillosos X-D)

pero en fin, ya no os molesto mas no vaya a ser que os de un acceso de furia porque tengo tendencia a mandar a tomar por culo a la gente que me toca las pelotas cuando no hay necesidad de tocarlas

creo que no sois mi tipo de gente asi que buen viaje por la vida chicos
Eres de los que tienen claro que el código en los foros aparece por ciencia infusa y que está ahí para que "gente" como tu lo tome sin mirar más. Para ti no significa nada el esfuerzo de parir un trozo de código y la generosidad de compartirlo. En este caso se trata de código de seoane en este mismo foro, pero en éste otro caso has tenido la delicadeza de copiarlo de otro foro, y traerlo aquí para preguntar como traducirlo sin citar su origen, probablemente por torpeza no viste que su autor participa en ambos sitios. Se da la circunstancia que ese código es mio, y como te dije es libre pero una mínima educación exige citar su origen. Si prefieres dar las gracias a Dios por respirar me parece bien pero la educación se muestra con tus congéneres. Como dice el saber popular en mi tierra, "Es de bien nacido ser agradecido". Pero seguro que esa actitud tuya te dará muchos y buenos frutos en la vida.



Saludos.
Responder Con Cita
  #7  
Antiguo 07-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Snaked Ver Mensaje
querido escafandra..... yo con darle las gracias a dios por poder respirar creo que cumplo como creyente fiel......
(mira que estais quisquillosos X-D)
pero en fin, ya no os molesto mas no vaya a ser que os de un acceso de furia porque tengo tendencia a mandar a tomar por culo a la gente que me toca las pelotas cuando no hay necesidad de tocarlas
creo que no sois mi tipo de gente asi que buen viaje por la vida chicos
¿Esos son los modales que te enseñan tus padres, o han sido tus maestros?
Has sido baneado, que te vaya bien por la vida.
Responder Con Cita
  #8  
Antiguo 07-04-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.264
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Snaked Ver Mensaje
creo que no sois mi tipo de gente asi que buen viaje por la vida chicos
Al final no somos tan diferentes, tú tampoco eres del tipo de gente que gusta por estos foros.
Buen viaje para ti también.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Invocar Funcion PHP desde form html jfontane PHP 6 14-11-2016 22:11:23
Invocar Corrector ortografico de Word para edit y memos Lizette Varios 9 02-05-2010 04:19:48
Comandos SQL para añadir o modificar _Willa SQL 3 29-03-2007 13:38:23
shell para comandos del dos sarga API de Windows 1 16-04-2004 03:55:33
Comandos para Epson TM-U220B MAGRANA Impresión 3 12-01-2004 09:56:45


La franja horaria es GMT +2. Ahora son las 07:59:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi