Drucken funktioniert nicht...



  • Hi,

    ich hab mal ne frage. 😕 Ich möchte in meinen Programm einen Druckbefehl einbauen ich habe zwar schon im FAQs nachgeschaut und was gefunden:

    (ich benütze DEV-C++)

    // C-Version (Dankeschön an Shade Of Mine!)
    #include <stdio.h>
    
    int main ()
    {
        FILE* printer = fopen("LPT1","w");
        if(!printer)
        {
            printf("Drucker konnte nicht gefunden werden, bzw. ist nicht eingeschaltet.\n");
            return EXIT_FAILURE;
        }
    
        fputs("Test Test Test\n",printer);
        fputc('\f',printer);
    
        fclose(printer);
    
        return EXIT_SUCCESS;
    }
    
    // C++-Version
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main ()
    {
        ofstream printer ("LPT1");
        if(!printer)
        {
            cerr << "Drucker konnte nicht gefunden werden, bzw. ist nicht eingeschaltet." << endl;
            return 1;
        }
    
        printer.puts("Test Test Test\n");
        printer.putc('\f');
    
        printer.close();
    
        return 0;
    }
    

    aber leider funktioniert das nicht mit einem Laser-Drucker ich habe dann statt ("LPT1"); ("USB001"); eingetragen aber es kam nix bei meinen Laser drucker raus (bzw an)... Ich verwende einen >> brother HL-2030 an USB1 anschluss << fals es was hilft ich hoffe ihr könnt mir weiter helfen!

    DANKE

    Mit freundlichen Gruß 🙂

    Christian H.



  • Du kannst dafür auch WinAPI Funktionen benutzen. Dafür hätte ich ein Beispiel, was allerdings nur Text druckt.



  • Ja ich will ja nur Text drucken. Wäre net wenn du mir ein Beispiel reinpostest, weil ich kein WinAPI kann.. Danke.. 🙂



  • #include <windows.h>
    
    int WINAPI WinMain( HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow )
    {
    
    //fprintf(stdout, "Debug 0");
    
    	HDC drucker = CreateDC("WINSPOOL", "NAME_MEINES_DRUCKERS_IM_WINDOWS", NULL, NULL);
    /
    
    	DOCINFO dokument_info;
    	memset(&dokument_info, 0, sizeof(DOCINFO));
    	dokument_info.cbSize	= sizeof(DOCINFO);
    	dokument_info.lpszDocName	= "drucktest";
    
            // Text zum drucken
    	char *String = "Testdruck";
    
    	// Drucken starten
    	StartDoc(drucker, &dokument_info);
    	StartPage(drucker);
    
    	// Inhalt ausgeben
    
    	TextOut(drucker, 70, 70, String, strlen(String));
    
    	TextOut(drucker, 10, 17, String, strlen(String));
    
    	EndPage(drucker);
    	EndDoc(drucker);  // Dokument wird geschlossen
    
    	DeleteDC(drucker);
    
    	return 0;
    }
    


  • Vielen Dank du hast mir schon sehr viel weiter geholfe...

    Jetzt kann ich zwar drucken aber ich kann es schlecht in eine Konolenanwendung reinbauen... oder?

    Was ich mir vorstellen könnte wäre wenn das WinAPI Programm eine *.txt datei :p drucken könnte.. also statt einen String druck eine TXT deitei druckt...

    dann könnte ich das WinAPI programm unter drucken.exe speichern und dann mit:

    ...
    
    fstream(drucken);
    drucken.open("datei.txt", ios::out);
    
    drucken << "Dies ist der Text der dann gedruckt werden soll\n\n";
    
    drucken.close();
    
    system("drucken.exe");
    
    ...
    

    die Datei drucken...

    ^^ also das wäre nur eine Vorstellung... klingt bestimmt total blöd aber ich kann mir im mom nix anderes vorstellen...

    Am besten wäre halt das man den Druckbefehl gleich im meinen Konsolenprogramm aufrufen könnte?

    Könntest du mir bitte nocheinmal einen Rat geben??!! Danke!!



  • Naja, dein Weg ist nicht unbedingt elegant.

    Bau die Funktion, die ich gepostet einfach so um, dass sie als Argument eine Zeichenkette übernimmt, die du drucken möchtest. Dann kannst du die Funktion doch in dein Programm einbauen.



  • Ja aber des geht ja nicht...
    ich kann kein Win API funktion in mein C++ Konsolenprogramm rein bauen...



  • Wieso nicht?



  • ja weil des vom compilen net geht... vll stell ich mich auch nur a weng blöd an:
    I NEED HELP!!

    also ich würds ja so machen vv aber es geht nicht bei mir.. 😞

    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    void drucken()
    {
    
    ... keinen Plan wie ich hier die druck funktion einbauen soll ...
    
    }
    int main()
    {
    
    drucken();
    
    getch();
    return 0;
    }
    

    wäre net wenn ihr mal zB was reinpostet

    DANKE!!!!!!!



  • #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
    
      fprintf(stdout, "Debug 0");
    
      HDC drucker = CreateDC("WINSPOOL", "Lexmark Z600 Series", NULL, NULL);
    
        DOCINFO dokument_info;
        memset(&dokument_info, 0, sizeof(DOCINFO));
        dokument_info.cbSize    = sizeof(DOCINFO);
        dokument_info.lpszDocName    = "drucktest";
    
        // Text zum drucken
        char *String = "Testdruck";
    
        // Drucken starten
        StartDoc(drucker, &dokument_info);
        StartPage(drucker);
    
        // Inhalt ausgeben
        TextOut(drucker, 70, 70, String, strlen(String));
        TextOut(drucker, 10, 17, String, strlen(String));
        EndPage(drucker);
        EndDoc(drucker);  // Dokument wird geschlossen
        DeleteDC(drucker);system("PAUSE");
    
      return 0;
    }
    

    wie würde dir das gefallen?? 🙂



  • hey Danke es funktioniert aber immer noch nicht (bzw) so wie ich es will...

    An den Code ist nichts auszusetzen aber ich kann nix damit anfangen:

    Wenn ich des Teil als "Console Application" complier dann kommen Fehlermeldugen...
    Wenn ich des Teil als "Windows Application" complier dann gehts..

    er druckt auch

    aber in des Programm kann ich keine Befehle mehr von "Console Application"
    ein bauen er compliert zwar aber die Befehle wie zb:

    cout << "Text zum drucken eingeben" << endl;
    

    funktionieren nicht mehr obwohl ich alles richtig geschreiben habe und die ganzen "includes" gestetzt habe..

    ich brauch nochmal bitte rat... 😃



  • 1).
    (ALT + P), Parameter -> Linker = -lgdi32
    (ALT + P), -> Algemein = Win32Konsole einstellen!!

    2).
    da wo die Zeile "fprintf(stdout, "Debug 0");" steht, kommt jetzt deine abfrage rein! 🙂

    // Text zum drucken
        char txt[111];
    
      printf("Gib den Text ein:\n");
      scanf("%s", &txt);
      printf("Sie gaben ein: ->> %s\n", txt);
    


  • Danke jetzt funktioniert es so wie ich das will ihr seit super!!!!

    😃 🙂 Chris


Log in to reply