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]