Как прочитать/установить принтер по умолчанию?

uses
 Printers, Messages;
function GetDefaultPrinter: string;
var
 ResStr: array[0..255] of Char;
begin
 GetProfileString('Windows', 'device', '', ResStr, 255);
 Result := StrPas(ResStr);
end;
procedure SetDefaultPrinter1(NewDefPrinter: string);
var
 ResStr: array[0..255] of Char;
begin
 StrPCopy(ResStr, NewdefPrinter);
 WriteProfileString('windows', 'device', ResStr);
 StrCopy(ResStr, 'windows');
 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
end;
procedure SetDefaultPrinter2(PrinterName: string);
var
 I: Integer;
 Device: PChar;
 Driver: PChar;
 Port: PChar;
 HdeviceMode: THandle;
 aPrinter: TPrinter;
begin
 Printer.PrinterIndex := -1;
 GetMem(Device, 255);
 GetMem(Driver, 255);
 GetMem(Port, 255);
 aPrinter := TPrinter.Create;
 try
  for I := 0 to Printer.Printers.Count - 1 do
  begin
  if Printer.Printers = PrinterName then
  begin
  aprinter.PrinterIndex := i;
  aPrinter.getprinter(device, driver, port, HdeviceMode);
  StrCat(Device, ',');
  StrCat(Device, Driver);
  StrCat(Device, Port);
  WriteProfileString('windows', 'device', Device);
  StrCopy(Device, 'windows');
  SendMessage(HWND_BROADCAST, WM_WININICHANGE,
  0, Longint(@Device));
  end;
  end;
 finally
  aPrinter.Free;
 end;
 FreeMem(Device, 255);
 FreeMem(Driver, 255);
 FreeMem(Port, 255);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.Caption := GetDefaultPrinter2;
end;
//Fill the combobox with all available printers
procedure TForm1.FormCreate(Sender: TObject);
begin
 Combobox1.Items.Clear;
 Combobox1.Items.AddStrings(Printer.Printers);
end;
//Set the selected printer in the combobox as default printer
procedure TForm1.Button2Click(Sender: TObject);
begin
 SetDefaultPrinter(Combobox1.Text);
end;

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

uses

 IniFiles;

procedure TForm1.Button1Click(Sender: TObject);

var

 WinIni: TIniFile;

 WinIniFileName: array [0..MAX_PATH] of char;

 s: array [0..64] of char;

begin

 GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));

 StrCat(WinIniFileName, '\win.ini');

 WinIni := TIniFile.Create(WinIniFileName);

 try

  WinIni.WriteString('windows','device', 'HP LaserJet Series II,HPPCL,LPT1:');

 finally

  WinIni.Free;

 end;

 StrCopy(S, 'windows');

 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));

end;


Взято с http://delphiworld.narod.ru

Примечание от Vit: Поместил предыдущие ответы на сей вопрос и даже не знаю, а надо ли было? Изобретение велосипеда! В Дельфи есть предопределённый системный объект Printer типа TPrinter, в нём уже есть готовые свойства и методы как для чтения текущего принтера (и всех остальных принтеров тоже), так и для изменнеия текущего принтера на другой. Хочу добавить что реализация через API может несколько различаеться для разных версий Windows и простой код по изменнеию текущего принтера вовсе не факт будет работать стабильно на всех системах. Используйте объект Printer - это более надёжно и просто.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...