Druck aus Win32 Konsolenanwendung - GetDefaultPrinter()
-
Halo,
zu aller erst ich bin noch Neuling was das Programmieren in C/C++ anbelangt, habt daher bitte ein wnig Nachsicht mit mir.Nun aber auch gleich zu meinem Problem.
Z.Z. versuche ich auseiner Win32 Konsolen-Anwendung heraus einfache Strings an einen Drucker zu übermitteln. Leider scheint es dabei immer wieder zu einem Fehler während des Aufrufs der Funktion "GetDefaultPrinter()". Anscheinend kann kein Defau Printer reserviert werden.Könnte mir jemand verraten wie eine Funktion aussehen müsse, welche automatisch einen string an den als Standarddrucker eingerichteten Drucker des Systems sendet?
Verwendetes Betriebssystem: Win7 -HomePrem
IDE: Visual Studio 2010Gruß
EuleEDIT: Ehe ich es vergesse LPVOID lpData erhält den zu druckenden std::string,
DWORD dwCount entspricht der Länge des String in Byte.void print_file(LPVOID lpData, DWORD dwCount) { LPSTR pszBuffer = NULL; //Name des Deafult Printer LPDWORD pcchBuffer = NULL; //Länge des Drucker-Namens inkl. \0 LPHANDLE printerHandle = NULL; //Handle auf zu verwendenden Printer DWORD dwWritten = NULL; DOC_INFO_1 docInfo; //Struktur mit den DokumentInformationen docInfo.pDocName = (wchar_t*)"Zeugnis"; docInfo.pOutputFile = NULL; docInfo.pDatatype = (wchar_t*)"text"; /* Default Printer des Systems ermitteln */ if (GetDefaultPrinterA(pszBuffer, pcchBuffer) == NULL) { std::cout << "Invalid DefaultPrinter - Print aborted" << std::endl; return; } else { std::cout << "Using Printer - " << pszBuffer << std::endl; } /* Verwendung des Printer ohne Parametrierung der PRINTER_DEFAULTS Struktur (NULL) */ if (OpenPrinterA(pszBuffer, printerHandle, NULL)) { std::cout << "Invalid PrinterHandle - Print aborted" << std::endl; ClosePrinter(printerHandle); return; } /* Dokument vorbereiten */ if (StartDocPrinter(printerHandle, 1, (LPBYTE) &docInfo)) { std::cout << "Invalid PrintJob - Print aborted" << std::endl; ClosePrinter(printerHandle); return; } /* Seite vorbereiten */ if(StartPagePrinter(printerHandle)) { EndDocPrinter(printerHandle); ClosePrinter(printerHandle); return; } /* Daten an Drucker senden */ if(WritePrinter(printerHandle, lpData, dwCount, &dwWritten) ) { EndPagePrinter(printerHandle); EndDocPrinter(printerHandle); ClosePrinter(printerHandle); return; } }