Supprimer un printed job et effacer le buffer de l'imprimante [Résolu]

cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 24 févr. 2011 à 10:09 - Dernière réponse : NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention
- 25 févr. 2011 à 17:00
bonjour je suis en train de développer une application avec c# et j'ai une partie que je n'arrive pas à la résoudre il s'agit de supprimer le printed job de l'imprimante et de vider son buffer.
Je voulais bien si vous pourriez me fournir les étapes par lesquelles je dois passer pour arriver à mon objectif car je suis dans la phase de conception.
Merci.

eyya
Afficher la suite 

Votre réponse

13 réponses

NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 00:53
+3
Utile
Vider la file d'impression tu veux dire ?
Soit tu redémarres le service spooler (Avec Process.Start et cmd.exe).
net stop spooler
net start spooler
Sinon tu peux essayer de supprimer le contenu de \Windows\System32\spool\PRINTERS\

Bonne chance !

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NightlyDev
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 11:21
0
Utile
eyya
NN je veux un code qui sert à supprimer la file d'attente de l'imprimante avec c#.
J'ai essayer de le faire mais ça ne fonctionne pas.
Voici le code que j'ai essayé de l'implémenter




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;



namespace ManagementObjectSearcher
{
public class ViderBuffer
{

public static void PurgePrintJobs(string printerName)
{
string searchQuery = "SELECT * FROM Win32_PrintJob";//sélectionner les printed jobs
ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(searchQuery); //chercher les printed jobs

ManagementObjectCollection Jobs = searchPrintJobs.Get(); //recupérer les printed jobs
DeleteOptions opts = new DeleteOptions(); //instanciation d'un objet de la classe DeleteOptions
opts.Timeout = new TimeSpan(0, 1, 0);
foreach (ManagementObject job in Jobs)
{
string jobName = job.Properties["Name"].Value.ToString(); //nom du printedjob
string[] split = jobName.Split(new char[] { ',' });
if (1 < split.Length)
{
string strPrinter = split[0];
if (string.Compare(strPrinter, printerName, true) == 0)
{ //comparer le nom de l'imprimante avec l'imprimante qu'on veut supprimer ces printed jobs
job.Delete(opts); //purger le printed job
}

}
}




}
}
}


Merci de votre aide
Commenter la réponse de cs_eyya
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 11:48
0
Utile
J'ai essayer de le faire mais ça ne fonctionne pas.


Quelques précisions ? Une erreur ?

Commenter la réponse de NightlyDev
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 11:52
0
Utile
Si ton namespace porte le nom d'une classe c'est normal que ca plante ;) ! Renomme ton projet, change le namespace et réessaye !

Commenter la réponse de NightlyDev
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 11:53
0
Utile
ayyou
Si je développe avec Microsoft Visual Studio 2010 ....il n'a pas accepté "ManagementObjectSearcher" et " ManagementObjectCollection" et "DeleteOptions"
et il affiche des messages d'erreurs sur le console
Commenter la réponse de cs_eyya
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 11:55
0
Utile
et il affiche des messages d'erreurs sur le console


Toujours aussi vague ! Quels messages d'erreurs ? As tu lu mon précèdent message ? (sur le namespace)

Commenter la réponse de NightlyDev
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 11:57
0
Utile
eyya

Comment faire svp car je suis une débutante en c# et j'ai pas bien compris la notion de namespace
Commenter la réponse de cs_eyya
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 12:02
0
Utile
Ton projet se nomme "ManagementObjectSearcher" or, c'est egalement le nom de la class "ManagementObjectSearcher" donc en gros, visual studio, crois que tu veux appeler ton projet et pas la class ManagementObjectSearcher.
Essaye de renommer ton namespace, remplace :


namespace ManagementObjectSearcher

par

namespace ObjSearcher

Tu devrais avoir l'erreur qui change ! (Ou meme plus d'erreurs du tout.)

Si il y a encore des erreurs, va dans : Projets > Ajouter une référence > Dans l'onglet .Net, tu cherches System.Management et tu fais OK.

Si ca marche, parfais, sinon, quels sont les erreurs ?

Commenter la réponse de NightlyDev
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 12:07
0
Utile
eyya
Merci bien pour le moment le console n'affiche pas d'erreurs, je vais tester mon code avec une méthode main et je vais voir..
Commenter la réponse de cs_eyya
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 12:36
0
Utile
eyya
Slt , je veut votre aide encore je n'arrive pas à implémenter la méthode de test (main) comment faire svp.
Merci
Commenter la réponse de cs_eyya
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 12:47
0
Utile
Bon,

Creer un nouveau projet, Console ou Windows Form.
Dans program.cs ou Form1.cs, tu as la fonction main
:

static void Main(string[] args)
{
}


Apres la fonction main, colle ta class :

static void Main(string[] args)
{

}

public static void PurgePrintJobs(string printerName)
{
string searchQuery = "SELECT * FROM Win32_PrintJob";//sélectionner les printed jobs
ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(searchQuery); //chercher les printed jobs

ManagementObjectCollection Jobs = searchPrintJobs.Get(); //recupérer les printed jobs
DeleteOptions opts = new DeleteOptions(); //instanciation d'un objet de la classe DeleteOptions
opts.Timeout = new TimeSpan(0, 1, 0);
foreach (ManagementObject job in Jobs)
{
string jobName = job.Properties["Name"].Value.ToString(); //nom du printedjob
string[] split = jobName.Split(new char[] { ',' });
if (1 < split.Length)
{
string strPrinter = split[0];
if (string.Compare(strPrinter, printerName, true) == 0)
{ //comparer le nom de l'imprimante avec l'imprimante qu'on veut supprimer ces printed jobs
job.Delete(opts); //purger le printed job
} 


Puis a partir de main, appelle la fonction PurgePrintJobs

static void Main(string[] args)
{
    PurgePrintJobs("tonimprimante");
}


N'oublie pas d'importer System.Management dans les références et using.



Commenter la réponse de NightlyDev
cs_eyya 11 Messages postés dimanche 9 janvier 2011Date d'inscription 31 mars 2011 Dernière intervention - 25 févr. 2011 à 14:23
0
Utile
eyyya

Merci beaucoup, mais il existe encore des bugs j'ai implémenté la méthode main :
Et voici le code :
public class Test
{
public static void main(String[] arg)
{
new PurgerImprimante();
PurgePrintJobs("HP LaserJet P4015 PCL6");



}
}


Désolé pour le dérangement et Merci
Commenter la réponse de cs_eyya
NightlyDev 26 Messages postés jeudi 24 février 2011Date d'inscription 6 mars 2011 Dernière intervention - 25 févr. 2011 à 17:00
0
Utile
Ça ne me derange pas, ne t'inquiète pas.
Quels sont les erreurs ?
Peux tu envoyer le code complet ? Avec tous les fichiers.
Sinon comment procède tu pour créer une solution avec Visual Studio ?

Commenter la réponse de NightlyDev

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.