Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SERVEUR D'IMPRESSION POUR IMPRIMER SOUS XP OU VISTA AVEC UNE CANON LBP660 OU AUTRE IMPRIMANTE NON RECONNUE...


Description

Cliquez pour voir la capture en taille normale
Canon n'ayant pas adapté ses drivers pour la laser LBP660, voici une solution pour partager en réseau une LBP660 (ou une autre imprimante non soutenue) avec d'excellents résultats. C'est un tout petit programme qui tourne sur une machine sous Windows 98 (ou certains XP -> j'ai une machine avec XP Pro qui accepte la LBP660 alors que mes autres XP la refusent). Ecrit en VB2005, PrinterLBP660 ne fait qu'attendre des fichiers "jpeg" sur un certain dossier à définir et les imprime. En amont, sur les autres machines XP ou Vista, il faut installer PDFCreator (logiciel gratuit disponible sur le Net) qui crée un driver d'impression capable de transformer vos sorties d'impression sur tous logiciels en fichiers PDF ou JPEG -> choisir Jpeg sur le dossier défini dans PrinterLBP660. Toute impression vers PDFCreator se fait alors sur la LBP660 !
 

Source

  • 'Créez une Form, nommez-la PrinterLBP660 (ou autre)
  • 'Ajoutez-y un Label nommé lblAffichage
  • 'Ajoutez-y un FileSystemWatcher nommé FileSystemWatcher1
  • 'Et copiez ce code après avoir modifié :
  • ' 1/ le dossier (ici "C:\AImprimer") -> il doit exister (pas de traitement d'erreur)
  • ' 2/ le nom de l'imprimante (avec le nom donné dans le Panneau de Configuration)
  • Imports System.Drawing.Printing
  • Imports System.Environment
  • Public Class PrinterLBP660
  • Dim PrintDoc As New PrintDocument()
  • Dim FichiersQueue As New Queue(Of String)
  • Private Sub PrinterLBP660_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  • ChDir("C:\AImprimer") ' <--- Modifier en indiquant ici votre dossier d'impression
  • AddHandler PrintDoc.PrintPage, AddressOf PrintDocument_PrintPage
  • lblAffichage.Text = "Prêt à imprimer"
  • End Sub
  • Private Sub FileSystemWatcher1_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
  • 'S'il y a détection de la création d'un fichier
  • If e.ChangeType = IO.WatcherChangeTypes.Created Then
  • Dim NomDuFichier As String = e.Name
  • 'tout fichier du nom de "shutdown.txt" quel que soit son contenu (même vide) provoque l'arrêt de Windows
  • If NomDuFichier = "shutdown.txt" Then
  • lblAffichage.Text = "Arrêt de Windows..."
  • lblAffichage.BackColor = Color.Red
  • lblAffichage.Refresh()
  • 'temporisation de 10 secondes pour être sûr de ne pas l'effacer avant sa fermeture en écriture
  • Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 10))
  • Do
  • If Now > t Then Exit Do
  • Loop
  • 'on l'efface
  • Kill("shutdown.txt")
  • Dim osInfo As OperatingSystem = OSVersion
  • 'selon la version de Windows
  • If osInfo.Platform = PlatformID.Win32Windows Then 'W95/98
  • 'pour arrêter Windows98
  • Shell("rundll32.exe user.exe,exitwindows")
  • Else
  • 'pour arrêter XP
  • Shell("shutdown -s -t 0")
  • End If
  • ElseIf NomDuFichier.Substring(NomDuFichier.IndexOf(".") + 1) = "jpg" Then
  • lblAffichage.Text = "Impression en cours..."
  • lblAffichage.BackColor = Color.Red
  • lblAffichage.Refresh()
  • FichiersQueue.Enqueue(NomDuFichier)
  • PrintDoc.PrinterSettings.PrinterName = "Canon LBP-660" ' <-- Modifier en indiquant ici le nom de votre imprimante
  • 'tel qu'il apparait dans le Panneau de Configuration / Imprimantes et Télécopieurs
  • 'on commande l'impression
  • PrintDoc.Print()
  • 'temporisation pour laisser le temps au fichier d'être complétement imprimé et fermé
  • Do
  • Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
  • Do
  • If Now > t Then Exit Do
  • Loop
  • 'toutes les secondes on essaye
  • Try
  • 'effacement du fichier
  • Kill(FichiersQueue.Peek)
  • Exit Do
  • Catch
  • End Try
  • Loop
  • FichiersQueue.Dequeue()
  • lblAffichage.Text = "Prêt à imprimer..."
  • lblAffichage.BackColor = Color.GreenYellow
  • lblAffichage.Refresh()
  • End If
  • End If
  • End Sub
  • Private Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
  • 'temporisation pour laisser le temps au fichier d'être complétement transféré et fermé
  • Do
  • Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
  • Do
  • If Now > t Then Exit Do
  • Loop
  • 'toutes les secondes on essaye
  • Try
  • FileOpen(1, FichiersQueue.Peek, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Shared)
  • FileClose(1)
  • Exit Do
  • Catch
  • End Try
  • Loop
  • 'copie du bitmap du fichier-image sur le graphics de l'imprimante
  • e.Graphics.DrawImage(New Bitmap(FichiersQueue.Peek), e.Graphics.VisibleClipBounds)
  • e.HasMorePages = False
  • End Sub
  • End Class
