Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Ejecutar comando y capturar su salida

Esta funcion nos permite ejecutar un comando como si nos encontraramos en una consola de DOS, y captura la salida en un string.

Código Delphi [-]
function IsWinNT: boolean;
var
  OSV: OSVERSIONINFO;
begin
  OSV.dwOSVersionInfoSize := sizeof(osv);
  GetVersionEx(OSV);
  result := OSV.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;

function CmdExec(Cmd: string): string;
var
  Buffer: array[0..4096] of Char;
  si: STARTUPINFO;
  sa: SECURITY_ATTRIBUTES;
  sd: SECURITY_DESCRIPTOR;
  pi: PROCESS_INFORMATION;
  newstdin, newstdout, read_stdout, write_stdin: THandle;
  exitcod, bread, avail: Cardinal;
begin
  Result:= '';
  if IsWinNT then
  begin
    InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@sd, true, nil, false);
    sa.lpSecurityDescriptor := @sd;
  end
  else sa.lpSecurityDescriptor := nil;
  sa.nLength := sizeof(SECURITY_ATTRIBUTES);
  sa.bInheritHandle := TRUE;
  if CreatePipe(newstdin, write_stdin, @sa, 0) then
  begin
    if CreatePipe(read_stdout, newstdout, @sa, 0) then
    begin
      GetStartupInfo(si);
      with si do
      begin
        dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
        wShowWindow := SW_HIDE;
        hStdOutput := newstdout;
        hStdError := newstdout;
        hStdInput := newstdin;
      end;
      Fillchar(Buffer, SizeOf(Buffer), 0);
      GetEnvironmentVariable('COMSPEC', @Buffer, SizeOf(Buffer) - 1);
      StrCat(@Buffer,PChar(' /c ' + Cmd));
      if CreateProcess(nil, @Buffer, nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, si, pi) then
      begin
        repeat
          PeekNamedPipe(read_stdout, @Buffer, SizeOf(Buffer) - 1, @bread, @avail, nil);
          if bread > 0 then
          begin
            Fillchar(Buffer, SizeOf(Buffer), 0);
            ReadFile(read_stdout, Buffer, bread, bread, nil);
            Result:= Result + String(PChar(@Buffer));
          end;
          Application.ProcessMessages;
          GetExitCodeProcess(pi.hProcess, exitcod);
        until (exitcod <> STILL_ACTIVE) and (bread = 0);
      end;
      CloseHandle(read_stdout);
      CloseHandle(newstdout);
    end;
    CloseHandle(newstdin);
    CloseHandle(write_stdin);
  end;
end;

