PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV (versiones precedentes) → Re: [Wd5.5b] récupérer le nom de l'imprimante par défaut
Re: [Wd5.5b] récupérer le nom de l'imprimante par défaut
Iniciado por Robert.bramoulle, 11,dic. 2003 09:36 - 3 respuestas
Publicado el 11,diciembre 2003 - 09:36
Pour vous éviter de perdre du temps (si j'ai bien compris votre demande...)
Le guide Windev donne l'exemple suivant qui marche très bien sous toutes
versions Windos
Ch est une chaine
Ch=INILit("windows","device")
// La chaîne retournée est sous la forme <nom_imp>,<nom_driver>,<port>
// par exemple: HP LaserJet 4L,HPPCL5E,LPT1:
Info("L'imprimante par défaut est "+...
ExtraitChaine(Ch,1,",")+" sur "+ExtraitChaine(Ch,3,",") )

Cordialement
Robert

"etienne" <gendron.etienne@wanadoo.fr> wrote:

Bonjour,

Nous avions récupéré le code pour avoir la liste des imprimantes installées,
mais la partie permettant de connaître l'imprimante par défaut ne fonctionne
pas :
si etbinaire(p2.Attributes,4) alors
Il ne passe jamais ce test alors qu'une imprimante est bien définie par
défaut. Le système d'exploitation utilisée est Windows 2000.

A part la fonctionnalité : extraitchaine(INILit("windows","device"),1,","),
vous connaîtriez un moyenne de récupérer l'imprimante par défaut messieurs

?

===================================
p2 est compose de
pServerName est un entier long // 1
pPrinterName est un entier long // 2
pShareName est un entier long // 3
pPortName est un entier long // 4
pDriverName est un entier long // 5
pCommen est un entier long // 6
pLocation est un entier long // 7
pDevMode est un entier long // 8
pSepFile est un entier long // 9
pPrintProcessor est un entier long // 10
pDatatype est un entier long // 11
pParameters est un entier long // 12
pSecurityDescriptor est un entier long // 13
Attributes est un entier long // 14
Priority est un entier long // 15
DefaultPriority est un entier long // 16
StartTime est un entier long // 17
UntilTime est un entier long // 18
Stat est un entier long // 19
cJobs est un entier long // 20
AveragePPM est un entier long // 21
fin

ind est un entier
NomImp est une chaine asciiz de 128
port est une chaine asciiz de 128
ch est une chaine

ListeSupprimeTout(NomCombo)

// Fonction apparente a EnumPrintersA
// ==================================
//BOOL EnumPrinters(
// DWORD Flags, // printer object types
// LPTSTR Name, // name of printer object
// DWORD Level, // information level
// LPBYTE pPrinterEnum, // printer information buffer
// DWORD cbBuf, // size of printer information buffer
// LPDWORD pcbNeeded, // bytes received or required
// LPDWORD pcReturned // number of printers enumerated
//);

appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,null,cbbuf,&pbNeeded,&p
cReturned)

si pbNeeded = 0 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 76(pbNeeded=0) Nombre
d'imprimantes trouvée="+pcReturned)
renvoyer faux
FIN

hmem est un entier long = appeldll32("kernel32","GlobalAlloc",0x40,pbNeeded)
cbbuf = pbNeeded
si
appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,hmem,cbbuf,&pbNeeded,&p
cReturned) alors
adr est un entier long = hmem
si adr = 0 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 85(adr=0)")
renvoyer faux
FIN
si pcReturned < 1 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 89(pcReturned<1)")
renvoyer faux
FIN

pour ind = 1 a pcReturned

// RtlZeroMemory : initialisation à vide
// RtlMoveMemory : alimente une variable avec une autre valeur

appeldll32("kernel32","RtlMoveMemory",&p2,adr,84)

si p2 = null alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 101(p2=NULL)")
renvoyer faux
FIN
appeldll32("kernel32","RtlZeroMemory",&NomImp,128)
appeldll32("kernel32","RtlMoveMemory",&NomImp,p2.pPrinterName ,128)

si NomImp = "" alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 108(NomImp="")")
renvoyer faux
FIN

appeldll32("kernel32","RtlZeroMemory",&port,128)
appeldll32("kernel32","RtlMoveMemory",&port,p2.pPortName ,128)

