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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Значения Lvalue и Rvalue http://www.cyberforum.ru/cpp/thread1793792.html
Здравствуйте. В данной ссылке https://msdn.microsoft.com/ru-ru/library/f90831hc.aspx приведен пример int main() { int i, j, *p;
C++ Перегрузка многомерной индексации struct Matrix { int m; Matrix() {} ... operator(int n) {return ...;} }; Как перегрузить индексацию в классе чтобы можно было работать с массивом так: http://www.cyberforum.ru/cpp/thread1793606.html
C++ Как рисовать в видеокарту?
Привем всем! Представим, что запущена какая-либо игра, могу ли я рисовать поверх изображения игры, то есть прямо в видеокарту?
Получение нажатия клавиши из неактивного окна C++
Привет всем! Как можно получить нажатую клавишу, если окно приложения не активно?
C++ "std::domain_error" в bool-функции http://www.cyberforum.ru/cpp/thread1792397.html
Есть одна функция, которая сохраняет данные json в файл. Когда доходит дело до return, то срабатывает исключение "std::domain_error". bool Json::Save ( std::string file ) { std::ofstream...
C++ Рефакторинг: функция с большим количеством параметров День добрый. Скажите плз, гуру рефакторинга. Вот есть функция и в нее передаётся туча параметров. Как лучше исправить ситуацию? На ум приходит а) Создание некой структуры, которая будет содержать... подробнее

Показать сообщение отдельно
Инженер_3
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 105

Определение статуса принтера включён/выключен НЕ РАБОТАЕТ - 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru