S. Rajagopalan hat folgendes geschrieben: |
void CRenamePrinterDlg::OnRenamePrinter()
{ HANDLE hPrinter = NULL; DWORD dwNeeded = 0; PRINTER_INFO_2 *pi2 = NULL; DEVMODE *pDevMode = NULL; PRINTER_DEFAULTS pd; BOOL bFlag; LONG lFlag; // Open printer handle (on Windows NT, you need full-access because you // will eventually use SetPrinter)... LPTSTR pPrinterName = "LASER-Printer" ; ZeroMemory(&pd, sizeof(pd)); pd.DesiredAccess = PRINTER_ALL_ACCESS; bFlag = OpenPrinter(pPrinterName, &hPrinter, &pd); if (!bFlag || (hPrinter == NULL)) return ; // The first GetPrinter tells you how big the buffer should be in // order to hold all of PRINTER_INFO_2. Note that this should fail with // ERROR_INSUFFICIENT_BUFFER. If GetPrinter fails for any other reason // or dwNeeded isn't set for some reason, then there is a problem... SetLastError(0); bFlag = GetPrinter(hPrinter, 2, 0, 0, &dwNeeded); if ((!bFlag) && (GetLastError() != ERROR_INSUFFICIENT_BUFFER) || (dwNeeded == 0)) { ClosePrinter(hPrinter); return ; } // Allocate enough space for PRINTER_INFO_2... pi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded); if (pi2 == NULL) { ClosePrinter(hPrinter); return ; } // The second GetPrinter fills in all the current settings, so all you // need to do is modify what you're interested in... bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded); CString bval ; bval.Format(" GetPrinter: %d",bFlag) ; AfxMessageBox(bval) ; if (!bFlag) { GlobalFree(pi2); ClosePrinter(hPrinter); return ; } // If GetPrinter didn't fill in the DEVMODE, try to get it by calling // DocumentProperties... if (pi2->pDevMode == NULL) { dwNeeded = DocumentProperties(NULL, hPrinter, pPrinterName, NULL, NULL, 0); if (dwNeeded <= 0) { GlobalFree(pi2); ClosePrinter(hPrinter); return ; } pDevMode = (DEVMODE *)GlobalAlloc(GPTR, dwNeeded); if (pDevMode == NULL) { GlobalFree(pi2); ClosePrinter(hPrinter); return ; } lFlag = DocumentProperties(NULL, hPrinter, pPrinterName, pDevMode, NULL, DM_OUT_BUFFER); if (lFlag != IDOK || pDevMode == NULL) { GlobalFree(pDevMode); GlobalFree(pi2); ClosePrinter(hPrinter); return ; } pi2->pDevMode = pDevMode; } // Driver is reporting that it doesn't support this change... if (!(pi2->pDevMode->dmFields & DM_ORIENTATION)) { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return ; } // Specify exactly what we are attempting to change... /*pi2->pDevMode->dmFields = DM_ORIENTATION; pi2->pDevMode->dmOrientation = dmOrientation;*/ //CTS_SR LPTSTR lpPrinterName = "Hi! I am the new printer" ; pi2->pPrinterName = lpPrinterName ; // Do not attempt to set security descriptor... pi2->pSecurityDescriptor = NULL; // Make sure the driver-dependent part of devmode is updated... lFlag = DocumentProperties(NULL, hPrinter, pPrinterName, pi2->pDevMode, pi2->pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER); if (lFlag != IDOK) { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return ; } // Update printer information... bFlag = SetPrinter(hPrinter, 2, (LPBYTE)pi2, 0); if (!bFlag) // The driver doesn't support, or it is unable to make the change... { GlobalFree(pi2); ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return ; } // Tell other apps that there was a change... SendMessageTimeout(HWND_BROADCAST, WM_DEVMODECHANGE, 0L, (LPARAM)(LPCSTR)pPrinterName, SMTO_NORMAL, 1000, NULL); // Clean up... if (pi2) GlobalFree(pi2); if (hPrinter) ClosePrinter(hPrinter); if (pDevMode) GlobalFree(pDevMode); return ; } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!