SetPrinter возвращает ошибку
Функция SetPrinter возвращает ошибку 5 (отказано в доступе), но не смотря на это, устанавливаются параметры принтера. Возможно кто-то уже встречался с подобным явлением? Где и в чем "собака зарыта" и как с этим жить?
Цитата:
не смотря на это, устанавливаются параметры принтера
Все параметры устанавливаются правильно? Просто может быть, что какой-то один из них и вызывает эту ошибку.
Для начала хочется понять - какую цель вы приследуете используя указанную функцию...
Что касаемо параметров, то при нестандартных размерах бумаги, они действительно не устанавливаются. Но ошибка возвращается и при стандартных размерах, когда все параметры устанавливаются (если не считать те, которые не изменяются).
Привидите пожалуйста код, так как SetPrinter в принципе не возвращает код ошибки + интересует как вы заполняете DEVMODE...
PrintDlg(&prnDlg);
LPDEVMODE lpdmode = (LPDEVMODE)GlobalLock(prnDlg.hDevMode);
BYTE cbufMode[0x1000] = {0};
PRINTER_INFO_2* lpPrntInfo2 = (PRINTER_INFO_2*)cbufMode;
OpenPrinter(lpdmode->dmDeviceName, &hPrinter, NULL);
GetPrinter(hPrinter, 2, cbufMode, sizeof(cbufMode), &dwNeeds);
lpPrntInfo2->pDevMode = lpdmode;
ierr = GetLastError(); // = 0, убеждаемся в отсутствии ошибок
SetPrinter(hPrinter, 2, cbufMode, 0);
ierr = GetLastError(); // = 5, а вот и ошибочка, но параметры выставлены
ClosePrinter(hPrinter);
Потомучто OpenPrinter с NULL в дефалт
пруф мелкософта:
Цитата:
......
Use the DesiredAccess member of the PRINTER_DEFAULTS structure to specify the access rights that you need to the printer. The access rights can be one of the following. (If pDefault is NULL, then the access rights are PRINTER_ACCESS_USE.)
Desired Access value Meaning
PRINTER_ACCESS_ADMINISTER To perform administrative tasks, such as those provided by SetPrinter.
PRINTER_ACCESS_USE To perform basic printing operations.
.....