Hallo,
ich hab hier ein Programm, das kommuniziert über RS232, gibt diese Daten dann per Named Pipes an andere Prozesse weiter.
Mittlerweile habe ich es geschafft die Named Pipe mitzulesen, ich erhalte jedoch immer nur unvollständige Informationen.
ich vermute es liegt an dem eingesetzten Timer, der nach Ablauf den Buffer neu füllt und nichtaufgezeichnete Daten überschreibt.
Aber wie macht man das denn ???
Folgenden Code verwende ich zur Zeit:
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
FSA : SECURITY_ATTRIBUTES;
FSD : SECURITY_DESCRIPTOR;
begin
Timer1.Enabled:=false;
Memo1.Clear;
InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@FSD, True, nil, False);
FSA.lpSecurityDescriptor := @FSD;
FSA.nLength := sizeof(SECURITY_ATTRIBUTES);
FSA.bInheritHandle := True;
Pipe:= CreateFile(PChar('\\.\pipe\Output'),
GENERIC_READ or GENERIC_WRITE,
0,
@FSA,
OPEN_EXISTING,
0,
0);
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Button1Click(self);
end;
procedure TForm2.Button1Click(Sender: TObject);
var
buffer: shortstring;
dw : dword;
begin
Timer1.enabled:=true;
ReadFile(Pipe, buffer, sizeof(buffer), dw, nil);
Memo1.Lines.Add(buffer);
end;
Jemand eine Idee wie ich die Pipe komplett mitschneiden kann ?
KUBA