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 2010

    Gruß
    Eule

    EDIT: 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;
    	} 
    }
    

Anmelden zum Antworten