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.