Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Enumération des imprimantes

3 réponses
Avatar
Bertrand Lenoir-Welter
Bonjour

Lorsque j'énumère les imprimantes disponibles, sur certaines stations il
en manque (en général des imprimantes virtuelles ou réseau). J'utilise
une méthode qui est peut-être un peu ancienne :
PRINTER_INFO_5 Info[32];
DWORD Count,Nb;
char asPrinterList[32][100];
EnumPrinters(PRINTER_ENUM_LOCAL,
NULL,
5,
(unsigned char *)Info,
sizeof(Info),
&Count,
&Nb);
for(int i=0;(i<32)&&(i<(int)Nb)&&(Info[i].pPrinterName);i++)
strcpy(asPrinterList[i],Info[i].pPrinterName);

J'ai essayé PRINTER_INFO_2 et PRINTER_INFO_4, mais il m'en manque
encore, d'ailleurs pas toujours les mêmes. Peut-être serait-il plus
judicieux de lister en puisant l'info directement dans la base de
registre, mais je sais pas faire.

Quelqu'un aurait-il une fonction bien rodée qui liste toutes les
imprimantes sans en oublier ? Tout ce dont j'ai besoin, c'est le nom de
l'imprimante pour utiliser ensuite OpenPrinter().

Merci d'avance pour tout tuyau, même crevé, allez.

Bertrand

3 réponses

Avatar
Christian ASTOR
On 21 déc, 18:35, Bertrand Lenoir-Welter <bertrand-dot-2007-at-galaad-
dot-net> wrote:

Lorsque j'énumère les imprimantes disponibles, sur certaines stations il
en manque (en général des imprimantes virtuelles ou réseau). J'utili se
une méthode qui est peut-être un peu ancienne :
PRINTER_INFO_5 Info[32];
DWORD Count,Nb;
char asPrinterList[32][100];
EnumPrinters(PRINTER_ENUM_LOCAL,




PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS
doit les énumérer toutes (hors PRINTER_ENUM_REMOTE )
Avatar
Bertrand Lenoir-Welter
Bonsoir Christian

Le problème, c'est que ça doit marcher aussi sous Win95/98/ME. Or,
l'aide dit que PRINTER_ENUM_CONNECTIONS est "NT only".

Mais bon, je suis en train de jongler avec une double énumération avec
PRINTER_INFO_5 suivi, si l'OS est de type NT, de PRINTER_INFO_4 en
traquant les redondances de noms. J'espère que la seconde énumération
comblera les trous. Le problème est que je ne peux pas tester : chez
moi, toutes les imprimantes apparaissent correctement, même les virtuelles.

Merci quand même
Avatar
antedon
Bertrand Lenoir-Welter a écrit :
Bonsoir Christian

Le problème, c'est que ça doit marcher aussi sous Win95/98/ME. Or,
l'aide dit que PRINTER_ENUM_CONNECTIONS est "NT only".

Mais bon, je suis en train de jongler avec une double énumération avec
PRINTER_INFO_5 suivi, si l'OS est de type NT, de PRINTER_INFO_4 en
traquant les redondances de noms. J'espère que la seconde énumération
comblera les trous. Le problème est que je ne peux pas tester : chez
moi, toutes les imprimantes apparaissent correctement, même les virtuelles.

Merci quand même



Pour être compatible avec 98, je fais 2 énumérations :
une avec EnumPrinters(PRINTER_ENUM_LOCAL,....
une avec GetProfileSection("devices", .... qui récupère les imprimantes
réseau puisque PRINTER_ENUM_REMOTE et autres ne marchent qu'à partir de NT.
puis merge des 2 listes.
(Pour mes besoins, je me contente de PRINTER_INFO_2)

Antedon