si port = "" alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 116(port="")")
renvoyer faux
FIN
si taille(sansespace(NomImp))>0 alors
listeAjoute(NomCombo,NomImp)
si etbinaire(p2.Attributes,4) alors
// ListeSelectPlus(NomCombo,ListeCherche(NomCombo,NomImp))
_nomImp = NomImp
ch="Défaut"
sinon
ch=""
fin
// listeajoute("Imprimante",port+"\"+nomimp+"\"+ch)
fin
adr+„
fin
fin
appeldll32("kernel32","GlobalFree",hmem)
Si Tous alors
ListeInsere(NomCombo,MessTraduit(5058),1)
FIN

// Sélection de l'imprimante par défaut
//_indice =
ListeCherche(NomCombo,extraitchaine(INILit("windows","device"),1,","),faux)
_indice = ListeCherche(NomCombo,_nomImp,faux)
si _indice = -1 alors
_indice = 1
FIN

ListeSelectPlus(NomCombo,_indice)
===================================

Merci de votre aide.

Publicado el 11,diciembre 2003 - 10:39
Merci de votre réponse, mais j'avais précisé que je voulais éviter cette
fonctionnalité car cela fonctionne bien sur une machine en locale mais nous
fonctionnons avec des clients légers et cette information là n'est alors
plus disponible.

Je me demandais donc si une personne connaissait un autre moyen tel que
passer par une API (ce que je n'ai pas encore trouvé).

Passer à WinDev 7 ou plus ? notre projet ne supporte pas le changement et
cela prendrait trop de temps pour le réactualiser. Nous devons donc
continuer à développer ce produit sous WinDev 5.5.

Merci d'avance de votre aide.

"Robert" <Robert.bramoulle@wanadoo.fr> a écrit dans le message de
news:3fd828bc@news....


Pour vous éviter de perdre du temps (si j'ai bien compris votre

demande...)
Le guide Windev donne l'exemple suivant qui marche très bien sous toutes
versions Windos
Ch est une chaine
Ch=INILit("windows","device")
// La chaîne retournée est sous la forme <nom_imp>,<nom_driver>,<port>
// par exemple: HP LaserJet 4L,HPPCL5E,LPT1:
Info("L'imprimante par défaut est "+...
ExtraitChaine(Ch,1,",")+" sur "+ExtraitChaine(Ch,3,",") )

Cordialement
Robert

"etienne" <gendron.etienne@wanadoo.fr> wrote:

Bonjour,

Nous avions récupéré le code pour avoir la liste des imprimantes

installées,
> >mais la partie permettant de connaître l'imprimante par défaut ne
fonctionne
pas :
si etbinaire(p2.Attributes,4) alors
Il ne passe jamais ce test alors qu'une imprimante est bien définie par
défaut. Le système d'exploitation utilisée est Windows 2000.

A part la fonctionnalité :

extraitchaine(INILit("windows","device"),1,","),
> >vous connaîtriez un moyenne de récupérer l'imprimante par défaut
messieurs
?

===================================
p2 est compose de
pServerName est un entier long // 1
pPrinterName est un entier long // 2
pShareName est un entier long // 3
pPortName est un entier long // 4
pDriverName est un entier long // 5
pCommen est un entier long // 6
pLocation est un entier long // 7
pDevMode est un entier long // 8
pSepFile est un entier long // 9
pPrintProcessor est un entier long // 10
pDatatype est un entier long // 11
pParameters est un entier long // 12
pSecurityDescriptor est un entier long // 13
Attributes est un entier long // 14
Priority est un entier long // 15
DefaultPriority est un entier long // 16
StartTime est un entier long // 17
UntilTime est un entier long // 18
Stat est un entier long // 19
cJobs est un entier long // 20
AveragePPM est un entier long // 21
fin

ind est un entier
NomImp est une chaine asciiz de 128
port est une chaine asciiz de 128
ch est une chaine

ListeSupprimeTout(NomCombo)

// Fonction apparente a EnumPrintersA
// ==================================
//BOOL EnumPrinters(
// DWORD Flags, // printer object types
// LPTSTR Name, // name of printer object
// DWORD Level, // information level
// LPBYTE pPrinterEnum, // printer information buffer
// DWORD cbBuf, // size of printer information buffer
// LPDWORD pcbNeeded, // bytes received or required
// LPDWORD pcReturned // number of printers enumerated
//);


appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,null,cbbuf,&pbNeeded,&

p
cReturned)

si pbNeeded = 0 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 76(pbNeeded=0) Nombre
d'imprimantes trouvée="+pcReturned)
renvoyer faux
FIN

hmem est un entier long =