'Créez une Form, nommez-la PrinterLBP660 (ou autre)
'Ajoutez-y un Label nommé lblAffichage
'Ajoutez-y un FileSystemWatcher nommé FileSystemWatcher1 
'Et copiez ce code après avoir modifié :
' 1/ le dossier (ici "C:\AImprimer") -> il doit exister (pas de traitement d'erreur)
' 2/ le nom de l'imprimante (avec le nom donné dans le Panneau de Configuration)
Imports System.Drawing.Printing
Imports System.Environment

Public Class PrinterLBP660
    Dim PrintDoc As New PrintDocument()
    Dim FichiersQueue As New Queue(Of String)

    Private Sub PrinterLBP660_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ChDir("C:\AImprimer") ' <--- Modifier en indiquant ici votre dossier d'impression
        AddHandler PrintDoc.PrintPage, AddressOf PrintDocument_PrintPage
        lblAffichage.Text = "Prêt à imprimer"
    End Sub

    Private Sub FileSystemWatcher1_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
        'S'il y a détection de la création d'un fichier
        If e.ChangeType = IO.WatcherChangeTypes.Created Then
            Dim NomDuFichier As String = e.Name
            'tout fichier du nom de "shutdown.txt" quel que soit son contenu (même vide) provoque l'arrêt de Windows
            If NomDuFichier = "shutdown.txt" Then
                lblAffichage.Text = "Arrêt de Windows..."
                lblAffichage.BackColor = Color.Red
                lblAffichage.Refresh()
                'temporisation de 10 secondes pour être sûr de ne pas l'effacer avant sa fermeture en écriture 
                Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 10))
                Do
                    If Now > t Then Exit Do
                Loop
                'on l'efface
                Kill("shutdown.txt")
                Dim osInfo As OperatingSystem = OSVersion
                'selon la version de Windows
                If osInfo.Platform = PlatformID.Win32Windows Then 'W95/98
                    'pour arrêter Windows98
                    Shell("rundll32.exe user.exe,exitwindows")
                Else
                    'pour arrêter XP
                    Shell("shutdown -s -t 0")
                End If
            ElseIf NomDuFichier.Substring(NomDuFichier.IndexOf(".") + 1) = "jpg" Then
                lblAffichage.Text = "Impression en cours..."
                lblAffichage.BackColor = Color.Red
                lblAffichage.Refresh()
                FichiersQueue.Enqueue(NomDuFichier)
                PrintDoc.PrinterSettings.PrinterName = "Canon LBP-660" ' <-- Modifier en indiquant ici le nom de votre imprimante
                'tel qu'il apparait dans le Panneau de Configuration / Imprimantes et Télécopieurs
                'on commande l'impression
                PrintDoc.Print()
                'temporisation pour laisser le temps au fichier d'être complétement imprimé et fermé
                Do
                    Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
                    Do
                        If Now > t Then Exit Do
                    Loop
                    'toutes les secondes on essaye
                    Try
                        'effacement du fichier
                        Kill(FichiersQueue.Peek)
                        Exit Do
                    Catch
                    End Try
                Loop
                FichiersQueue.Dequeue()
                lblAffichage.Text = "Prêt à imprimer..."
                lblAffichage.BackColor = Color.GreenYellow
                lblAffichage.Refresh()
            End If
        End If
    End Sub

    Private Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        'temporisation pour laisser le temps au fichier d'être complétement transféré et fermé
        Do
            Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
            Do
                If Now > t Then Exit Do
            Loop
            'toutes les secondes on essaye
            Try
                FileOpen(1, FichiersQueue.Peek, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Shared)
                FileClose(1)
                Exit Do
            Catch
            End Try
        Loop
        'copie du bitmap du fichier-image sur le graphics de l'imprimante
        e.Graphics.DrawImage(New Bitmap(FichiersQueue.Peek), e.Graphics.VisibleClipBounds)
        e.HasMorePages = False
    End Sub

End Class

Conclusion

C'est une solution fonctionnelle pour partager une "vieille imprimante" qui fonctionne encore mais n'est plus soutenue sous XP ou Vista à condition de disposer du "vieux PC" avec le bon driver qui l'utilisait, en mettant le tout en réseau... Avec mes 4 ordinateurs sous XP (1 seul acceptant la LBP660 et 3 autres à divers endroits de la maison) je peux imprimer depuis l'un quelconque d'entre eux au choix en laser couleurs sur une HP2600N (Bien sûr, après ce tour joué par Canon, je n'avais plus envie d'investir dans une marque incapable d'assurer la compatibilité ascendante de ses drivers) ou sur ma bonne vieille laser N&B Canon LBP660 qui fonctionne encore très bien.
Les fichiers créés sur le dossier choisi sont automatiquement effacés et l'écriture d'un fichier nommé "shutdown.txt" sur le même dossier éteint l'ordinateur "serveur d'impression"...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de guillaume_00 le 26/09/2008 11:38:34

Salut,

Original mais efficace. Par contre tu devrait remplacer
Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
Do
    If Now > t Then Exit Do
Loop

par

System.Threading.Thread.Sleep(new TimpeSpan(0, 0, 1))

C'est plus propre et ca consomme moin de CPU.

++

signaler à un administrateur
Commentaire de leonick5819 le 23/11/2008 01:45:26

salut mon probleme c que je suis interesse par ce systeme la mais je n y connais rien du tout en code source exite t il une version logiciel ou autre d ailleurs que je puisse faire tourner comme ca

merci d avance

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Tester si l imprimante est prête [ par Mitch ] J aimerais, avant de lancer une impression, tester que la printeuse est bien online. J ai fouiné dans les APIs mais pas moyen de trouver; à part qq fo Code spécifique d'imprimante en Visual Basic [ par Pierre ] Est-il possible en Visual Basic d'envoyer directement des codes de contrôles spécifiques à une imprimante? Je pense particulièrementà la modification config imprimante [ par bertrand ] je cherche à modifier par programme (VB6.0)les paramètres par défaut d'une imprimante. Qualité d'impression [ par Raynald ] Bonjour, j'utilise VB6 avec une imprimante matricielle Epson LQ2550.Depuis que j'ai installé Windows 98, l'imprimante passe 2 fois sur la même ligne Urgent : ajout d'une imprimante avec l'API AddPrinter [ par Cedric_Malache ] Je voudrais ajouter une nouvelle imprimante garce a l'api AddPrinter: Voici la déclaration de l'api en C: Liste imprimante!!! [ par Le J ] Salut,Comment optenir la liste des imprimantes installés sur mon ordinateurs????MerciALPLe J Vb, Access et imprimante!! [ par Le J ] Salut,Je veux changer d'imprimante avant de faire imprimer un état sous access (a partir de vb) et cela ne fonctionne pas!!! Ca fonctionne avec print Imprimante.... [ par RVTT ] Bonjour,Est-il possible d'imprimer en mode text sous VB (Comme sous dos...)Si oui comment ? Changer imprimante!!! URGENT [ par Le J ] Salut,Je veux changer d'imprimante lorsue je vais imprimer un état dans access a partir de VB!!! La fonction Set Printer = Printer(no de l'imprimante IMPRESSION ET DATAREPORT [ par chandrasonic ] SalutJ'ai un probleme :Je voudrais choisir une imprimante autre que celle definie par defaut.Avec set printer=printer(i) par de probleme j'arrive a se


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,702 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.