Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Service stoppen/starten in VB...  (gelezen 1556 keer)

0 leden en 1 gast bekijken dit topic.

Offline wouter1995

  • Oplosser
  • ****
  • Berichten: 717
  • Geslacht: Man
Service stoppen/starten in VB...
« Gepost op: 15 mei 2008, 18:23:24 »
het nml. zo, mijn zus ligt in conflict met onze printer :) Elke keer als ze wild  afdrukken klikt ze teveel op de "print knop", foutmeldingen enz...

Nu gaan de problemen grotendeels voorbij als je de Printspooler service opnieuw opstart. Als ik elke keer  1 verdieping naar beneden moet gaan, zodat madam kan printen, begint dat zo stilaan op een mens zijn zenuwen te werken. Dus wilde ik voor haar een simpel EXE'tje maken dat de service herstart.

Ik ben van plan VB daar voor te gebruiken ('08 Xpress). Nu zoek ik nog de code daarvoor...
Windows Vista H Premium SP2, XP Home/Pro SP3, 7 Professional, 2K Prof, Ubuntu 9.10, Server 2K3 R2 &2K8 R2 Enterprise, Win 98 SE, MSE, ASUS P7P55D-E, Core i5 760 @ 3,76 GHz, CoolerMaster 212, Kingston 4GB DDR3, Geforce 8500 GT, Velociraptor 150GB +Caviar Blue 500 GB,  2x DVD-RW, WLan 802.11G, PSU 550

Offline wouter1995

  • Oplosser
  • ****
  • Berichten: 717
  • Geslacht: Man
Re: Service stoppen/starten in VB...
« Reactie #1 Gepost op: 18 mei 2008, 15:20:37 »
Is dit onmogelijk of is er niemand die me kan helpen ?  :'(
Windows Vista H Premium SP2, XP Home/Pro SP3, 7 Professional, 2K Prof, Ubuntu 9.10, Server 2K3 R2 &2K8 R2 Enterprise, Win 98 SE, MSE, ASUS P7P55D-E, Core i5 760 @ 3,76 GHz, CoolerMaster 212, Kingston 4GB DDR3, Geforce 8500 GT, Velociraptor 150GB +Caviar Blue 500 GB,  2x DVD-RW, WLan 802.11G, PSU 550

Offline AsinuS

  • Ervaren lid
  • ***
  • Berichten: 309
  • odi et amo
Re: Service stoppen/starten in VB...
« Reactie #2 Gepost op: 22 mei 2008, 22:32:20 »
Je kan je printerqueue gewoon leegmaken via .Net hoor .. Is gewoon een kwestie van in de juiste collection te zoeken.

Het kan er ongeveer zo gaan uitzien: (zoek alle printers en cancel alle jobs)

Private Function ClearAllPrinterQueues() As Boolean
        For Each sPrinter As String In GetPrintersCollection()
            Console.WriteLine("Printer gevonden: " & sPrinter)           
            For Each sJob As String In GetPrintJobsCollectionJobId(sPrinter)
                CancelPrintJob(sPrinter, CInt(sJob))
            Next
        Next
    End Function

Private Function GetPrintersCollection() As StringCollection
        Dim printerNameCollection As New StringCollection()
        Dim searchQuery As String = "SELECT * FROM Win32_Printer"
        Dim searchPrinters As New ManagementObjectSearcher(searchQuery)
        Dim printerCollection As ManagementObjectCollection = searchPrinters.[Get]()
        For Each printer As ManagementObject In printerCollection
            printerNameCollection.Add(printer.Properties("Name").Value.ToString())
        Next
        Return printerNameCollection
    End Function

Private Function GetPrintJobsCollectionJobId(ByVal printerName As String) As StringCollection
        Dim printJobCollection As New StringCollection()
        Dim searchQuery As String = "SELECT * FROM Win32_PrintJob"

        Dim searchPrintJobs As New ManagementObjectSearcher(searchQuery)
        Dim prntJobCollection As ManagementObjectCollection = searchPrintJobs.[Get]()
        For Each prntJob As ManagementObject In prntJobCollection
            Dim jobName As String = prntJob.Properties("Name").Value.ToString()

            Dim splitArr As Char() = New Char(0) {}
            splitArr(0) = Convert.ToChar(",")
            Dim prnterName As String = jobName.Split(splitArr)(0)
            Dim jobId As String = jobName.Split(splitArr)(1)
            Dim documentName As String = prntJob.Properties("Document").Value.ToString()
            If [String].Compare(prnterName, printerName, True) = 0 Then
                Console.WriteLine("- Document gevonden: " & documentName & "( jobId: " & jobId.ToString & ")")
                printJobCollection.Add(jobId)
            End If
        Next
        Return printJobCollection

Private Function CancelPrintJob(ByVal printerName As String, ByVal printJobID As Integer) As Boolean
        Dim isActionPerformed As Boolean = False
        Dim searchQuery As String = "SELECT * FROM Win32_PrintJob"
        Dim searchPrintJobs As New ManagementObjectSearcher(searchQuery)
        Dim prntJobCollection As ManagementObjectCollection = searchPrintJobs.[Get]()
        For Each prntJob As ManagementObject In prntJobCollection
            Dim jobName As String = prntJob.Properties("Name").Value.ToString()

            Dim splitArr As Char() = New Char(0) {}
            splitArr(0) = Convert.ToChar(",")
            Dim prnterName As String = jobName.Split(splitArr)(0)
            Dim prntJobID As Integer = Convert.ToInt32(jobName.Split(splitArr)(1))
            Dim documentName As String = prntJob.Properties("Document").Value.ToString()
            If [String].Compare(prnterName, printerName, True) = 0 Then
                If prntJobID = printJobID Then
                    Try
                        prntJob.Delete()
                        isActionPerformed = True
                        Console.WriteLine("--> Job verwijderd: " & printJobID.ToString)
                    Catch ex As Exception
                        Console.WriteLine("--> Job NIET verwijderd: " & printJobID.ToString & " [ERROR]: " & ex.Message)
                        isActionPerformed = False
                    End Try
                    Exit For
                End If
            End If
        Next
        Return isActionPerformed
    End Function

Steek alles in een module en klaar. Makkelijker kan ik het nog maken door mijn solution hier te posten, maar ge moogt zelf ook nog iets doen :d

Grtz & hf
A7N8X2.0 ASUSTeK Computer INC., ATI display adapter AGP (0x4A54)ATI display adapter AGP (0x4A54), Windows XP, Prof, SP2, NL, AMD Athlon(tm), 1024 MB RAM, HDD:20 + 156 + 293 + 245 + 244 GB, NTFS, AVG antivirus, Microsoft Outlook

 


www.combell.com