appeldll32("kernel32","GlobalAlloc",0x40,pbNeeded)
cbbuf = pbNeeded
si

appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,hmem,cbbuf,&pbNeeded,&

p
cReturned) alors
adr est un entier long = hmem
si adr = 0 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 85(adr=0)")
renvoyer faux
FIN
si pcReturned < 1 alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 89(pcReturned<1)")
renvoyer faux
FIN

pour ind = 1 a pcReturned

// RtlZeroMemory : initialisation à vide
// RtlMoveMemory : alimente une variable avec une autre valeur

appeldll32("kernel32","RtlMoveMemory",&p2,adr,84)

si p2 = null alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 101(p2=NULL)")
renvoyer faux
FIN
appeldll32("kernel32","RtlZeroMemory",&NomImp,128)
appeldll32("kernel32","RtlMoveMemory",&NomImp,p2.pPrinterName ,128)

si NomImp = "" alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 108(NomImp="")")
renvoyer faux
FIN

appeldll32("kernel32","RtlZeroMemory",&port,128)
appeldll32("kernel32","RtlMoveMemory",&port,p2.pPortName ,128)

si port = "" alors
erreur("Erreur au chargement de la liste des
imprimantes"+rc+"Proc::ListeImprimantes, Ligne 116(port="")")
renvoyer faux
FIN
si taille(sansespace(NomImp))>0 alors
listeAjoute(NomCombo,NomImp)
si etbinaire(p2.Attributes,4) alors
// ListeSelectPlus(NomCombo,ListeCherche(NomCombo,NomImp))
_nomImp = NomImp
ch="Défaut"
sinon
ch=""
fin
// listeajoute("Imprimante",port+"\"+nomimp+"\"+ch)
fin
adr+„
fin
fin
appeldll32("kernel32","GlobalFree",hmem)
Si Tous alors
ListeInsere(NomCombo,MessTraduit(5058),1)
FIN

// Sélection de l'imprimante par défaut
//_indice =

ListeCherche(NomCombo,extraitchaine(INILit("windows","device"),1,","),faux)
_indice = ListeCherche(NomCombo,_nomImp,faux)
si _indice = -1 alors
_indice = 1
FIN

ListeSelectPlus(NomCombo,_indice)
===================================

Merci de votre aide.


Publicado el 17,diciembre 2003 - 11:47
lpBuffer est une chaine asciiz sur 400
cDefaultPrinter est une chaine
AppelDLL32("kernel32","GetProfileStringA","windows","device", "",
&lpBuffer, 300)
// La chaîne retournée est sous la forme <nom_imp>,<nom_driver>,<port>
// par exemple: HP LaserJet 4L,HPPCL5E,LPT1:

cDefaultPrinter=ExtraitChaine(lpBuffer,1,",")+" sur
"+ExtraitChaine(lpBuffer,3,",")


"etienne" <gendron.etienne@wanadoo.fr> a écrit dans le message de
news:3fd8376c@news....
>
> Merci de votre réponse, mais j'avais précisé que je voulais éviter cette
> fonctionnalité car cela fonctionne bien sur une machine en locale mais
nous
> fonctionnons avec des clients légers et cette information là n'est alors
> plus disponible.
>
> Je me demandais donc si une personne connaissait un autre moyen tel que
> passer par une API (ce que je n'ai pas encore trouvé).
>
> Passer à WinDev 7 ou plus ? notre projet ne supporte pas le changement
et
> cela prendrait trop de temps pour le réactualiser. Nous devons donc
> continuer à développer ce produit sous WinDev 5.5.
>
> Merci d'avance de votre aide.
>
> "Robert" <Robert.bramoulle@wanadoo.fr> a écrit dans le message de
> news:3fd828bc@news....
> >
> >
> > Pour vous éviter de perdre du temps (si j'ai bien compris votre
> demande...)
> > Le guide Windev donne l'exemple suivant qui marche très bien sous
toutes
> > versions Windos
> > Ch est une chaine
> > Ch=INILit("windows","device")
> > // La chaîne retournée est sous la forme <nom_imp>,<nom_driver>,<port>
> > // par exemple: HP LaserJet 4L,HPPCL5E,LPT1:
> > Info("L'imprimante par défaut est "+...
> > ExtraitChaine(Ch,1,",")+" sur "+ExtraitChaine(Ch,3,",") )
> >
> > Cordialement
> > Robert
> >
> > "etienne" <gendron.etienne@wanadoo.fr> wrote:
> > >
> > >Bonjour,
> > >
> > >Nous avions récupéré le code pour avoir la liste des imprimantes
> installées,
> > >mais la partie permettant de connaître l'imprimante par défaut ne
> fonctionne
> > >pas :
> > > si etbinaire(p2.Attributes,4) alors
> > >Il ne passe jamais ce test alors qu'une imprimante est bien définie
par
> > >défaut. Le système d'exploitation utilisée est Windows 2000.
> > >
> > >A part la fonctionnalité :
> extraitchaine(INILit("windows","device"),1,","),
> > >vous connaîtriez un moyenne de récupérer l'imprimante par défaut
> messieurs
> > ?
> > >
> > >===================================
> > >p2 est compose de
> > > pServerName est un entier long // 1
> > > pPrinterName est un entier long // 2
> > > pShareName est un entier long // 3
> > > pPortName est un entier long // 4
> > > pDriverName est un entier long // 5
> > > pCommen est un entier long // 6
> > > pLocation est un entier long // 7
> > > pDevMode est un entier long // 8
> > > pSepFile est un entier long // 9
> > > pPrintProcessor est un entier long // 10
> > > pDatatype est un entier long // 11
> > > pParameters est un entier long // 12
> > > pSecurityDescriptor est un entier long // 13
> > > Attributes est un entier long // 14
> > > Priority est un entier long // 15
> > > DefaultPriority est un entier long // 16
> > > StartTime est un entier long // 17
> > > UntilTime est un entier long // 18
> > > Stat est un entier long // 19
> > > cJobs est un entier long // 20
> > > AveragePPM est un entier long // 21
> > >fin
> > >
> > >ind est un entier
> > >NomImp est une chaine asciiz de 128
> > >port est une chaine asciiz de 128
> > >ch est une chaine
> > >
> > >ListeSupprimeTout(NomCombo)
> > >
> > >// Fonction apparente a EnumPrintersA
> > >// ==================================
> > >//BOOL EnumPrinters(
> > >// DWORD Flags, // printer object types
> > >// LPTSTR Name, // name of printer object
> > >// DWORD Level, // information level
> > >// LPBYTE pPrinterEnum, // printer information buffer
> > >// DWORD cbBuf, // size of printer information buffer
> > >// LPDWORD pcbNeeded, // bytes received or required
> > >// LPDWORD pcReturned // number of printers enumerated
> > >//);
> > >
> >
>
>appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,null,cbbuf,&pbNeeded,&
> p
> > >cReturned)
> > >
> > >si pbNeeded = 0 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 76(pbNeeded=0) Nombre
> > >d'imprimantes trouvée="+pcReturned)
> > > renvoyer faux
> > >FIN
> > >
> > >hmem est un entier long =
> appeldll32("kernel32","GlobalAlloc",0x40,pbNeeded)
> > >cbbuf = pbNeeded
> > >si
> >
>
appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,hmem,cbbuf,&pbNeeded,&

> p
> > >cReturned) alors
> > > adr est un entier long = hmem
> > > si adr = 0 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 85(adr=0)")
> > > renvoyer faux
> > > FIN
> > > si pcReturned < 1 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 89(pcReturned<1)")
> > > renvoyer faux
> > > FIN
> > >
> > > pour ind = 1 a pcReturned
> > >
> > >// RtlZeroMemory : initialisation à vide
> > >// RtlMoveMemory : alimente une variable avec une autre valeur
> > >
> > > appeldll32("kernel32","RtlMoveMemory",&p2,adr,84)
> > >
> > > si p2 = null alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 101(p2=NULL)")
> > > renvoyer faux
> > > FIN
> > > appeldll32("kernel32","RtlZeroMemory",&NomImp,128)
> > > appeldll32("kernel32","RtlMoveMemory",&NomImp,p2.pPrinterName ,128)
> > >
> > > si NomImp = "" alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 108(NomImp="")")
> > > renvoyer faux
> > > FIN
> > >
> > > appeldll32("kernel32","RtlZeroMemory",&port,128)
> > > appeldll32("kernel32","RtlMoveMemory",&port,p2.pPortName ,128)
> > >
> > > si port = "" alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 116(port="")")
> > > renvoyer faux
> > > FIN
> > > si taille(sansespace(NomImp))>0 alors
> > > listeAjoute(NomCombo,NomImp)
> > > si etbinaire(p2.Attributes,4) alors
> > >// ListeSelectPlus(NomCombo,ListeCherche(NomCombo,NomImp))
> > > _nomImp = NomImp
> > > ch="Défaut"
> > > sinon
> > > ch=""
> > > fin
> > >// listeajoute("Imprimante",port+"\"+nomimp+"\"+ch)
> > > fin
> > > adr+„
> > > fin
> > >fin
> > >appeldll32("kernel32","GlobalFree",hmem)
> > >Si Tous alors
> > > ListeInsere(NomCombo,MessTraduit(5058),1)
> > >FIN
> > >
> > >// Sélection de l'imprimante par défaut
> > >//_indice =
> >
>
>ListeCherche(NomCombo,extraitchaine(INILit("windows","device"),1,","),faux)
> > >_indice = ListeCherche(NomCombo,_nomImp,faux)
> > >si _indice = -1 alors
> > > _indice = 1
> > >FIN
> > >
> > >ListeSelectPlus(NomCombo,_indice)
> > >===================================
> > >
> > >Merci de votre aide.
> > >
> > >
> >
>
>
Publicado el 18,diciembre 2003 - 13:22
Parfait ! merci bcp, cela marche bien :)

