Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SetJob(, , , JOB_CONTROL_RESUME) Выдает ошибку

394
06 января 2011 года
MegaMozg
317 / / 18.03.2006
Приветствую. Вопрос больше не по Builder, а по WinAPI.
есть "менеджер печати" который мониторит принтеры, перехватывает и приостанавливает задания, и ставит их в свою очередь.

На форму выводится информация о задании и есть две кнопки: "Продолжить":
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        HANDLE hPrinter;      
     
       
        if(!OpenPrinter(j.pPrinterName, &hPrinter, NULL))
                    MessageBox(0, "Printer not open", "Error", MB_OK);

        if(!SetJob(hPrinter, j.JobId, 1, (LPBYTE)&j, JOB_CONTROL_RESUME))
        MessageBox(0, "Job resume filed", "Error", MB_OK);
          else
        {
                // ...
                SetEvent(g_h[2]);
        }

}


и "Отменить"
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        HANDLE hPrinter;      

     
        if(!OpenPrinter(j.pPrinterName, &hPrinter, NULL))
                    MessageBox(0, "Printer not open", "Error", MB_OK);

        if(!SetJob(hPrinter, j.JobId, 1, (LPBYTE)&j, JOB_CONTROL_DELETE))
                // åñëè âîçíèêëà îøèáêà
        MessageBox(0, "Job delete filed", "Error", MB_OK);
         else
         {
               //...
                SetEvent(g_h[2]);
         }


}

так вот отмена работает, а "продолжить" не срабатывает. GetLastError выдает 5, т.е. Access is denied. К чему ей там доступа нет?

В чем может быть проблема и как лечить?
535
07 января 2011 года
Нездешний
537 / / 17.01.2008
Может, попробовать в OpenPrinter в последнем параметре определить структуру PRINTER_DEFAULTS и поиграть со значениями DesiredAccess?

MSDN PRINTER_DEFAULTS
394
07 января 2011 года
MegaMozg
317 / / 18.03.2006
Цитата: Нездешний
Может, попробовать в OpenPrinter в последнем параметре определить структуру PRINTER_DEFAULTS и поиграть со значениями DesiredAccess?

MSDN PRINTER_DEFAULTS



Благодарю! Помогло :D

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        HANDLE hPrinter;        

        PRINTER_DEFAULTS pd;    
        pd.pDatatype = NULL;
        pd.pDevMode = NULL;
        pd.DesiredAccess = PRINTER_ALL_ACCESS;


        if(!OpenPrinter(j.pPrinterName, &hPrinter, &pd))

        MessageBox(0, "Printer not open", "Error", MB_OK);
     
        if(!SetJob(hPrinter, j.JobId, 2, (LPBYTE)&j, JOB_CONTROL_RESUME))
        MessageBox(0, "Job resume filed", "Error", MB_OK);
          else
        {
               // ...
                SetEvent(g_h[2]);
        }

        ClosePrinter(hPrinter);

}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог