Enumération des imprimantes

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #9747291
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 )
Bertrand Lenoir-Welter
Le #9747281
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
antedon
Le #9747251
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
Publicité
Poster une réponse
Anonyme