Drucken (nicht über LPT1)



  • Hallo,

    In der FAQ habe ich dieses Code-Beispiel für C zum Drucken gefunden:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
      FILE * Datei;
      FILE * Drucker;
    
      Datei = fopen( "Datei.dat" , "r" );
      Drucker = fopen( "LPT1" , "w" );
    
      if ( Datei == NULL || Drucker == NULL )
      {
        perror ( "Datei und//oder Drucker konnten nicht geöffnet werden" );
    
        return EXIT_FAILURE;
      }
    
      while( !feof( Datei ) )
      {
        fputc ( fgetc ( Datei ) , Drucker );
      }
    
      fputc( '\f' , Drucker );
      fclose( Drucker );
      fclose( Datei );
    
      return EXIT_SUCCESS;
    }
    

    Viele heutige Drucker werden jedoch über USB angeschlossen.
    Wie kann ich statt "LPT1" einfach den als "Standard" definierten Drucker ansteuern?



  • Falls sich "LPT1" nicht einfach durch "USBX" austauschen lässt, musst du wohl über die WinAPI an den Drucker.

    Soll ich dich dorthin verschieben?

    MfG SideWinder



  • Wenn ich dort eine Antwort bekomme, ist mir das schon recht! 😉



  • Na, dann auf zum WinAPI-Forum.

    MfG SideWinder





  • @tompo:
    ich hab das gleiche Problem... das mit USBX funktioniert ja leider nicht... aber wie geht das dann über WinAPI??



  • Im Petzold steht etwas dazu. Bei mir sieht das Ganze dann so aus:

    //Printerdialog anzeigen
    PRINTDLG pd = { sizeof( PRINTDLG ) };
    pd.hwndOwner = hwnd;
    pd.Flags = PD_RETURNDC;
    if( !PrintDlg( &pd ) )
    	return 0;
    
    //Ich möchte Grafik drucken
    if( !( GetDeviceCaps( pd.hDC, RASTERCAPS ) & RC_BITBLT ) )
    {
    	MessageBox( hwnd, "Dieser Drucker unterstüzt keine Grafikausgabe", "Anwendung", 0 );
    	DeleteDC( pd.hDC );
    	return 0;
    }
    
    DOCINFO di = { sizeof( DOCINFO ) };
    di.lpszDocName = "Dokument";
    //Druckauftrag starten
    if( StartDoc( pd.hDC, &di ) > 0 )
    {
    	//Neue Seite starten
    	if( StartPage( pd.hDC ) > 0 )
    	{
    		//Auf dem pd.hDC rummalen und Ausgaben machen
    		//Seite abschliessen
    		if( EndPage( pd.hDC ) > 0 )
    			//Dokument abschliessen und zum Drucker senden
    			EndDoc( pd.hDC );
    	}
    }
    //Kontex freigeben
    DeleteDC( pd.hDC );
    

    Schlag die Funktionen in der MSDN nach, wenn du mehr wissen willst. Dort finden sich AFAIK auch noch Codebeispiele.


Anmelden zum Antworten