Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
EnumPrinters schlägt fehl
5. Jun 2006, 23:43
Ich versuche so alle lokalen Drucker zu bekommen:
Delphi-Quellcode:
procedure GetPrinters;
var
dwNeeded : DWORD;
dwReturn : DWORD;
pinfo4 : PPrinterInfo4;
pWork : PPrinterInfo4;
i : Integer;
s : string;
begin
dwNeeded := 0;
dwReturn := 0;
EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, nil, 0, dwNeeded, dwReturn);
GetMem(pinfo4, dwNeeded);
try
if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, PByte(pinfo4), sizeof(pinfo4), dwNeeded, dwReturn) then
begin
pWork := pinfo4;
for i := 0 to dwReturn - 1 do
begin
s := string(pWork.pPrinterName);
MessageBox(hApp, PChar(s), '', 0);
Inc(pWork, sizeof(pWork));
end;
end
else
MessageBox(hApp, PChar(SysErrorMessage(GetLastError)), '', 0);
finally
FreeMem(pinfo4);
end;
end;
Aber leider schlägt EnumPrinters mit der Fehlermeldung:
Zitat:
Der an einen Systemaufruf übergebene Datenbereich ist zu klein
fehl. Was ich irgendwie nicht so ganz verstehe.
Anstatt sizeof(pinfo4) muss es natürlich dwNeeded heißen:
Delphi-Quellcode:
procedure GetPrinters;
var
dwNeeded : DWORD;
dwReturn : DWORD;
pinfo4 : PPrinterInfo4;
pWork : PPrinterInfo4;
i : Integer;
s : string;
begin
dwNeeded := 0;
dwReturn := 0;
EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, nil, 0, dwNeeded, dwReturn);
GetMem(pinfo4, dwNeeded);
try
if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, pinfo4, dwNeeded, dwNeeded, dwReturn) then
begin
pWork := pinfo4;
for i := 0 to dwReturn - 1 do
begin
s := string(pWork.pPrinterName);
MessageBox(hApp, PChar(s), '', 0);
Inc(pWork);
end;
end
else
MessageBox(hApp, PChar(SysErrorMessage(GetLastError)), '', 0);
finally
FreeMem(pinfo4);
end;
end;
Michael Ein Teil meines Codes würde euch verunsichern.
|