"ehf" <ehfrikach@orpea.net> a écrit dans le message de
news:3fe02446@news....

lpBuffer est une chaine asciiz sur 400
cDefaultPrinter est une chaine
AppelDLL32("kernel32","GetProfileStringA","windows","device", "",
&lpBuffer, 300)
// La chaîne retournée est sous la forme <nom_imp>,<nom_driver>,<port>
// par exemple: HP LaserJet 4L,HPPCL5E,LPT1:

cDefaultPrinter=ExtraitChaine(lpBuffer,1,",")+" sur
"+ExtraitChaine(lpBuffer,3,",")


"etienne" <gendron.etienne@wanadoo.fr> a écrit dans le message de
news:3fd8376c@news....
>
> Merci de votre réponse, mais j'avais précisé que je voulais éviter

cette
> fonctionnalité car cela fonctionne bien sur une machine en locale mais
nous
> fonctionnons avec des clients légers et cette information là n'est

alors
> plus disponible.
>
> Je me demandais donc si une personne connaissait un autre moyen tel

que
> passer par une API (ce que je n'ai pas encore trouvé).
>
> Passer à WinDev 7 ou plus ? notre projet ne supporte pas le changement
et
> cela prendrait trop de temps pour le réactualiser. Nous devons donc
> continuer à développer ce produit sous WinDev 5.5.
>
> Merci d'avance de votre aide.
>
> "Robert" <Robert.bramoulle@wanadoo.fr> a écrit dans le message de
> news:3fd828bc@news....
> >
> >
> > Pour vous éviter de perdre du temps (si j'ai bien compris votre
> demande...)
> > Le guide Windev donne l'exemple suivant qui marche très bien sous
toutes
> > versions Windos
> > Ch est une chaine
> > Ch=INILit("windows","device")
> > // La chaîne retournée est sous la forme

<nom_imp>,<nom_driver>,<port>
> > // par exemple: HP LaserJet 4L,HPPCL5E,LPT1:
> > Info("L'imprimante par défaut est "+...
> > ExtraitChaine(Ch,1,",")+" sur "+ExtraitChaine(Ch,3,",") )
> >
> > Cordialement
> > Robert
> >
> > "etienne" <gendron.etienne@wanadoo.fr> wrote:
> > >
> > >Bonjour,
> > >
> > >Nous avions récupéré le code pour avoir la liste des imprimantes
> installées,
> > >mais la partie permettant de connaître l'imprimante par défaut ne
> fonctionne
> > >pas :
> > > si etbinaire(p2.Attributes,4) alors
> > >Il ne passe jamais ce test alors qu'une imprimante est bien définie
par
> > >défaut. Le système d'exploitation utilisée est Windows 2000.
> > >
> > >A part la fonctionnalité :
> extraitchaine(INILit("windows","device"),1,","),
> > >vous connaîtriez un moyenne de récupérer l'imprimante par défaut
> messieurs
> > ?
> > >
> > >===================================
> > >p2 est compose de
> > > pServerName est un entier long // 1
> > > pPrinterName est un entier long // 2
> > > pShareName est un entier long // 3
> > > pPortName est un entier long // 4
> > > pDriverName est un entier long // 5
> > > pCommen est un entier long // 6
> > > pLocation est un entier long // 7
> > > pDevMode est un entier long // 8
> > > pSepFile est un entier long // 9
> > > pPrintProcessor est un entier long // 10
> > > pDatatype est un entier long // 11
> > > pParameters est un entier long // 12
> > > pSecurityDescriptor est un entier long // 13
> > > Attributes est un entier long // 14
> > > Priority est un entier long // 15
> > > DefaultPriority est un entier long // 16
> > > StartTime est un entier long // 17
> > > UntilTime est un entier long // 18
> > > Stat est un entier long // 19
> > > cJobs est un entier long // 20
> > > AveragePPM est un entier long // 21
> > >fin
> > >
> > >ind est un entier
> > >NomImp est une chaine asciiz de 128
> > >port est une chaine asciiz de 128
> > >ch est une chaine
> > >
> > >ListeSupprimeTout(NomCombo)
> > >
> > >// Fonction apparente a EnumPrintersA
> > >// ==================================
> > >//BOOL EnumPrinters(
> > >// DWORD Flags, // printer object types
> > >// LPTSTR Name, // name of printer object
> > >// DWORD Level, // information level
> > >// LPBYTE pPrinterEnum, // printer information buffer
> > >// DWORD cbBuf, // size of printer information buffer
> > >// LPDWORD pcbNeeded, // bytes received or required
> > >// LPDWORD pcReturned // number of printers enumerated
> > >//);
> > >
> >
>

appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,null,cbbuf,&pbNeeded,&
> p
> > >cReturned)
> > >
> > >si pbNeeded = 0 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 76(pbNeeded=0)

