Druckerstatus abfragen

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

User avatar
moefr01
Posts: 115
Joined: 25 Nov 2015, 09:01
Location: Germany

Druckerstatus abfragen

26 Oct 2019, 06:11

Dank jNizMs WMI-Snippets habe ich eine Abfrage für den On/Offline-Status eines Systemdruckers erstellt. Einfach den abzufragenden Druckernamen in der ersten Zeile anpassen und schon erhält man die gewünschte Info. Ich war auf der Suche nach einer ebenbürdigen Lösung, fand aber nur umständliche Scripte mit Auslagerung in eine Datei, was bei einer intervallierten Abfrage meine SSD zu sehr forderte.
Viel Spaß... :wave: moefr01

Code: Select all

printername := "your printername here"
var := printerstatus()
if var[1] = printername {
   if var[2] = 0
	  status := "online"
   else
	  status := "offline"
}
else Return
msgbox, % "Printer " printername " is " status "."
ExitApp

;;;;;;;;;;;;;;;;;; function: printerstatus()     var[1] = printername     var[2] = workoffline (-1/0)
printerstatus()
    {
    for objItem in ComObjGet("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_Printer",,48)
        return, % { 1 : (objItem.Name), 2 : (objItem.WorkOffline)}
    }
garry
Posts: 3777
Joined: 22 Dec 2013, 12:50

Re: Druckerstatus abfragen

08 Jan 2020, 05:27

danke moefr01
EDIT : angepasst mit script von user 'haichen'
ich habe manchmal ein Problem dass der Drucker Offline anzeigt ( obwohl an) und mit 'Problembehandlung' denn funktioniert
wenn offline > run control printers , denn mit Rechtsklick > 'Problembehandlung'

Code: Select all

;- modified : user 'haichen'
Defaultprinter :=GetDefaultPrinter()
status := printerstatus(Defaultprinter)  ;0/1
if (status<>"")
	msgbox, % Defaultprinter " ist " (status ? "an" : "aus") 
else
   {
   msgbox, % Defaultprinter " gibt es nicht"
   exitapp
   }
;----------------
if (status="0")
  {
  run,control printers
  msgbox, 262208,,YOUR default PRINTER:`n%Defaultprinter%`n`nis OFF-LINE`n------------`nSwitch ON the printer`nIf problem : With Rightclick start > 'Problembehandlung'
  exitapp
  }
else
  msgbox, 262208, ,YOUR default PRINTER:`n%Defaultprinter%`n`nis ON-LINE
ExitApp
;----------------
GetDefaultPrinter()
{
	If A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME
		RegRead, var, HKLM\Config\0001\System\CurrentControlSet\Control\Print\Printers, Default
	Else
		RegRead, var, HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows, Device
	StringSplit,var, var, `,
	return var1
}
;----------------
printerstatus(pn)
{
	for objItem in ComObjGet("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_Printer where Name='" pn "'",,48)
		return, objItem.WorkOffline+1  ;workoffline (-1/0) -> mit +1 erhalte ich 0 für offline und 1 für online
}
;==============================================
Last edited by garry on 08 Jan 2020, 07:32, edited 2 times in total.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Druckerstatus abfragen

08 Jan 2020, 07:02

Bei mir funktioniert das leider so nicht. In der If-Abfrage ist ein Fehler. Der status wird nur gesetzt, wenn der Printername = Var[1] ist, anderenfalls ist der status ungesetzt. Das klappt vermutlich nur, wenn der Drucker als letzter in der Liste steht. Die Idee ist klasse.

Ich hab das mal umgeschrieben und hoffe, dass der Code so korrekt ist:

Code: Select all

Defaultprinter :=GetDefaultPrinter()
status := printerstatus(Defaultprinter)  ;0/1
if (status<>"")
	msgbox, % Defaultprinter " ist " (status ? "an" : "aus") 
else
	msgbox, % Defaultprinter " gibt es nicht"

ExitApp


GetDefaultPrinter()
{
	If A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME
		RegRead, var, HKLM\Config\0001\System\CurrentControlSet\Control\Print\Printers, Default
	Else
		RegRead, var, HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows, Device
	StringSplit,var, var, `,
	return var1
}

printerstatus(pn)
{
	for objItem in ComObjGet("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_Printer where Name='" pn "'",,48)
		return, objItem.WorkOffline+1  ;workoffline (-1/0) -> mit +1 erhalte ich 0 für offline und 1 für online
}
Änderung: Wenn es den Drucker nicht gibt ist der status ungesetzt. Habe ich noch geändert.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Druckerstatus abfragen

08 Jan 2020, 07:26

Änderung: Wenn es den Drucker nicht gibt ist der status ungesetzt. Habe ich noch geändert.

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 6 guests