Ver Mensaje Individual
  #1  
Antiguo 08-02-2010
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Reputación: 21
xerkan Va por buen camino
Salida de msdos en delhpi 2010

Me gustaria saber si alguien me podria contestar como trasladar una funcion que tengo para delphi 2007 al nuevo delphi 2010, al funcion devuelve la salida de un comando ejecutado en ms-dos en delphi 2007 devuelve bien el resultado pero al ejecutarlo en delphi 2010 me devuelve basura, la funcion es esta:

Código:
function ejecutarComando (comando : 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 Win32Platform = VER_PLATFORM_WIN32_NT 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 ' + comando));
		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;
Responder Con Cita