IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Gestion d'imprimante sous vc++


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Gestion d'imprimante sous vc++
    Salut à tous :-)

    Bon j'essaie d'imprimer sous vc++ (en fait j'arrive à imprimer) avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BOOL r=OpenPrinter(name,&printer,NULL);
    	int ret=StartDocPrinter(printer,1,(LPBYTE)doc);
    	ret=StartPagePrinter(printer);
    	ret=WritePrinter(printer,&texte,sizeof(texte),&nb);
    	ret=EndPagePrinter(printer);
    	ret=EndDocPrinter(printer);
     
    	ClosePrinter(printer);
    le problème c'est qu'il n'y a pas de code d'erreur si la page n'est pas imprimée (style l'imprimante n'est pas connectée, où il y a des caractères qu'elle ne comprend pas...)

    J'ai essayé avec la méthode GetPrinter() avec une structure PRINTER_INFO_2 mais sa variable membre DWORD status est tout le temps à 0, avec toutes les imprimantes et qu'elles soient connectées ou non, qu'il n'y ait plus de papier ou pas de pb!

    Donc voilà j'aurais aimer savoir comment faire pour gérer les erreurs d'impression sans réécrire un driver.

    Merci ++

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,est ce que tu procedes comme suit ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    PRINTER_INFO_2 *GetInfosPrn(char *szprn)
    {
    	DWORD cbBuf=0;
    	DWORD cbNeeded=1000;
    	HANDLE  hPrinter;		
    	PRINTER_INFO_2 *pInfos=NULL;
     
    	// load printer driver	
    	if(OpenPrinter(szprn,&hPrinter,NULL))
    	{
     
    		GetPrinter(  
    			hPrinter,			// handle to printer of interest 
    			2,					// version of printer info data structure 
    			NULL,				// pointer to array of bytes that receives printer info. structure 
    			cbBuf,				// size, in bytes, of array of bytes 
    			&cbNeeded 			// pointer to variable with count of bytes retrieved (or required) 
    	  			  );
     
    		cbBuf=cbNeeded;
    		pInfos=(PRINTER_INFO_2 *)malloc(cbNeeded);
    		if(pInfos)
    		{
    			if(GetPrinter(hPrinter,2,(LPBYTE)pInfos,cbBuf,&cbNeeded))
    			{
    			}
    			else
    			{
    				free(pInfos);
    				ClosePrinter(hPrinter);
    				return(NULL);				
    			}
    		}
    		ClosePrinter(hPrinter);
    	}
    	return(pInfos);
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    oui oui, j'appelle bien 2 fois la fonction, et j'alloue la mémoire entre les 2 appels. voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	HANDLE printer;
    	PRINTER_DEFAULTS pdef;
    	pdef.DesiredAccess=PRINTER_ALL_ACCESS;
    	pdef.pDevMode=NULL;
    	pdef.pDatatype="RAW";
     
    	int ret=OpenPrinter(na,&printer,&pdef);
     
    	PRINTER_INFO_2 *pinfo;
     
    	GetPrinter(printer,2,NULL,NULL,&n);
    	pinfo=(PRINTER_INFO_2*)malloc(n);
    	ret=GetPrinter(printer,2,(LPBYTE)pinfo,n,&n);
     
                    free(pinfo)
    	ClosePrinter(printer);
    mouarf, je ne sais pas ce qui va po!
    J'ai tenté aussi avec les Bidi, mais je n'ai rien compris...
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_3fq9.asp

    Continuons la recherche...

    ++

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    on ne sait jamais
    tu consultes les données avant le free ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    lol, c'est vrai que ça aurait pu!
    mais ce n'est pas le cas, je les consulte en pas à pas.

    Certains champs tels que le port, le nom de l'imprimante et autres se remplissent bien, mais pas le statut or c'est celui qui m'intéresse.

    j'avais rajouté la structure PRINTER_DEFAULTS dans la méthode OpenPrinter() pour voir si les accès changeaient, mais ça ne changent rien.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    Apparemment tu devrais avoir plus de chance avec la fonction
    FindFirstPrinterChangeNotification
    Qui finit par utiliser la structure PRINTER_INFO_2 pour récupérer le status.
    j'ai pas essayer ....


  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    oki je vais essayer, mais la fonction n'a pas l'air toute simple, je commence à bien fatiguer, et c'est l'heure de la débauche.

    Donc j'essaie ça à la 1è heure demain.

    Bonne soirée ++

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    voir sur MSDN :http://support.microsoft.com/kb/q196805/

Discussions similaires

  1. gestion de fichier sous windows en posix
    Par fan² dans le forum Réseau
    Réponses: 11
    Dernier message: 07/12/2005, 18h40
  2. Réponses: 1
    Dernier message: 15/08/2005, 19h23
  3. gestion de semaphore sous builder
    Par buzzz dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/02/2005, 12h43
  4. Gestion des .log sous Oracle
    Par SANOORA dans le forum Administration
    Réponses: 10
    Dernier message: 08/11/2004, 09h29
  5. Routines de gestion des ports sous Windows XP
    Par wiccanhelios dans le forum Windows
    Réponses: 2
    Dernier message: 14/11/2003, 08h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo