PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Pegar Status da Impressora Delphi #562846

23/09/2016

0

Olá Boa Tarde ,

Trabalho com Delphi a algum tempo e estou precisando de uma rotina que eu passe o nome da impressora e ela me diga se está online ou offline.

Eu tenho está rotina só que ela não está funcionando 100% , na maioria das vezes ela traz errado o status.

function TSMIMP.GetPrinterStatus(aName: string): String;
var PrintersInfo : PPrinterInfo2;
pcbNeeded, pcReturned, jpcbNeeded, jpcReturned : Cardinal;
I, J: Integer;
hPrinter: THandle;
JobInfo, TmpJobInfo: PJobInfo3;
phPrinter ,cbBuf : cardinal;
Need :PDWORD;
aJobs : integer;
aStatus : integer;
ResTex : Byte;
begin
Application.ProcessMessages;
aStatus := -1;
aJobs := 0;
Result := '';

EnumPrinters(PRINTER_ENUM_LOCAL or PRINTER_ENUM_CONNECTIONS, nil, 2, PrintersInfo, 0, pcbNeeded,
pcReturned);

if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
GetMem(PrintersInfo, pcbNeeded);
try
if EnumPrinters(PRINTER_ENUM_LOCAL or PRINTER_ENUM_CONNECTIONS , nil, 2,PrintersInfo,
pcbNeeded, pcbNeeded, pcReturned) then
begin
for I := 0 to pcReturned - 1 do
begin
if PrintersInfo^.pPrinterName = aName then
begin
aStatus := PrintersInfo^.Status;
aJobs := PrintersInfo^.cJobs;

if aStatus = 0 then
begin
Result := 'S';
end else
begin
Result := 'N';
end;

break;
end;

inc(PrintersInfo);
end;
end else
begin
RaiseLastOSError;
end;
finally
try
FreeMem(PrintersInfo);
except

end;
end;
end else
begin
RaiseLastOSError;
end;
end;

Lembrando que a impressora pode estar tanto por rede ou local.
Wander Borges

Wander Borges

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar