Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   Delphi Standarddrucker ermitteln (https://www.delphipraxis.net/78666-standarddrucker-ermitteln.html)

shmia 9. Okt 2006 09:36


Standarddrucker ermitteln
 
Folgende Funktion ermittelt den Standarddrucker für Windows 95, 98, ME, NT4, 2000, XP.
Ab Windows 2000 gibt es die API-Funktion GetDefaultPrinterA.
Anstatt nun zu prüfen, auf welchem OS wir arbeiten, wird einfach geprüft, ob die neue API-Funktion vorhanden ist.
Bei Windows XP kann es vorkommen, das zwar ein Standarddrucker angelegt ist, dies aber nicht in der WIN.INI vermerkt ist.

Delphi-Quellcode:
uses ..., WinSpool;

function GetDefaultPrinterName: string;
type
  TGetDefaultPrinterA = function (prnName: LPTSTR; var bufSize: DWORD): BOOL; stdcall;
var
  ws: HINST;
  GetDefaultPrinterA: TGetDefaultPrinterA;
  bufsize: DWORD;
  i: Integer;
begin
  ws := GetModuleHandle(PChar(winspl));
  GetDefaultPrinterA := GetProcAddress(ws, 'GetDefaultPrinterA');

  bufsize := 400;
  SetLength(Result, bufsize);

  if Assigned(GetDefaultPrinterA) then
  begin
    if GetDefaultPrinterA(PChar(Result), bufsize) then
    begin
      Dec(bufsize);
      if bufsize > 0 then
        SetLength(Result, bufsize)
      else
        Result := '';
    end
    else
    begin
      if GetLastError = ERROR_FILE_NOT_FOUND then
        Result := '' // kein Defaultdrucker vorhanden
      else
        RaiseLastWin32Error; // wahrscheinlich Puffer zu klein
    end;
  end else
  begin
    bufsize := GetProfileString('windows', 'device', '', PChar(Result), Length(Result));
    SetLength(Result, bufsize);
    Result := TrimLeft(Result);
    i:= Pos(',', Result);
    if i<>0 then Result := Copy(Result, 1, i-1);
  end;
end;
[edit=Matze]Bugfix ergänzt. Mfg, Matze[/edit]
[edit=fkerber]Bugfix ergänzt. Mfg, fkerber[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz