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 :
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
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
  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
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
 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
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 !
alors est ce du à ma condition dans le timer qui ralentit tous ??