Здравствуйте magcyril, Вы писали:
[skip]
M>я пытался менять только pDevMode->dmPrintQuality (и dmFields = DM_PRINTQUALITY соответственно) причем как с вызовом DocumentProperties (рекомендация MSDN), так и без него (GetPrinter может и так получить PRINTER_INFO_2), но при вызове SetPrinter всегда получаю ошибку "Access is denied"
Не знаю что у тебя за нужда вызывать именно SetPrinter? Эта функция помимо DEVMODE изменяет еще много параметров, на изменение которых у тебя прав по видимому нет. Я делаю так:
PRINTDLG pd;
const int size = sizeof(pd);
memset(&pd, 0, size);
pd.lStructSize = size;
BOOL res = ::PrintDlg(&pd);
if(res) {
DEVMODE* dm = reinterpret_cast<DEVMODE*>(::GlobalLock(pd.hDevMode));
if(dm) {
dm->dmFields = DM_ORIENTATION | DM_PRINTQUALITY;
dm->dmOrientation = DMORIENT_LANDSCAPE;
dm->dmPrintQuality = 600;
::GlobalUnlock(pd.hDevMode);
}
char* prn_name = reinterpret_cast<char*>(dm->dmDeviceName);
HANDLE printer = NULL;
BOOL res = OpenPrinter(prn_name, &printer, NULL);
if(res) {
// TO DO ...
ClosePrinter(printer);
}
}
ЗЫж А вообще, прислал бы код, а то так гадать можно долго...