Imprimer direct sans choisir l'imprimante
Imprimer direct sans choisir l'imprimante
Voila dans le titre, y a tout.
Je ne désire pas devoir choisir l'imprimante, je connais son nom et désire tout envoyer avec juste un "open print" (terme arbitraire que j'ai choisi" et envoyer les données, sachant que c'est que du text ^^.
On peux faire ou pas ?
Merci a vous ^^
Je ne désire pas devoir choisir l'imprimante, je connais son nom et désire tout envoyer avec juste un "open print" (terme arbitraire que j'ai choisi" et envoyer les données, sachant que c'est que du text ^^.
On peux faire ou pas ?
Merci a vous ^^
- Mindphazer
- Messages : 693
- Inscription : mer. 24/août/2005 10:42
Re: Imprimer direct sans choisir l'imprimante
Peut-être ici ? :
https://www.purebasic.fr/english/viewto ... 82#p519982
(pas testé, je suis pas sous Windows à la maison)
https://www.purebasic.fr/english/viewto ... 82#p519982
(pas testé, je suis pas sous Windows à la maison)
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Imprimer direct sans choisir l'imprimante
Ca semblerait bien être ça, mais j'ai ce message d'erreur :
[21 :48 :53] [ERREUR] Accès mémoire invalide. (erreur de lecture à l'adresse 18446744071637306972)
Mais merci m'en même
[21 :48 :53] [ERREUR] Accès mémoire invalide. (erreur de lecture à l'adresse 18446744071637306972)
Mais merci m'en même

- Mindphazer
- Messages : 693
- Inscription : mer. 24/août/2005 10:42
Re: Imprimer direct sans choisir l'imprimante
Sinon tu peux essayer ça :
https://www.purebasic.fr/english/viewtopic.php?t=77057
(toujours pas testé bien sûr)
https://www.purebasic.fr/english/viewtopic.php?t=77057
(toujours pas testé bien sûr)
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Imprimer direct sans choisir l'imprimante
pourtant bien décrit dans la doc...
Code : Tout sélectionner
Resultat = DefaultPrinter()
If Resultat <> 0
If StartPrinting("")
; les trucs a imprimer se mettent ici
StopPrinting()
EndIf
Else
MessageRequester("Info","Pas d'imprimante par défaut.")
EndIf
Re: Imprimer direct sans choisir l'imprimante
@case
Non tu utilise l'imprimante par défaut.
Ce que je cherche, c'est outrepassé l'imprimante et de donner le nom de l'imprimante à laquelle je veux imprimer.
Ex: Par défaut j'ai ma laser et je désire imprimer sur mon imprimante ticket " non de l'imprimant" et lancer sans devoir la choisir.
les exemple au-dessus ne fonctionne m'malheureusement pas
Non tu utilise l'imprimante par défaut.
Ce que je cherche, c'est outrepassé l'imprimante et de donner le nom de l'imprimante à laquelle je veux imprimer.
Ex: Par défaut j'ai ma laser et je désire imprimer sur mon imprimante ticket " non de l'imprimant" et lancer sans devoir la choisir.

les exemple au-dessus ne fonctionne m'malheureusement pas

- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
Petite question. Tu envoies ton ticket ligne par ligne vers l'imprimante ou envoies tu un fichier texte dans un seul flux ?
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%
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
Petit code Windows uniquement : Imprimer sur une imprimante qui peut ne pas être celle par défaut.
Pour mon test, j'imprime sur une imprimante PDF
1 Mémoriser le nom de l'imprimante par défaut
2 Définir une nouvelle imprimante avec son nom windows
3 Lancer l'impression
4 Redéfinir l'imprimante par défaut initial.
Pour mon test, j'imprime sur une imprimante PDF
1 Mémoriser le nom de l'imprimante par défaut
2 Définir une nouvelle imprimante avec son nom windows
3 Lancer l'impression
4 Redéfinir l'imprimante par défaut initial.
Code : Tout sélectionner
EnableExplicit
; OBtenir le nom de l'imprimante par défaut
Procedure.s GetDefaultPrinter()
Protected name.s = Space(255)
GetProfileString_("Windows","Device", "", @name, 255)
ProcedureReturn StringField(name,1,",")
EndProcedure
; Sélectionner une imprimante (API)
Procedure SetPrinter(Name.s)
WriteProfileString_("windows", "Device", Name)
EndProcedure
; Pour l'exemple, test d'impression dans un fichier PDF
; Mémoriser l'imprimante par défaut
Define DefaultPrinter.s = GetDefaultPrinter()
; Définir une nouvelle imprimante par défaut
SetPrinter("Microsoft Print To PDF")
; Lance l'impression sur l'imprimante selectionné
If DefaultPrinter()
; Nom du job qui apparaitra dans la file d'attente
If StartPrinting("Test d'impression")
;Prépare la page à imprimer
LoadFont(0, "Arial", 100)
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 : Souci d'impression. Vérifier le nom de l'imprimante"
EndIf
EndIf
; Ne pas oublier de revenir à l'ancien nom d'imprimante par défaut
SetPrinter(DefaultPrinter)[/code]
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%
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
Un autre code basé sur le précèdent code pour Imprimer un fichier texte sur une imprimante qui peut ne pas être celle par défaut..
Code : Tout sélectionner
EnableExplicit
; Obtenir le nom de l'imprimante par défaut
Procedure.s GetDefaultPrinter()
Protected name.s = Space(255)
GetProfileString_("Windows","Device", "", @name, 255)
ProcedureReturn StringField(name,1,",")
EndProcedure
; Sélectionner une imprimante
Procedure SetPrinter(Name.s)
WriteProfileString_("windows", "Device", Name)
EndProcedure
; Pour l'exemple, test d'impression dans un fichier PDF
; Mémoriser l'imprimante par défaut
Define DefaultPrinter.s = GetDefaultPrinter()
Define Format.i, CurrentLine.s, LineY.i, CountLine
; Définir une nouvelle imprimante par défaut
SetPrinter("Microsoft Print To PDF")
; Lance l'impression sur l'imprimante selectionné
If DefaultPrinter()
; Nom du job qui apparaitra dans la file d'attente
If StartPrinting("Test d'impression")
;Prépare la page à imprimer
LoadFont(0, "Arial", 20)
If StartDrawing(PrinterOutput())
BackColor(RGB(255, 255, 255))
FrontColor(RGB(0, 0, 0))
DrawingFont(FontID(0))
If ReadFile(0, "c:\test.txt")
; Détection du format (UTF8, ASCII, Unicode)
Format = ReadStringFormat(0)
; Lecture de chaque ligne du fichier texte
While Eof(0) = 0
CurrentLine = ReadString(0, Format)
; Ajouter un espace quand on rencontre une ligne vide
If Len(CurrentLine) = 0
CurrentLine = " "
EndIf
; Dessiner la ligne
DrawText(10, LineY, CurrentLine)
; Calculer l'emplacement Y de la ligne suivante
LineY + TextHeight(CurrentLine)
Wend
CloseFile(0)
EndIf
StopDrawing()
EndIf
StopPrinting()
Debug "Impression terminée"
Else
Debug "Oops : Souci d'impression. Vérifier le nom de l'imprimante"
EndIf
EndIf
; Ne pas oublier de revenir à l'ancien nom d'imprimante par défaut
SetPrinter(DefaultPrinter)[/code]
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: Imprimer direct sans choisir l'imprimante
Merci Falsam pour ces exemples clairs comme d'habitude
ça va aussi m'être utile.
J'avais trouvé sur le forum us un exemple (compliqué) qui listait toutes les imprimantes installées mais il était pour les anciennes version de PB en mode ascii donc donnait un affichage bizarre.
J'ai modifié le tien pour juste afficher l'imprimante par défaut et comprendre)
(Bizarrement, la première fois, sans StringField, ça n'affichait rien? (et pas de ',' dans ShowVariableViewer()) ?)
(J'essaye maintenant de le modifier pour afficher toutes les imprimantes dans une ComboBox pour l'intégrer à un programme et que l'utilisateur puisse choisir directement (et garder cette imprimante dans ses prefs))


J'avais trouvé sur le forum us un exemple (compliqué) qui listait toutes les imprimantes installées mais il était pour les anciennes version de PB en mode ascii donc donnait un affichage bizarre.
J'ai modifié le tien pour juste afficher l'imprimante par défaut et comprendre)
(Bizarrement, la première fois, sans StringField, ça n'affichait rien? (et pas de ',' dans ShowVariableViewer()) ?)
Code : Tout sélectionner
Printers_Names$ = Space(255)
GetProfileString_("Windows","Device", "", @Printers_Names$, 255)
Debug "Imprimante par défaut : " + Printers_Names$

- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
J'ai un code qui t'appartient pour obtenir la liste de toutes les imprimantesMarc56 a écrit : mer. 26/févr./2025 9:34 (J'essaye maintenant de le modifier pour afficher toutes les imprimantes dans une ComboBox
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
Avec cette procédure, l'imprimante sélectionnée deviendra l'imprimante par défaut.Marc56 a écrit : mer. 26/févr./2025 9:34 l'utilisateur puisse choisir directement (et garder cette imprimante dans ses prefs))
Code : Tout sélectionner
Procedure SetPrinter(Name.s)
WriteProfileString_("windows", "Device", Name)
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: Imprimer direct sans choisir l'imprimante
aaahhhh, "wmic" je l'avais oublié.
Merci
Merci
Re: Imprimer direct sans choisir l'imprimante
wmic ne fonctionne plus normalement au dessus de windows 10 (21H1) ! Si ?
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
Je suis en version 24H2 et wmic fonctionne encore ....venom a écrit : sam. 01/mars/2025 14:09 wmic ne fonctionne plus normalement au dessus de windows 10 (21H1) !
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%
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Imprimer direct sans choisir l'imprimante
Lister les imprimantes installées avec PowerShell et la fonction Get-Printer
Code : Tout sélectionner
EnableExplicit
Enumeration
#Win
#Rpt
EndEnumeration
Define Buffer.s
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("powershell.exe", "Get-Printer | Select-Object -Property Name", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Run
While ProgramRunning(Run)
If AvailableProgramOutput(Run)
Buffer = ReadProgramString(Run)
If Len(Trim(Buffer)) > 0
AddGadgetItem(#Rpt, -1, Buffer)
EndIf
EndIf
Wend
CloseProgram(Run)
; Enlever entete de colonne
RemoveGadgetItem(#Rpt, 0) : RemoveGadgetItem(#Rpt, 0) : RemoveGadgetItem(#Rpt, 0)
Else
AddGadgetItem(#Rpt, -1, "Erreur")
EndIf
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend[/code]
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%