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
| function SetPrinterOptions(NewFilePPD: String=''): String;
var ret: String;
passe: Boolean;
DeviceMode, hPrinter: THandle;
Device, Driver, Port: array[0..MAX_PATH] of Char;
DriverInfo2: PDriverInfo2;
DriverInfo2Size: DWORD;
begin
passe := False;
ret := '';
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
OpenPrinter(Device, hPrinter, nil);
try
GetPrinterDriver(hPrinter, nil, 2, nil, 0, DriverInfo2Size);
GetMem(DriverInfo2, DriverInfo2Size);
try
GetPrinterDriver(hPrinter, nil, 2, DriverInfo2, DriverInfo2Size, DriverInfo2Size);
//StrPCopy(Driver, ExtractFileName(StrPas(DriverInfo2^.PDriverPath)));
ret := DriverInfo2^.pName+': '+#09+DriverInfo2^.pDataFile;
if (Trim(NewFilePPD)<>'') and (FileExists(NewFilePPD)) then begin // Réaffecter le driver (RIEN NE MARCHE...)
//StrPCopy(DriverInfo2^.PDriverPath, NewFilePPD);
//DriverInfo2^.PDriverPath := PChar(NewFilePPD);
//StrPCopy(Driver, StrPas(DriverInfo2^.PDriverPath));
//StrPCopy(Driver, NewFilePPD);
passe := True;
end;
finally
FreeMem(DriverInfo2, DriverInfo2Size);
end;
finally
ClosePrinter(hPrinter);
end;
if passe then
Printer.SetPrinter(Device, Driver, Port, DeviceMode);
Result := ret;
end;
procedure TForm1.btnGetImpClick(Sender: TObject);
var i, tmp: Integer;
strTmp: String;
begin
strTmp := '';
Printer.Refresh;
tmp := Printer.PrinterIndex;
for i:=0 to Printer.Printers.Count-1 do begin
Printer.PrinterIndex := i;
strTmp := strTmp+sLineBreak+SetPrinterOptions();
end;
Printer.PrinterIndex := tmp;
ShowMessage(strTmp);
end;
procedure TForm1.btnSetImpClick(Sender: TObject);
var strTmp: String;
begin
strTmp := 'C:\WINNT\system32\spool\DRIVERS\W32X86\3\ADIST5.PPD';
SetPrinterOptions(strTmp); // Ne fonctionne pas
ShowMessage('Driver changé: '+IntToStr(Printer.PrinterIndex));
end; |
Partager