Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Инженер_3
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 108
#1

Определение статуса принтера включён/выключен НЕ РАБОТАЕТ - C++

15.08.2016, 14:26. Просмотров 383. Ответов 0
Метки нет (Все метки)

Есть классический код для определения статуса принтера, в данном случае включён он или выключен.
Начинается работа хорошо, но почему-то поле Status обнулено. В чём здесь загвоздка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
HANDLE h = 0;
PRINTER_INFO_2 *prn = 0;
DWORD pcbNeeded;
int err;
 
//Получаем имя дефолтового(по умолчанию) принтера, драйвер и порт
char *def_string = "no printer";
char buffer[MAX_PATH];
GetProfileString("windows", "device", def_string, buffer, MAX_PATH);
AnsiString Abuffer(buffer);
AnsiString Device, Driver, Port;
 
//Парсим из буфера определённые свойства (принтер, драйвер, порт)
int comma1 = Abuffer.Pos(",");
Device = Abuffer.SubString(1, comma1 - 1);
Abuffer = Abuffer.SubString(comma1 + 1, Abuffer.Length() - comma1);
int comma2 = Abuffer.Pos(",");
Driver = Abuffer.SubString(1, comma2 - 1);
Port = Abuffer.SubString(comma2 + 1, Abuffer.Length() - comma2);
 
if (::OpenPrinter(Device.c_str(), &h, NULL) == 0)
  ShowMessage(L"OpenPrinter Error!");
else
{
  ShowMessage(L"OpenPrinter OK!");
  bool res = ::GetPrinter(h, 2, NULL, 0, &pcbNeeded);
  if (!res && (::GetLastError() == ERROR_INSUFFICIENT_BUFFER))
  {
    prn = (PRINTER_INFO_2*)malloc(pcbNeeded);
    if (::GetPrinter(h, 2, (LPSTR)prn, pcbNeeded, &pcbNeeded) == 0)
    {
      err = ::GetLastError();
      ShowMessage(L"GetPrinter Error!");
    }
    else
    {
      ShowMessage(L"GetPrinter OK!");
 
      // !!! ЗДЕСЬ НАЧИНАЮТСЯ ПРОБЛЕМЫ
      //Тут у нас заполненная структура PRINTER_INFO_2
      if (prn->Status & PRINTER_STATUS_OFFLINE) //Проверяем поле Status на наличие нужного бита
        ShowMessage(L"Printer is offline");
    }
    free(prn);
  }
  else
    ShowMessage(L"Позовите санитаров!");
  ::ClosePrinter(h);
}
Добавлено через 4 часа 42 минуты
Добавлю.
Атрибуты (prn->Attributes) читает великолепно, но статус (prn->Status) почему-то обнулён.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2016, 14:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение статуса принтера включён/выключен НЕ РАБОТАЕТ (C++):

idhttp страница не найдена handle redirect включён - C++ Builder
никак не могу понять почему такое происходит , пробую на этом сайте загрузить исходную страницу в memo загружает но пишет что страница не...

Проверить включен принтер или выключен - C++ Builder
Программа находит в системе принтер и должна проверить подключен он или нет, так как на компьютере очень много разных моделей принтера, и...

Не работает определение вектора - C++
Не работает такое определение вектора vector<int> v{9,10,5,3,2,5}, в этой программе: #include <iostream> #include <vector> using...

Автоматическое определение принтера для печати при отсутствии принтера по умолчанию - MS Word
Вопрос. Постоянно таскаю с собой ноут, и приходится печатать на разных принтерах. Можно ли наладить их поиск и установку автоматом. По...

Определение статуса - MS Excel
Доброго всем дня! Взялся помочь знакомому справиться с несложным заданием в Exel. Так как профиль не мой - въезжать во все приходится на...

Определение статуса ICQ - Visual Basic
Поскажите, если это возможно, как определить, зная номер icq, в on-line - ли этот номер. Заранее благодарен.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2016, 14:26
Привет! Вот еще темы с ответами:

Определение статуса хранимой процедуры или транзакции - C#
Есть бд MSSQL, есть приложение в C#.NET , есть кнопка которая вызыввает хранимую процедуру/к примеру начисление зарплаты/ в рамках...

Создание чата, определение статуса оффлайн у пользователя - PHP
Привет. Подскажите пожалуйста, как определить когда человек ушел в офф-лайн и вовремя выбросить его из списка.

Загрузка файла с HTTP сервера определение статуса загрузки - C#
Всем доброго времени суток. Мне необходимо чтобы программа скачивала rar файл с сервера и распоковывала его в определенную папку для...

Определение статуса программы (запущена или нет) с использованием батника - CMD/BAT
Мне необходимо определить статус программы (запущена она или нет) с помощью батника. Мне нужны команды.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru