Lococobra Posted June 20, 2008 Share Posted June 20, 2008 I can't figure out how to retrieve the printer queue for a network printer using autoit. I'm open to using command line stuff, anything that will get me the same info as is listed in "Printers and Faxes". Also, I don't necessarily know the name of the printer, since I'm trying to write something that can be used on multiple computers. So in addition to getting the print queue, is there a way to reliably find the default printer? Link to comment Share on other sites More sharing options...
martin Posted June 20, 2008 Share Posted June 20, 2008 (edited) I can't figure out how to retrieve the printer queue for a network printer using autoit. I'm open to using command line stuff, anything that will get me the same info as is listed in "Printers and Faxes". Also, I don't necessarily know the name of the printer, since I'm trying to write something that can be used on multiple computers. So in addition to getting the print queue, is there a way to reliably find the default printer?This link shows how you can see the queue using the command line. Here are 3 ways to get the default printer. The wmi is always very slow for me. expandcollapse popupMsgBox(0, "Default printer is (method 1)", GetDefaultPrinter1()) MsgBox(0, "Default printer is (method 2)", GetDefaultPrinter2()) MsgBox(0, "Default printer is (method 3)", GetDefaultPrinter3()) Func GetDefaultPrinter1() ;by martin Local $szDefPrinterName Local $Size $namesize = DllStructCreate("dword") DllCall("winspool.drv", "int", "GetDefaultPrinter", "str", '', "ptr", DllStructGetPtr($namesize)) $pname = DllStructCreate("char[" & DllStructGetData($namesize, 1) & "]") DllCall("winspool.drv", "int", "GetDefaultPrinter", "ptr", DllStructGetPtr($pname), "ptr", DllStructGetPtr($namesize)) Return DllStructGetData($pname, 1) EndFunc ;==>GetDefaultPrinter1 Func GetDefaultPrinter2() ;by unknown, probably not martin Local $result, $strComputer, $np, $colEvents $result = '' $strComputer = "." $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2") $colEvents = $objWMIService.ExecQuery _ ("Select * From Win32_Printer Where Default = TRUE");TRUE $np = 0 For $objPrinter In $colEvents $result = $objPrinter.DeviceID Next Return $result EndFunc ;==>GetDefaultPrinter2 Func GetDefaultPrinter3() ;by martin $defp = RegRead("HKCU\Printers", "DeviceOld") Return StringLeft($defp, StringInStr($defp, ',') - 1) EndFunc ;==>GetDefaultPrinter3 Edited June 21, 2008 by martin Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. Link to comment Share on other sites More sharing options...
Lococobra Posted July 23, 2008 Author Share Posted July 23, 2008 Sorry it took me so long to answer. I like your methods of retrieving the default printer, but I've seen that "Command Line Printer Control" page before and I can't seem to get it to do what I want. The closest I can get to actually retrieving print job information using the suggested methods was something like RUNDLL32 PRINTUI.DLL,PrintUIEntry /o /n\\machine\printer Which really doesn't get me anywhere, it just shows me the window that I'd get by going to "Printers and Faxes". How would I go about actually retrieving print job information, such as the document name, status, owner... etc? Link to comment Share on other sites More sharing options...
weaponx Posted July 23, 2008 Share Posted July 23, 2008 expandcollapse popup; Generated by AutoIt Scriptomatic $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $strComputer = "localhost" $Output="" $Output &= "Computer: " & $strComputer & @CRLF $Output &= "==========================================" & @CRLF $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PrintJob", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) then For $objItem In $colItems $Output &= "Caption: " & $objItem.Caption & @CRLF $Output &= "DataType: " & $objItem.DataType & @CRLF $Output &= "Description: " & $objItem.Description & @CRLF $Output &= "Document: " & $objItem.Document & @CRLF $Output &= "DriverName: " & $objItem.DriverName & @CRLF $Output &= "ElapsedTime: " & WMIDateStringToDate($objItem.ElapsedTime) & @CRLF $Output &= "HostPrintQueue: " & $objItem.HostPrintQueue & @CRLF $Output &= "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF $Output &= "JobId: " & $objItem.JobId & @CRLF $Output &= "JobStatus: " & $objItem.JobStatus & @CRLF $Output &= "Name: " & $objItem.Name & @CRLF $Output &= "Notify: " & $objItem.Notify & @CRLF $Output &= "Owner: " & $objItem.Owner & @CRLF $Output &= "PagesPrinted: " & $objItem.PagesPrinted & @CRLF $Output &= "Parameters: " & $objItem.Parameters & @CRLF $Output &= "PrintProcessor: " & $objItem.PrintProcessor & @CRLF $Output &= "Priority: " & $objItem.Priority & @CRLF $Output &= "Size: " & $objItem.Size & @CRLF $Output &= "StartTime: " & WMIDateStringToDate($objItem.StartTime) & @CRLF $Output &= "Status: " & $objItem.Status & @CRLF $Output &= "StatusMask: " & $objItem.StatusMask & @CRLF $Output &= "TimeSubmitted: " & WMIDateStringToDate($objItem.TimeSubmitted) & @CRLF $Output &= "TotalPages: " & $objItem.TotalPages & @CRLF $Output &= "UntilTime: " & WMIDateStringToDate($objItem.UntilTime) & @CRLF ;if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop ConsoleWrite($Output & @CRLF) $Output="" Next Else Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_PrintJob" ) Endif Func WMIDateStringToDate($dtmDate) Return (StringMid($dtmDate, 5, 2) & "/" & _ StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _ & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2)) EndFunc Link to comment Share on other sites More sharing options...
Lococobra Posted July 23, 2008 Author Share Posted July 23, 2008 Wow... that's awesome. Much closer than I ever got... it seems like some of the data isn't right though. Totalpages almost always returns 0 or 1... but sometimes 2. It doesn't seem to have anything to do with the actual number of pages. I'll keep looking in to it though, at least now I know where I'm headed. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now