Столкнулся с проблемой — не получается изменить настройки принтера по умолчанию (именно настройки по умолчанию), например, задать ориентацию печати по умолчанию...
Принтер по умолчанию задаю через SetDefaultPrinter(), а вот изменить умолчальные настройки не могу.
Покопался на msdn — настройки по умолчанию хранятся в структуре DEVMODE. Нашёл пару способов её изменения, например вот через DocumentProperties():
"How To Modify Printer Settings with the DocumentProperties() Function"
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q167345
Делаю вроде всё, как описано, там даже пример на С есть, но, видать, что-то всё-таки делаю не так... Считать значение DEVMODE получается, изменяю, записываю обратно, ошибка не выдаётся, но и настойки по-умолчанию не изменяются...
Может кто-нибудь сталкивался с такой проблемой? Какие могут быть подводные камни? Пишу на Delphi. Раньше с API не работал, поэтому многих ньансов не знаю... Подскажите, кто чем может
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, Dmitrii K, Вы писали: .............
Код на С есть по ссылке, котороя в вопросе указана... вот:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q167345
Работает этот код или нет... надеюсь, работает...
Вот один из многих моих Дельфийских вариантов:
pPrName:=PChar(Printer.Printers[Printer.PrinterIndex]); // берём имя принтера
OpenPrinter(pPrName,Handle,nil); // потом хэндл
dwNeeded:=DocumentProperties(0,Handle,pPrName,pDeviceMode^,pDeviceMode^,0); // спрашиваем функцию, сколько места выдлитть под структуру DEVMODE
DevModeHandle:=GlobalAlloc(GHND,dwNeeded); // Выделяем место
pDeviceMode:=GlobalLock(DevModeHandle); // Возвращаем указатель на выделенное
dwRet:=DocumentProperties(0,Handle,pPrName,pDeviceMode^,pDeviceMode^,DM_OUT_BUFFER); // Считываем текущие настройки (Считывается нормально)
pDeviceMode^.dmOrientation:=Oritnt; // Изменяем их
dwRet:=DocumentProperties(0,Handle,pPrName,pDeviceMode^,pDeviceMode^,DM_IN_BUFFER or DM_OUT_BUFFER); // Пытаемся загнать обратно
// чистим всё...
ClosePrinter(Handle);
GlobalUnlock(DevModeHandle);
GlobalFree(DevModeHandle);
DevModeHandle:=0;
Может действительно здесь что-нибудь не так, опыта пока маловато...