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]);
}
}
SetJob(, , , JOB_CONTROL_RESUME) Выдает ошибку
есть "менеджер печати" который мониторит принтеры, перехватывает и приостанавливает задания, и ставит их в свою очередь.
На форму выводится информация о задании и есть две кнопки: "Продолжить":
Код:
и "Отменить"
Код:
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]);
}
}
{
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. К чему ей там доступа нет?
В чем может быть проблема и как лечить?
Может, попробовать в OpenPrinter в последнем параметре определить структуру PRINTER_DEFAULTS и поиграть со значениями DesiredAccess?
Цитата: Нездешний
Может, попробовать в OpenPrinter в последнем параметре определить структуру PRINTER_DEFAULTS и поиграть со значениями DesiredAccess?
MSDN PRINTER_DEFAULTS
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);
}
{
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);
}