Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Kommandozeilen Programm innerhalb von Delphi (https://www.delphipraxis.net/81591-kommandozeilen-programm-innerhalb-von-delphi.html)

lorus 30. Nov 2006 17:01

Re: Kommandozeilen Programm innerhalb von Delphi
 
habs ausprobiert

Delphi-Quellcode:
procedure TForm1.BtnWriteCmdClick(Sender: TObject);
begin
  FWriteToStdIn('ping google.de' + #13#10);
  FWriteToStdIn('ping google.de' + #13#10);
end;
Ergebnis:

google wird gepingt .. 4 antworten und anschließend wird google nochmal gepingt ..


edit: Es ist gleich noch eine Frage aufgekommen :)
Die Sonderzeichen die übergeleitet werden, werden in der Memobox nicht so wie im cmd
dargestellt. Wie könnte man es erreichen, das das Memo den selben Zeichensatz verwendet, wie
das cmd? :)

DP-Maintenance 1. Dez 2006 14:09

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.

lorus 1. Dez 2006 23:14

Re: Kommandozeilen Programm innerhalb von Delphi
 
Huhu zusammen,

ich konkretisiere meine Fragen nochmal:

1) Wie ist der Zeichensatz von der DOS-Eingabeaufforderung?
2) Wie bringe ich den Zeichensatz am besten einem Memo bei?

:)

Grüße,

Lorus

Robert Marquardt 2. Dez 2006 05:18

Re: Kommandozeilen Programm innerhalb von Delphi
 
Dazu gibt es die Win32 Funktionen OemToChar, OemToChar, CharToOem und CharToOemBuff. Sie konvertieren C Strings zwischen den beiden Zeichensaetzen.

lorus 2. Dez 2006 14:37

Re: Kommandozeilen Programm innerhalb von Delphi
 
Huhu,

erstmal danke für die Antwort :)

Hab jetzt folgendes probiert:

Delphi-Quellcode:
procedure TForm1.DosCommand1NewLine(Sender: TObject; NewLine: String;
  OutputType: TOutputType);
begin
  DosCommand1.OutputLines := OemToChar(Memo1.Lines);
end;
bekomme nun aber Fehler das PAnsiChar und TString inkompatible Typen sind :-/
muss also jeder buchstabe einzeln umgewandelt werden? wie stelle ich das am besten an? :-)

P.S. ich verwende jetzt die TDosCommand-Komponente

lorus 3. Dez 2006 12:23

Re: Kommandozeilen Programm innerhalb von Delphi
 
Huhu zusammen,

hab mir noch mal den Code von SirThornberry hergenommen, der gefällt mir im Prinzip auch besser als die TDosCommand-Kompo.

Hab im Forum jetzt noch folgende Funktionen für Ascii --> Ansi Konvertierung gefunden und umgedreht.

Delphi-Quellcode:
function Ascii2Ansi(const s:AnsiString):AnsiString;
begin
   Result := s;
   if Result <> '' then
   begin
      UniqueString(Result);
      OemToChar(Pchar(Result), Pchar(Result));
   end;
end;

function Ansi2Ascii(const s:AnsiString):AnsiString;
begin
   Result := s;
   if Result <> '' then
   begin
      UniqueString(Result);
      CharToOem(Pchar(Result), Pchar(Result));
   end;
end;

und hab das dann so in den Code eingebaut:
Delphi-Quellcode:
procedure TForm1.FClbProc(Sender: TObject; const ABuffer: String; ABufSize: Cardinal);
var LNew: String;
    LPos: Integer;
begin
  LNew := copy(ABuffer, 1, ABufSize);
  LPos := pos(#$C, LNew);
  if (LPos > 0) then
  begin
    MemoOutput.Text := '';
    LNew := copy(LNew, LPos + 1, Length(LNew));
  end;
  MemoOutput.Text := Ansi2Ascii(MemoOutput.Text + LNew);
  PostMessage(MemoOutput.Handle, WM_VSCROLL, SB_BOTTOM, 0);
end;

Die Veränderung in der Zeile:
Delphi-Quellcode:
MemoOutput.Text := Ansi2Ascii(MemoOutput.Text + LNew);
bringt aber leider nicht den gewünschten Erfolg :-/

Habt ihr eine Idee, wie ich es richtig hinbekommen könnte? :)

Grüße,

Lorus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz