Page 1 sur 1
Détecter et sélectionner une imprimante
Publié : jeu. 28/sept./2017 21:24
par omega
Bonsoir,
Je cherche à savoir s'il y a possibilité de détecter toutes les imprimantes (installées) et pouvoir sélectionner une d'entre elles avant d'imprimer.
Merci
Re: Détecter et sélectionner une imprimante
Publié : jeu. 28/sept./2017 23:39
par falsam
Re: Détecter et sélectionner une imprimante
Publié : ven. 29/sept./2017 12:34
par omega
Bonjour Falsam
PrintRequester() signifie préparer l'imprimante connectée (par défaut) pour l'impression. Moi je cherche à lister les imprimantes existantes (connectée ou partagées) afin de choisir (sur un combo par exemple) celle que je voudrais utiliser. Une fois l'imprimante choisie, il va falloir aussi la sélectionner (en pb). Donc, 2 questions: Détecter les imprimantes puis sélectionner celle que l'utilisateur choisira.
Je ne sais pas si cela est possible en pb.
Re: Détecter et sélectionner une imprimante
Publié : ven. 29/sept./2017 13:11
par Marc56
En ligne de commande Windows
Exemple d'intégration en PB
Code : Tout sélectionner
EnableExplicit
Enumeration
#Win
#Rpt
EndEnumeration
SetGadgetFont(#PB_Any, FontID(LoadFont(#PB_Any, "Verdana", 8)))
OpenWindow(#Win, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#Rpt, 5, 5, WindowWidth(#win) - 10, WindowHeight(#Win) - 10)
Define Run = RunProgram("wmic", "printer get name", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Run
While ProgramRunning(Run)
If AvailableProgramOutput(Run)
AddGadgetItem(#Rpt, -1, ReadProgramString(Run))
EndIf
Wend
CloseProgram(Run)
RemoveGadgetItem(#Rpt, 0) ; (enlever la première ligne de titre 'name')
Else
AddGadgetItem(#Rpt, -1, "Erreur")
EndIf
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
(Beaucoup de lignes en trop, mais comme on est dans la section débutant, autant montrer une manière propre de coder)
Maintenant, ce programme ne fait que lister les imprimantes installées. Tu ne peux pas (à ma connaissance) changer d'imprimante via PB sans passer par le PrintRequester().
La seule alternative serait de changer l'imprimante par défaut niveau Windows puis utiliser DefaultPrinter()
Même méthode RunProgram() mais avec

Re: Détecter et sélectionner une imprimante
Publié : ven. 29/sept./2017 17:27
par falsam
Ou l'API WriteProfileString_()
Code : Tout sélectionner
EnableExplicit
Enumeration
#Win
#Rpt
#Print
EndEnumeration
Declare SetPrinter()
Declare PrintJob()
SetGadgetFont(#PB_Any, FontID(LoadFont(#PB_Any, "Verdana", 8)))
OpenWindow(#Win, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#Rpt, 5, 5, WindowWidth(#win) - 10, WindowHeight(#Win) - 100)
ButtonGadget(#Print, 5, WindowHeight(#Win) - 50, 100, 22, "Print")
Define Run = RunProgram("wmic", "printer get name", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Run
While ProgramRunning(Run)
If AvailableProgramOutput(Run)
AddGadgetItem(#Rpt, -1, ReadProgramString(Run))
EndIf
Wend
CloseProgram(Run)
RemoveGadgetItem(#Rpt, 0) ; (enlever la première ligne de titre 'name')
Else
AddGadgetItem(#Rpt, -1, "Erreur")
EndIf
BindGadgetEvent(#Rpt, @SetPrinter())
BindGadgetEvent(#Print, @PrintJob())
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Procedure SetPrinter()
Protected SelectPrinter.s = Trim(GetGadgetItemText(#Rpt, GetGadgetState(#Rpt)))
Debug "Imprimante par defaut " + SelectPrinter
WriteProfileString_("windows", "Device", SelectPrinter)
EndProcedure
Procedure PrintJob()
LoadFont(0, "Arial", 100)
;lance l'impression sur l'imprimante par defaut
If DefaultPrinter()
;Prépare la page à imprimer
If StartPrinting("Test d'impression") ;Nom du job qui apparaitra dans la file d'attente
If StartDrawing(PrinterOutput())
BackColor(RGB(255, 255, 255))
FrontColor(RGB(0, 0, 0))
DrawingFont(FontID(0))
DrawText(100, 300, "Quelle belle ligne d'impression")
StopDrawing()
EndIf
StopPrinting()
Else
Debug "Oops : On imprime pas "
EndIf
EndIf
EndProcedure
Il n'est pas obligatoire de choisir l'imprimante. L'impression se fera sur l'imprimante par défaut.
Re: Détecter et sélectionner une imprimante
Publié : ven. 29/sept./2017 19:59
par omega
Merci à vous deux (Falsam et Marc56)
Je vais tester
Re: Détecter et sélectionner une imprimante
Publié : dim. 01/oct./2017 21:43
par omega
Bonsoir
J'ai testé avec succès le 1er code proposé par Marc56. Il me donne la liste des imprimantes connectés. Merci beaucoup pour le code.
Il reste une petite chose: maintenant que j'ai choisi mon imprimante et je connais son nom (imp$), comment rendre cette imprimante par default?
Merci
Re: Détecter et sélectionner une imprimante
Publié : dim. 01/oct./2017 23:18
par falsam
Omega a écrit :maintenant que j'ai choisi mon imprimante et je connais son nom (imp$), comment rendre cette imprimante par default?
Teste mon code précédent et tu sauras. !!
Avec ce code j'ai pu faire des impressions sur 3 imprimantes différentes.