Re: Замумукался я с этими принтерами (помогите!)
От: Lom  
Дата: 23.10.01 05:04
Оценка:
Здравствуйте Antic, Вы писали:

A>Как сказано в клевом MSDN

A>Чтобы получить дефолтовый принетр под 95-98 надо:
A>
A> BOOL bFlag;
A> PRINTER_INFO_2 *ppi2 = NULL;
A> DWORD dwNeeded = 0;
A> DWORD dwReturned = 0;
A> HDC PrinterDC;


A> char pPrinterName [50];

A> char pDriverName[50];
A> char temp[50];
A>
A>EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, 0, NULL, &dwNeeded, &dwReturned);
A> if (dwNeeded == 0)
A>
A> // типа нэту принтеров
A> //return FALSE;
A>
A>
A> ppi2 = (LPPRINTER_INFO_2) LocalAlloc (LPTR, dwNeeded);

A> bFlag = EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, NULL, dwNeeded, &dwNeeded, &dwReturned);


Ошибка 1. Надо писать:
HLOCALC mem=LocalAlloc (LPTR, dwNeeded);
ppi2=(LPPRINTER_INFO_2) LocalLock(mem)
... вызов EnumPrinters и всего где нужно ppi2
LocalUnlock(mem);
LocalFree(mem);


A> if (!bFlag)

A> {
A> LocalFree (LocalHandle (ppi2));
A> return FALSE;
A> }
A>
A>

A> // создаем контектс устройства принтера

A> PrinterDC = CreateDC ((LPCTSTR)ppi2->pDriverName, (LPCTSTR)ppi2->pPrinterName , NULL, NULL);
A>У меня этот кусок не работает нифига, при вызове второго EnumPrinters ошибка в winspool.drv

Ошибка 2. Надо делать вызов так
PrinterDC = CreateDC (NULL, (LPCTSTR)ppi2->pPrinterName , NULL, NULL);
Читай хелп. Работает и в 95-98 и в NT

A>Чтобы получить дефолотовый принтер под NT:

A> if (GetProfileString("windows", "device", ",,,", cBuffer, MAXBUFFERSIZE) <= 0)
A> return FALSE;
A>
A> // Printer name precedes first "," character...
A> char *token;
A> ZeroMemory(pPrinterName, sizeof(char)*50);
A> ZeroMemory(pDriverName, sizeof(char)*50);

A> token = strstr(cBuffer, ",");

A>
A> strncpy(pPrinterName, cBuffer, strlen(cBuffer) — strlen(token));
A>
A> token++;
A> strcpy(temp, token);
A> token = strstr(temp, ",");
A> strncpy(pDriverName, temp, strlen(temp) — strlen (token));
A>

A>

A> PrinterDC = CreateDC ( (LPCTSTR) pDriverName, (LPCTSTR) pPrinterName , NULL, NULL);
A>
A>Все ништяк работает и под 98 и под NT

A>так вот собтвенно вопрос люди добрые, мне надо сделать универсальную программу 95-98-NT, есть ли особая разница при использовании

A>GetProfileString под NT и под 95-98 -й?


Насчет разницы — не знаю. Лучше делать комбинированный вызов вариант 1, а если не удалось — то вариант 2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.