Supprimer un printed job et effacer le buffer de l'imprimante

Résolu
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011 - 24 févr. 2011 à 10:09
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011 - 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

13 réponses

NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 00:53
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 !

3
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 11:21
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
0
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 11:48
J'ai essayer de le faire mais ça ne fonctionne pas.


Quelques précisions ? Une erreur ?

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 11:53
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
0
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 11:55
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)

0
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 11:57
eyya

Comment faire svp car je suis une débutante en c# et j'ai pas bien compris la notion de namespace
0
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 12:02
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 ?

0
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 12:07
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..
0
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 12:36
eyya
Slt , je veut votre aide encore je n'arrive pas à implémenter la méthode de test (main) comment faire svp.
Merci
0
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 12:47
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.



0
cs_eyya Messages postés 11 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 31 mars 2011
25 févr. 2011 à 14:23
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
0
NightlyDev Messages postés 26 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 6 mars 2011
25 févr. 2011 à 17:00
Ç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 ?

0
Rejoignez-nous