| 12
 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; |