LISTE DES IMPRIMANTES

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 26 mai 2004 à 16:08
ghost260984 Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 14 décembre 2004 - 28 mai 2004 à 09:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23171-liste-des-imprimantes

ghost260984 Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 14 décembre 2004
28 mai 2004 à 09:04
je corrigerai ca si j ai 5 min a perdre

par contre pour ce qui est de la DLL, grace aux directives de compilation je peut mettre a la fois du code unix et du code windows et lors de la compilation il choisira tou seul les morceaux de code a compiler donc je garde la portabilite mais il faut recompiler cette DLL pour chaques systeme, mais ca a l avantage de faire l' IHM une seul fois et elle sera facilement modifiable
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
27 mai 2004 à 22:09
et puis à moins que je me trompe, tu fais la DLL avec l'API windows non protable donc même avec le java tu perd la protabilité .
Reprend moi si je dis une bétise
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 mai 2004 à 20:18
TU VOUDRAIS BIEN SOIGNER CELA ?

resultat = new char[1]; // 1 SEUL OCTET !!!

fro(...) {
strcat(resultat, essai[i].pPrinterName);
strcat(resultat, ";");
}

AUCUN strcat sur une place de 1 octet, NON !!!
Je te l'avais deja dit dans le forum.
ghost260984 Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 14 décembre 2004
27 mai 2004 à 19:01
en fait ce que j ai mis en source est un morceau d un programme plus vaste qui doit etre portable sous windows , linux , unix et solaris , le tout en faisant des interfaces graphiques facilement donc on a une couche supérieure qui est en java mais qui ne fait que recuperer les resultats renvoyes par des fonctions dans une dll ( il ya des directive de compilation ce qui permet de compiler sous les autres os sans probleme ( et ca ne donnera pas des dll sous les autres os))ceci afin d'optenir de meilleur performance et aussi de combler un manque dans java qui est que l on ne peut pas sommuniquer avec le systeme d exploitation car l ensemble de mon programme produit un rapport complet sur l etat d'une machine mais aussi de toute une plateforme d une dizaine d ordinateur , ceci dit de but de ce source etait d expliquer comment on faisait pour recuperer les infos des imprimantes en C car on ne le trouve nul par ailleur et j ai estimer que ce serait bon de le poster ici juste a titre d info .
Maintenat si t est pas capable de prendre cette fonction et de l integrer a un programme c est ton probleme pas le mien

Je repete ici que ce code est juste a titre informatif et explique juste comment on recupere une imprimante!
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
27 mai 2004 à 17:38
pourquoi mettre du jave qui appele du c++ :
-on est sur CPPfrance et par sur JAVAfrance
-on a pas tous envie de télécherger le JDK qui plusieur s dizaine de
Mo
-t'es pas capable de faire l'équivalent en C++ qui serai surement plus intéressant
En plus pas besion de faire une DLL, un fichier console suffit très
largement
ghost260984 Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 14 décembre 2004
26 mai 2004 à 19:03
look le zip mais c est du java qui appel le c++
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
26 mai 2004 à 18:22
tu devrais mettre un programme d'exemple avec ton code !!!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 mai 2004 à 17:27
Je viens de faire cela, va impec.
HANDLE d'une listbox en param de la fonction.

void __stdcall InsertPrintersLB(HWND hlst)
{
DWORD len = 0, count;
PRINTER_INFO_5 *pdata;
EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_NETWORK | PRINTER_ENUM_CONNECTIONS,
0, 5, 0, 0, &len, &count);
if(!len) return;
pdata = (PRINTER_INFO_5*) HeapAlloc(GetProcessHeap(), 0, len);
if(!pdata) return;
if(!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_NETWORK | PRINTER_ENUM_CONNECTIONS,
0, 5, (BYTE*) pdata, len, &len, &count)) goto relMem;
while(count--) {
SendMessage(hlst, LB_ADDSTRING, 0, (LONG) pdata[count].pPrinterName);
}
relMem: HeapFree(GetProcessHeap(), 0, pdata);
}
ghost260984 Messages postés 20 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 14 décembre 2004
26 mai 2004 à 16:23
en fait c est vrai que le premier ne sert plus a rien , mais ce code a subit telement de changement qu il ya surement des oubli de ce genre mais rine de bien mechant , ca n empeche pas le fonctionnement ;-)

je vais ajouter un pti zip dans un pti moment
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 mai 2004 à 16:08
essai = new PRINTER_INFO_4[numprinters];
suivi de:
essai=(PRINTER_INFO_4*)buffer;
Faudrait savoir, c'est l'un ou l'autre, a qoui sert le 1er '=' ????
Tu liberes quand la memoire ???

Mets nous donc un zip avec un prog exemple qui se sert de cela, je serais curieux de voir le resultat.
Rejoignez-nous