Détecter et sélectionner une imprimante
Détecter et sélectionner une imprimante
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
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
Win7 (x64) 64 bits Pb 5.72
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Détecter et sélectionner une imprimante
PrintRequester() Regarde l'exemple si dessous.
http://www.purebasic.com/french/documen ... er.pb.html
http://www.purebasic.com/french/documen ... er.pb.html
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Détecter et sélectionner une imprimante
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.
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.
Win7 (x64) 64 bits Pb 5.72
Re: Détecter et sélectionner une imprimante
En ligne de commande Windows
Exemple d'intégration en PB
(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

Code : Tout sélectionner
wmic printer get name
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
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
Code : Tout sélectionner
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "nom_imprimante"

- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Détecter et sélectionner une imprimante
Ou l'API WriteProfileString_()
Il n'est pas obligatoire de choisir l'imprimante. L'impression se fera sur l'imprimante par défaut.
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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Détecter et sélectionner une imprimante
Merci à vous deux (Falsam et Marc56)
Je vais tester
Je vais tester
Win7 (x64) 64 bits Pb 5.72
Re: Détecter et sélectionner une imprimante
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
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
Win7 (x64) 64 bits Pb 5.72
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Détecter et sélectionner une imprimante
Teste mon code précédent et tu sauras. !!Omega a écrit :maintenant que j'ai choisi mon imprimante et je connais son nom (imp$), comment rendre cette imprimante par default?
Avec ce code j'ai pu faire des impressions sur 3 imprimantes différentes.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%