Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Standarddrucker ermitteln

  Alt 9. Okt 2006, 09:36
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]
Andreas
  Mit Zitat antworten Zitat