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

Previous  Top  Next

    
 

 

 

Code:

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;

 

 

©Drkb::03207

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

 


Code:

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;

 

 

©Drkb::03208

       

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

 

 


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

 

©Drkb::03209