Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Delphi] data uitlezen van een redirected print port

Pagina: 1
Acties:

  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Het is de bedoeling dat ik alle print opdrachten opvang met een applicatie en deze data omzet in plaatjes om deze weer door te sturen naar de volgende verwerkingsstap ( archive/ocr/data extractie). In printer settings heb ik met redmon een printer port aangemaakt en deze zo ingesteld dat ie alle data naar een applicatie doorsluist. Als print driver gebruik ik 'generic/ms publisher imagesetter' ingesteld op EMF uitvoer.

Als ik vervolgens iets afdruk dan word men applicatie gestart. Op dat moment zou ik ergens de data van de printer moeten opvangen maar ik zou niet weten hoe.
In de source van gsview word een anonieme pipe aangemaakt en vervolgens word hieruit gelezen alsof het een bestand is.

Dus ik probeer dat ook:

Delphi:
1
2
3
4
5
6
7
8
 sa.nLength := SizeOf(TSecurityAttributes);
 sa.bInheritHandle := true;
 sa.lpSecurityDescriptor := nil;

 if CreatePipe(hPipeRead, hPipeWrite, @sa, 0) then
 begin 
  PeekNamedPipe( hPipeRead, nil, 0, nil, @bytes_waiting, nil);
 end;


Maar der blijkt geen data te zijn, bytes_waiting = 0. Ik zal wel wat fout doen of iets missen maar ik zou niet weten wat. Op internet kan ik niets vinden en de docs van redmon zijn ook weinig behulpzaam. Iemand die weet hoe ik de printer output moet opvangen of me een stap in de goeie richting kan duwen?

Verwijderd

Als ik het goed begrijp is die redmon tool in dit geval de 'pipeserver'. Je zou dan hiermee moeten connecten via een CreateFile, of CallNamedPipe functie vermoed ik.

Kan je misschien wat duidelijker maken waar je hPipeRead en hPipeWrite eventueel vandaan komen?
anonomys pipes, kan dus via createpipe blijkbaar.

Nee die creert een gehele nieuwe, en je zal toch moeten connecten met de al bestaande neem ik aan?


ok,

quote (redmon):
Using RedMon you create a redirected printer port. If you connect a Windows printer driver to the redirected printer port, all data sent to the redirected port will be forwarded by RedMon to the standard input of a program. The output of this program can be sent to different printer port, or the program can generate whatever output it desires.
Moet je niet gewoon de stdin uitlezen ?

[ Voor 57% gewijzigd door Verwijderd op 20-05-2008 15:05 ]


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Dat hab ik geprobeerd met een simpele console app die alles van stdin leest en dat weer eruit gooit.

Delphi:
1
2
3
4
5
6
7
8
9
10
 begin 
  s := 'x'; 
  while s <> '' do 
  begin 
   Read(s); 
   Write(s); 
  end;

   ReadLn(); 
 end; 


Maar helaas blijft deze blokken op de eerste read -> geen data.


Ik moet wel toegeven dat pipes nieuw zijn voor me, maar eens wat meer inlezen.

[ Voor 12% gewijzigd door RobLemmens op 20-05-2008 15:27 ]


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
De oplossing:

Ik dacht dat readln in delphi vanaf stdin leest als je geen handle meegeeft maar blijkbaar moet je dat dus zo doen:

Delphi:
1
2
3
4
5
6
7
8
9
var st: text;
     s: string;

begin
 assign(st,'');
 reset(st);
 while not eof(st) do readln(st,s); 
 close(st);
end.


Tevens moet -Advanced printing features- uitstaan bij de printer properties (standaard aan). Weet nog niet waarom maar dan komt er niets binnen.