Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 13:04   #1
Coryphaeus
 
Регистрация: 16.02.2010
Сообщений: 5
По умолчанию Как определить состояние принтера

Добрый день!
Проблема: Есть принтер,подключен через LPT-порт.
Программа должна узнать состояние принтера в данный момент, узнать очередь печати.
Подскажите, пожалуйста, что для этого нужно?инструменты?примерный алгоритм?
Спсибо.
Нужно на Делфе.
Coryphaeus вне форума Ответить с цитированием
Старый 16.02.2010, 13:08   #2
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Ммм... помнится там был обьект tprinter вроде
danekne вне форума Ответить с цитированием
Старый 16.02.2010, 13:12   #3
Coryphaeus
 
Регистрация: 16.02.2010
Сообщений: 5
По умолчанию

Цитата:
Ммм... помнится там был обьект tprinter вроде
Через него,кажись,состояние принтера нельзя узнать
Coryphaeus вне форума Ответить с цитированием
Старый 16.02.2010, 13:19   #4
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Вот что намыл:
Код:
uses
  Winspool, Printers;
function GetCurrentPrinterHandle: THandle;
var
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(@Device, Result, nil) then
    RaiseLastWin32Error;
end;
function SavePChar(p: PChar): PChar;
const
  error: PChar = 'Nil';
begin
  if not Assigned(p) then
    Result := error
  else
    Result := p;
end;
procedure TForm1.Button1Click(Sender: TObject);
type
  TJobs = array[0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
var
  hPrinter: THandle;
  bytesNeeded, numJobs, i: Cardinal;
  pJ: PJobs;
begin
  hPrinter := GetCurrentPrinterHandle;
  try
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded,
      numJobs);
    pJ := AllocMem(bytesNeeded);
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded,
      bytesNeeded, numJobs) then
      RaiseLastWin32Error;
    memo1.Clear;
    if numJobs = 0 then
      memo1.Lines.Add('No jobs in queue')
    else
      for i := 0 to Pred(numJobs) do
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s',
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument),
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)]));
  finally
    ClosePrinter(hPrinter);
  end;
end;
danekne вне форума Ответить с цитированием
Старый 16.02.2010, 13:21   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Скачай себе DRKB - база данных по Дельфи. Там есть раздел посвященный принтерам.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.02.2010, 13:25   #6
Coryphaeus
 
Регистрация: 16.02.2010
Сообщений: 5
По умолчанию

Спасибо всем. Буду разбираться
Coryphaeus вне форума Ответить с цитированием
Старый 16.02.2010, 19:21   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Как получить информацию о заданиях на принтере - http://www.delphisources.ru/pages/fa...ter_tasks.html

Как получить статус принтера - http://www.delphisources.ru/pages/fa...er_status.html

Скачайте DelphiWorld там есть много разных статей(точнее 5005), обо всём.
Alter вне форума Ответить с цитированием
Старый 16.02.2010, 21:19   #8
Coryphaeus
 
Регистрация: 16.02.2010
Сообщений: 5
По умолчанию

Alter, спасибо за ссылки.
Но в программе статуса принтера используется ассемблер. Я так понял что она под Windows XP не пойдет(пробовал уже). Выдает ошибку в строке int 17h;

В ассемблере не силен(
Coryphaeus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Состояние клавиш... alexmikt Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 30.10.2009 23:48
состояние регистров клавиатуры olen` Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 05.06.2009 22:34
Как менять состояние объектов в групбоксе всех вместе сразу _Инженер_ Компоненты Delphi 11 17.09.2008 19:24
Узнать состояние подключения Hottabych Работа с сетью в Delphi 8 03.03.2008 18:10
состояние CDRom joker Win Api 12 27.01.2008 08:06