webForumDet fria alternativet

Lagra text från kommandotolksfönstret

C/C++

5 svar · 460 visningar · startad av Sunix

Medlem sedan juli 2004310 inlägg
Frågan#1

Hej!

Jag skulle behöva hjälp med att lagra (i en string t.ex) det som skrivsut i ett dosfönster.

string kalle = system("dir");
typ!!

Medlem sedan juli 200412 913 inlägg
#2

jag använde ShellExecuteEx i Win API

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcesdkr/html/_wcesdk_Win32_ShellExecuteEx.asp

gjorde som så att jag använde DOS-kommandot > för att dumpa till en fil som jag sedan läste in och tog bort.

dir > kallestring.txt

läs in kallestring.txt och ta bort den sedan, givetvis utan att användaren märker att DOS är inblandat eftersom man sätter ShowMode till 0 i ShellExecuteEx

Medlem sedan juli 2004310 inlägg
#3

Requirements

Runs on Versions Defined in
Windows CE OS 1.0 and later Shellapi.h

Finns det något annat sätt? Programmet jag bygger är ett dosprogram och en tjänst.

Medlem sedan juli 2004310 inlägg
#4

Har du något litet kodexempel?
Man kanske kan anpassa!

Medlem sedan juli 200412 913 inlägg
#5

ojdå... haha... ja jag råkade ta den för Windows CE, jaja, men det är ju likadant. Men du måste fått fel länk... svårt å hitta på den där MSDN ibland... här borde vara rätt:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shellexecuteinfo.asp

men iaf, det är ju för Windows det där, för DOS vet jag inte vad som gäller...

å jag kör inte C ens, jag kör Delphi jag :) ...men du kan ju få se min kod ändå, det är ju i stort sett likadant.

Här är själv rutinen jag har för att köra DOS-kommando:

function TFormMain.RunProgram(ExecuteFile, ParamString, StartInString: String; ShowMode: Integer): boolean;
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;

begin
//ExecuteFile:='Calc.exe';

  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
{
ParamString can contain the
application parameters.
}
 lpParameters := PChar(ParamString);
{
StartInString specifies the
name of the working directory.
If ommited, the current directory is used.
}
  lpDirectory := PChar(StartInString);
//  nShow := SW_SHOWNORMAL;
    nShow := ShowMode;
  end;
  if ShellExecuteEx(@SEInfo) then begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or
   Application.Terminated;
//  ShowMessage('Calculator terminated');
    result := true;
  end
  else
//  ShowMessage('Error starting Calc!');
    result := false;
end;

ja jag hittade den där koden på delphipages, dom skulle köra miniräknaren, calc.exe som du ser, jag har kommenterat bort alla rutor som hoppar upp (showmessage

Här är en rad där jag anropar den där functionen:

RunProgram('cmd.exe','/c dir "'+s+'"*.mp3 /s /ogn >"'+s+'index.tmp"','', 0)

det kör en DOS-prompt helt dold och skapar en mp3-lista i katalogen som står i strängen s.

Medlem sedan juli 2004310 inlägg
#6

Hahaha!
Tack så mycket! jag ska luska!!

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)