Nombre
> > >d'imprimantes trouvée="+pcReturned)
> > > renvoyer faux
> > >FIN
> > >
> > >hmem est un entier long =
> appeldll32("kernel32","GlobalAlloc",0x40,pbNeeded)
> > >cbbuf = pbNeeded
> > >si
> >
>

appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,hmem,cbbuf,&pbNeeded,&
> p
> > >cReturned) alors
> > > adr est un entier long = hmem
> > > si adr = 0 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 85(adr=0)")
> > > renvoyer faux
> > > FIN
> > > si pcReturned < 1 alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 89(pcReturned<1)")
> > > renvoyer faux
> > > FIN
> > >
> > > pour ind = 1 a pcReturned
> > >
> > >// RtlZeroMemory : initialisation à vide
> > >// RtlMoveMemory : alimente une variable avec une autre valeur
> > >
> > > appeldll32("kernel32","RtlMoveMemory",&p2,adr,84)
> > >
> > > si p2 = null alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 101(p2=NULL)")
> > > renvoyer faux
> > > FIN
> > > appeldll32("kernel32","RtlZeroMemory",&NomImp,128)
> > > appeldll32("kernel32","RtlMoveMemory",&NomImp,p2.pPrinterName

,128)
> > >
> > > si NomImp = "" alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 108(NomImp="")")
> > > renvoyer faux
> > > FIN
> > >
> > > appeldll32("kernel32","RtlZeroMemory",&port,128)
> > > appeldll32("kernel32","RtlMoveMemory",&port,p2.pPortName ,128)
> > >
> > > si port = "" alors
> > > erreur("Erreur au chargement de la liste des
> > >imprimantes"+rc+"Proc::ListeImprimantes, Ligne 116(port="")")
> > > renvoyer faux
> > > FIN
> > > si taille(sansespace(NomImp))>0 alors
> > > listeAjoute(NomCombo,NomImp)
> > > si etbinaire(p2.Attributes,4) alors
> > >// ListeSelectPlus(NomCombo,ListeCherche(NomCombo,NomImp))
> > > _nomImp = NomImp
> > > ch="Défaut"
> > > sinon
> > > ch=""
> > > fin
> > >// listeajoute("Imprimante",port+"\"+nomimp+"\"+ch)
> > > fin
> > > adr+„
> > > fin
> > >fin
> > >appeldll32("kernel32","GlobalFree",hmem)
> > >Si Tous alors
> > > ListeInsere(NomCombo,MessTraduit(5058),1)
> > >FIN
> > >
> > >// Sélection de l'imprimante par défaut
> > >//_indice =
> >
>

ListeCherche(NomCombo,extraitchaine(INILit("windows","device"),1,","),faux)
> > >_indice = ListeCherche(NomCombo,_nomImp,faux)
> > >si _indice = -1 alors
> > > _indice = 1
> > >FIN
> > >
> > >ListeSelectPlus(NomCombo,_indice)
> > >===================================
> > >
> > >Merci de votre aide.
> > >
> > >
> >
>
>