Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , ОС и Железо , Принтеры и Печать



Автор: http://www.swissdelphicenter.ch

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;

Программа на Delphi, которая позволяет установить принтер в качестве умолчания и получить текущий умолчательный принтер.

Вот разбивка каждого процедуры:

GetDefaultPrinter: Функция получает текущий умолчательный принтер из реестра Windows с помощью API-функции GetProfileString. Результат возвращается в виде строки.

SetDefaultPrinter1: Процедура устанавливает новый умолчательный принтер, модифицируя значение "device" в реестре Windows с помощью API-функции WriteProfileString. Новый имя умолчательного принтера передается в параметр.

SetDefaultPrinter2: Процедура устанавливает новый умолчательный принтер, итерируясь через все доступные принтеры и проверяя, если выбранный принтер соответствует тому, который указан пользователем. Если это так, она получает информацию о устройстве, драйвере и порте для этого принтера с помощью API-функции GetPrinter и хранит ее в реестре Windows.

Button1Click: Событийный обработчик получает текущий умолчательный принтер с помощью процедуры GetDefaultPrinter2 и отображает его имя в контроле label.

FormCreate: Событийный обработчик очищает и пополняет комбобокс доступными принтерами с помощью свойства Printers компонента T Printer.

Button2Click: Событийный обработчик устанавливает выбранный принтер из комбобокса в качестве нового умолчательного принтера с помощью процедуры SetDefaultPrinter2.

Вот некоторые предложения по улучшению кода:

  1. Вы можете использовать более современный способ получения умолчательного принтера, например, API-функцию SHGetPrinter или интерфейс IPrinter.
  2. Рекомендуется добавить обработку ошибок и валидацию для обеспечения того, что выбранный принтер является валидным и существует на системе.
  3. Вам может понравиться использовать более надежный способ пополнения комбобокса доступными принтерами, например, свойство Printers компонента TPrinter или итерация по ключам реестра под HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices.
  4. Вместо прямого изменения реестра Windows, вы можете использовать более абстрактный подход для установки умолчательного принтера, например, интерфейс IPrinter или контроль PrintDialog.

В целом, это код обеспечивает базовое выполнение функций установки и получения умолчательного принтера в Delphi. Однако есть много способов улучшить его функциональность и надежность.

Статья рассказывает о способах прочитать или установить принтер по умолчанию на компьютере, используя Delphi-код и функции Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 13:31:49/0.0050861835479736/1