Имя: Пароль:
1C
 
Проверить доступность приинтера при печати напрямую - перед самой печатью
0 lamme
 
25.05.22
13:05
ут10
есть метод получения списка принтеров.
он работает. получаем имя принтера.
тут все ок.


собственно
вопрос - как проверить доступность принтера перед его печатью.
есть какие ниб методы?
1 H A D G E H O G s
 
25.05.22
13:24
Нет.
2 Ryzeman
 
25.05.22
13:25
если под виндой, то скорее всего через консоль или power shell можно
3 Ryzeman
 
25.05.22
13:26
вариант - пингануть его...
4 H A D G E H O G s
 
25.05.22
13:26
Чтобы сделать это наверняка - ты должен будешь написать это через прямые запросы к USB устройству и выполнять этот код на том компе, который подключен к принтеру, что отсекает сетевые принтеры.
Чтобы это сделать надеясь на добропорядочность разработчиков принтера, которые отправят свой статус через WinSpool - тебе нужна хотя бы ВК.
5 H A D G E H O G s
 
25.05.22
13:29
Но можно понадеятся на порядочность:

function THadgPDFPrinter.GetPrinterStatus(hPrinter: THandle): TResult;
var
  ABytesNeeded: Cardinal;
  PrinterInfo: PPrinterInfo2;
  PrinterInfoSize: Cardinal;
begin
  Result.Result := False;
  if not GetPrinter(hPrinter, 2, nil, 0, @ABytesNeeded) then
  begin
    if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then
    begin
      Result.errorCode := GetLastError;
      Result.ErrorDescription := _GetErrorMsg(Result.errorCode);
      //ClosePrinter(hPrinter);
      exit;
    end;
  end;
  PrinterInfoSize := ABytesNeeded;
  GetMem(PrinterInfo, PrinterInfoSize);
  if not GetPrinter(hPrinter, 2, PrinterInfo, ABytesNeeded, @ABytesNeeded) then
  begin
    Result.errorCode := GetLastError;
    Result.ErrorDescription := _GetErrorMsg(Result.errorCode);
    //ClosePrinter(hPrinter);
    FreeMem(PrinterInfo, ABytesNeeded);
    exit;
  end;
  //ClosePrinter(hPrinter);
  Result.Data := PrinterInfo^.Status;
  FreeMem(PrinterInfo, PrinterInfoSize);
  Result.Result := true;

end;

https://docs.microsoft.com/en-us/windows/win32/printdocs/printer-info-2
6 Злопчинский
 
25.05.22
15:01
Осталось подумать что будет если принтер подключен через железячный принт-сервер.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс