Détecter et sélectionner une imprimante

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Détecter et sélectionner une imprimante

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Détecter et sélectionner une imprimante

Message par falsam »

PrintRequester() Regarde l'exemple si dessous.
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%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Détecter et sélectionner une imprimante

Message 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.
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Détecter et sélectionner une imprimante

Message par Marc56 »

En ligne de commande Windows

Code : Tout sélectionner

wmic printer get name
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

Code : Tout sélectionner

RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "nom_imprimante"
:wink:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Détecter et sélectionner une imprimante

Message 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.
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%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Détecter et sélectionner une imprimante

Message par omega »

Merci à vous deux (Falsam et Marc56)

Je vais tester
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Détecter et sélectionner une imprimante

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Détecter et sélectionner une imprimante

Message 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.
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%
Répondre