Bonsoir,
je souhaite afficher à l'utilisateur un message d'erreur si il n'y a plus de papier dans l'imprimante ou plus de toner, ou un capot est ouvert etc.... pour ce faire j'ai fait ceci :
une fonction qui retourne l'état de l'imprimante :
ensuite j'ai mis un timer dans ma form qui lit toutes les secondes la valeur retourné par etat_print :
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 Function etat_print() Dim objWMIService, colInstalledPrinters, objPrinter Dim nomPC Dim Resultat As Integer nomPC = "." objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=impersonate}!\\" & nomPC & "\root\cimv2") colInstalledPrinters = _ objWMIService.execQuery("Select * from Win32_Printer Where Name = 'Canon Inkjet iP1700'") 'attention a changer le nom de l'imprimante associé dans la clause Where de la requete For Each objPrinter In colInstalledPrinters Resultat = Resultat & objPrinter.ExtendedDetectedErrorState Next Return Resultat End Function
et ensuite voila ma form imprimante qui affiche le message :
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 Private Sub Timer_etat_print_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_etat_print.Tick Label2.Text = etat_print() If etat_print() = 4 Then Label3.Text = "Probléme d'imprimante" imprimante.Show() ElseIf etat_print() = 6 Then Label3.Text = "Probléme d'imprimante" imprimante.Show() ElseIf etat_print() = 7 Then Label3.Text = "Probléme d'imprimante" imprimante.Show() ElseIf etat_print() = 8 Then Label3.Text = "Probléme d'imprimante" imprimante.Show() ElseIf etat_print() = 0 Then Label3.Text = "imprimante OK" End If End Sub
Mon problème est que mon code me parait un peu lourd ! complexe ! lorsque je le lance il fonctionne mais il est très long, sablier tourne en permanence !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub imprimante_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Select Case Form1.etat_print Case 4 label1.Text = "Il n'y a plus de papier dans l'imprimante !" Case 6 label1.Text = "La toner d'encre n'est plus dans l'imprimante !" Case 7 label1.Text = "Un capot de l'imprimante est ouvert" Case 8 label1.Text = "Bourrage papier" End Select End Sub
alors est ce du à ma condition dans le timer qui ralentit tous ??
Partager