1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
uses Printers, Winspool, .....; // winspool pas sur
const
BIGSTRING = 10000;
type
LPBYTE = ^byte;
PPr_info_2 = ^TPrinterInfo2;
TBinNames = array[ 0..99,0..23] of char;
PTBinNames = ^TBinNames;
procedure TForm1.GetDriverInfo;
var I: Integer;
FDevice : PChar;
FDriver : PChar;
FPort : PChar;
BinCodes : PChar;
Bin : PWORD;
DeviceMode : THandle;
Driver_info_2 : pDriverinfo2;
CapBuffer : PChar;
BinNames : PTBinNames;
NumCaps : integer;
begin
Memo2.Clear;
Memo2.Lines.Add('Impossible d''obtenir les informations');
if not assigned(fPrinter) then exit;
GetMem(FDevice, 1000);
GetMem(FDriver, 1000);
GetMem(FPort, 1000);
GetMem(Driver_info_2, 255);
GetMem(CapBuffer, 10000);
GetMem( binnames, 2400);
Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
// Bin names
NumCaps := DeviceCapabilities(FDevice, FPort, DC_BINNAMES, CapBuffer, nil);
copymemory( pointer(binnames), capbuffer, 2400);
memo2.clear;
NumCaps :=DeviceCapabilities(FDevice, FPort, DC_BINS,nil, nil);
GetMem(BinCodes,NumCaps*Sizeof(word));
// Bin codes
NumCaps := DeviceCapabilities(FDevice, FPort, DC_BINS,BinCodes, nil);
for I := 0 to NumCaps-1 do
begin
if trim(binnames[i]) <> '' then
begin
Bin:=@bincodes[i*Sizeof(Word)];
memo2.lines.add( binnames[i]+ format( ' >> %d',[bin^]));
end;
end;
FreeMem(Driver_info_2, 255);
FreeMem(CapBuffer, 10000);
FreeMem( binnames, 2400);
FreeMem(FDevice, 1000);
FreeMem(FDriver, 1000);
FreeMem(FPort, 1000);
FreeMem(BinCodes,NumCaps*Sizeof(Word));
end; |
Partager