Re[4]: изменение параметров печати принтера
От: magcyril Россия  
Дата: 27.05.02 10:59
Оценка:
P>ЗЫж А вообще, прислал бы код, а то так гадать можно долго...

спасибо за пример, но мне надо изменить свойства принтера перманентно и локально.
это будет происходить при заходе в пользователя в домен. на локальной машине я админ

вот код с сокращениями, на SetPrinter на Win2K получаю "Access is denied", т.к.
код "лезет" менять настройки непосредственно на сетевом принтере (?)


#include <windows.h>
#include <winspool.h>
#include <stdio.h>
#include <tchar.h>
#include <malloc.h>

int _tmain(int argc, _TCHAR* argv[])
{
const DWORD datalength = 1024; // длина массивов
_TCHAR PrinterName[datalength]; // имя принтера
DWORD dwLength = datalength;

// получаем имя принтера по умолчанию
GetDefaultPrinter(PrinterName, &dwLength);

// открываем принтер по умолчанию
HANDLE phPrinter;
OpenPrinter(PrinterName, &phPrinter, NULL);

// получаем текущие настройки принтера
// 1) получаем размер структуры памяти DEVMODE под свойства принтера
LONG bytes = DocumentProperties(NULL, phPrinter, PrinterName, NULL, NULL, 0);
DEVMODE *dvMode;
dvMode = (DEVMODE *)malloc(bytes);

// 2) получаем текущие настройки принтера
DocumentProperties(NULL, phPrinter, PrinterName, dvMode, NULL, DM_OUT_BUFFER);

// 3аменяем разрещающую способность печати
(*dvMode).dmPrintQuality = DMRES_LOW;
(*dvMode).dmFields = DM_PRINTQUALITY;

// запоминаем новые настройки
DocumentProperties(NULL, phPrinter, PrinterName, dvMode, dvMode, DM_IN_BUFFER | DM_OUT_BUFFER);

DWORD Level = 2; // information level
PRINTER_INFO_2 *pPrinter = NULL;
DWORD cbBuf = 0; // size of buffer
DWORD dwNeeded = 0; // bytes received or required

// получаем размер памяти под PRINTER_INFO_2
GetPrinter(phPrinter, 2, 0, 0, &dwNeeded);

// выделяем память под PRINTER_INFO_2
pPrinter = (PRINTER_INFO_2 *)malloc(dwNeeded);
cbBuf = dwNeeded + 1;


GetPrinter(phPrinter, Level, (BYTE*)pPrinter, cbBuf, &dwNeeded);
(*pPrinter).pDevMode = dvMode; // новые настройки

// запоминаем установки
SetPrinter(phPrinter, Level, (BYTE*)pPrinter, 0);

ClosePrinter(&phPrinter);

return 0;
}
Christmas spirit is not what you drink
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.