Ejemplo de uso:
Código Delphi [-]
  ShowMessage(CmdExec('dir c:\'));
  ShowMessage(CmdExec('netstat -a -n'));
Responder Con Cita
  #2  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Qué bueno Seoane. ;)
Responder Con Cita
  #3  
Antiguo 28-04-2007
JGCG JGCG is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
JGCG Va por buen camino
Gracias!!! por el truco lo voy probar
Responder Con Cita
  #4  
Antiguo 19-09-2008
f.gimeno f.gimeno is offline
Registrado
 
Registrado: abr 2008
Posts: 1
Poder: 0
f.gimeno Va por buen camino
Magistral!
Domingo: Tu programa me ha venido de perlas. Estoy ultimando un programa de ajedrez que llama a Crafty y gracias a tu "invento" consigo leer lo que Crafty da (funciona como una consola) pero no consigo enviarle mensajes ("ordenes") por el pipe.
Se te ocurre cómo hacerlo??
¿Me puedes contestar a xxxxxxxxxxx?
Creo que si no lo resuelvo me va da algo...

Última edición por Casimiro Notevi fecha: 07-11-2017 a las 12:02:34.
Responder Con Cita
  #5  
Antiguo 29-09-2013
jgutti jgutti is offline
Miembro
 
Registrado: may 2003
Posts: 189
Poder: 22
jgutti Va por buen camino
como ejecutar esta función con permisos de adminstrador en Windows 7, si paso como parámetros un archivo .bat

saludos
jgutti
Responder Con Cita
  #6  
Antiguo 30-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
jgutti,

Cita:
Empezado por jgutti
...¿Como ejecutar esta función con permisos de Administrador en Windows 7?...
Revisa el Msg #2 de este link:
Cita:
Ejecutar aplicación como Administrador en Windows 7 : http://www.clubdelphi.com/foros/show...ght=RunAsAdmin
Espero sea útil

Nelson.
Responder Con Cita
  #7  
Antiguo 07-11-2017
dandyuno dandyuno is offline
Miembro
NULL
 
Registrado: sep 2015
Posts: 18
Poder: 0
dandyuno Va por buen camino
Saludos, he probado este codigo del truco en un memo, el resultado no es el esperado ya que el comando que envio es 'dir' y el resultado es 䔠潶畬敭敤氠⁡湵摩摡䌠渠楴湥⁥瑥煩敵慴മ
䔠ꍮ敭潲搠⁥敳楲⁥敤潶畬敭獥›䍁㔱㈭䑂റഊ
䐠物捥潴楲敤䌠尺獕牥屳慤摮畹潮䑜捯浵湥獴停潲敪瑣牐敵慢൳ഊ
㜰ㄯ⼱〲㜱†㠰㈺‶†㰠䥄㹒†††††മ
㜰ㄯ⼱〲㜱†㠰㈺‶†㰠䥄㹒†††††⸮਍㜰ㄯ⼱〲㜱†〱㌺″†††††ㄠ⸲〴‰牐湩楣慰⹬捤൵《⼷ㄱ㈯㄰‷〠㨸㘲††††††㈠㜮㌲倠楲据灩污搮浦਍㜰ㄯ⼱〲㜱†㠰㈺‶††††††⸲㌶‴牐湩楣慰⹬ 慰൳
ㄱㄯ⼰〲㜱†㈱㌺‷†††††††㌲‷牐敵慢⹳灤൲
ㄱㄯ⼰〲㜱†㈱㔺′††††††⸵㤶‱牐敵慢⹳灤潲൪

¿que es lo que ocurre? ¿que he hecho mal? Gracias
Responder Con Cita
  #8  
Antiguo 07-11-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por dandyuno Ver Mensaje
Ella 䔠  Hei Ke Yang Shen ⁡ Usted  fricción Xi 䌠 canal de  Titu ⁥ Wenfandishe മ 䔠 ꍮ pigwash Yang Ke apuñaló ⁥ Aiwei ⁥  Hei Ella Yang Jiao > 䍁 㔱 ㈭ 䑂 റഊ 䐠 retención fue Wan Wei Ke  䌠 Chicuifangxian Queqiaowanchao 䑜 Daotongtumeng Tingshaoduosuo  Zha enemigo lenta ൳ഊ 㜰 ㄯ ⼱ 〲 㜱 † 㠰 ㈺ "† 㰠 䥄 㹒 ††††† മ 㜰 ㄯ ⼱ 〲 㜱† 㠰 ㈺ "† 㰠 䥄 㹒 ††††† ⸮਍ 㜰 ㄯ ⼱ 〲 㜱 † 〱㌺" ††††† ㄠ ⸲〴 ‰ Zhadongmeiwei ⹬ Wei ൵ "⼷ ㄱ ㈯ ㄰ ‷ 〠 㨸 㘲 † ††††† i 㜮 ㌲ Suiwei Se Yanwulipu ਍ 㜰 ㄯ ⼱ 〲 㜱 † 㠰 ㈺ "†††††† ⸲㌶ '' 'Zhatongmeiwei ⹬ comodidad ൳ ㄱ ㄯ ⼰ 〲 㜱 † ㈱㌺ ‷ ‷ Zha ††††††† ㌲ enemigo lenta ⹳ Luan ൲ ㄱ ㄯ ⼰ 〲 㜱 † ㈱ 㔺 '‱ Zha †††††† ⸵ 㤶 enemigo lenta ⹳ Luan pigwash 4
A saber qué webs visitas
Responder Con Cita
  #9  
Antiguo 07-11-2017
dandyuno dandyuno is offline
Miembro
NULL
 
Registrado: sep 2015
Posts: 18
Poder: 0
dandyuno Va por buen camino
Muy buenas Casimiro, la web de donde saque el codigo es esta, y fue un copy paste para ver su funcionamiento. Utilizo Embarcadero 2010
Responder Con Cita
  #10  
Antiguo 07-11-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Seguramente tengas que modificar el código y cambiar los char por ansichar, los string por ansistring, etc. por el tema del unicode.
Responder Con Cita
  #11  
Antiguo 07-11-2017
dandyuno dandyuno is offline
Miembro
NULL
 
Registrado: sep 2015
Posts: 18
Poder: 0
dandyuno Va por buen camino
OK Casimiro, ahora si que funciona, tan solo tiene un pequeño detalle, cuando mando por ej ShowMessage('dir'); la primera vez sale en blanco, pero la segunda sale perfecto por lo demas lo que buscaba, muchas gracias por tu ayuda
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 03:04:44.


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