Здравствуйте 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