Jump to content
Sign in to follow this  
jguinch

Printers Management UDF

Recommended Posts

Thanks,guy!It's useful for me!


董小姐,你微笑的时候很美,就像安河桥下,清澈的水...

Share this post


Link to post
Share on other sites

Can be very useful here too. Once in a while I try to automate something with print queues and ports. I will have it a go in a few days.

Thanks jguinch

Share this post


Link to post
Share on other sites

I just came across this UDF and it looks very promising. I'd like to have some documentation on it. For instance, when adding a printer to a computer and I know the driver is not present on the machine, do I use the _AddPrinter or do I use the _AddPrinterDriver followed by the _AddPrinter? Do I need to install the driver first? If so, why is the final parameter only limited to the OS options of Win9x, Win351, NT40 and Win2k?

I'm trying to automate adding printers in various locations that do not have servers. All the clients are 64-bit Windows 7 and all printers will be direct TCP/IP port printing to a Canon imageRUNNER (various models).


Who lied and told you life would EVER be fair?

Share this post


Link to post
Share on other sites

Thank you for your interest.

Yes, you must install the driver first (with _AddPrinterDriver).

The default value for $sVersion parameter is 3 : it seems Windows 2000 and upper (in your case, I think). You will rarely have to install an old driver on a recent System... So you can use the default value.

For the $sDriverPlatform value, the values can be Windows NT x86 or Windows x64. (depending of the type of driver that you want to install).



 

Share this post


Link to post
Share on other sites

I made a script to get a list of all printers then remove them all. which works for the most part, but some printers are not removed and get greyed out with a yellow triangle on their icon. the property page is blank.


What is what? What is what.

Share this post


Link to post
Share on other sites

Biatu : what type are printers that have not been removed ? Shared ?

In _RemovePrinter, you must use serverprinterShare for shared printers.

 

Nope, they are not shared, or network printers. they are connected via USB port. I test various printers, and the printer list gets pretty full so I run the script.

The issue used to be printer jobs from other users, so i made a func to remove all jobs from all printers.

Then another dell status service was locking some printers (afaik) so i stop the service.

that didnt work completely,so now I restart the spooler service, which remove most. all except for the "Dell 5330 Mono Laser MFP"

The env is win7 enterprise x64.

Edited by Biatu

What is what? What is what.

Share this post


Link to post
Share on other sites

_AddPrinter is not working either, i keep getting error dialog...

Error Number: -2147352567

WinDescription: Exception occurred.

Description: Generic Failure

Source: $WbemObjectEx

#Include <Printers.au3>

$Name="PrintNet.1"
$Driver="Dell 2335dn MFP,3,Windows x64"
$File="C:\Test1.pcl";@ScriptDir&"\"&$Name&".pcl"
_AddPrinter($Name,$Driver,"C:\Test1.pcl")

Thanks


What is what? What is what.

Share this post


Link to post
Share on other sites

Hello Guys,

 

I am new to autoit. I want  to run a program called PrinterInfo.exe, search for the the specific word " STATUS_PAPEROUT", if found then send email to desired recipient.

So far I have only able to run program, take a window capture save the window capture and then email the window capture to the recipient. But this is not what i want.

 

I have read posts which suggest that I should use WinGetText to retrieve the word, however I have still no idea as to how to search for the specific word " STATUS_PAPEROUT" and if present then send email.

 

Please help

Share this post


Link to post
Share on other sites

I use this to determine the printer type:

http://<Printer IP>:5200/Printer.xml

then i use the printer's network interface for everything else.

Currently i am doing research with PCL, SNMP, etc.

Edited by Biatu

What is what? What is what.

Share this post


Link to post
Share on other sites

Biatu, you have to install the driver before installing the printer : it could be done with _AddPrinterDriver (look at the example above).

Next, you have to know the port on which you want to install the printer (if needed, create a network port with _AddTCPIPPrinterPort.

And finally, you can add the printer...

I just downlod the Dell 2335dn MFP driver, so the installation can be done like this :

#Include "printers.au3"

Local $sPrinterName = "My Dell 2335dn Printer"
Local $sDriverName = "Dell 2335dn MFP"
Local $sPortIP = "192.168.1.250"
Local $sPortName = "IP_192.168.1.250"
Local $iPortnumber = 9100

_AddPrinterDriver($sDriverName, "Windows x64", @ScriptDir & "\Printer\PCL\WINXP_VISTA_64\", @ScriptDir & "\Printer\PCL\WINXP_VISTA_64\sdf1m.INF")
_AddTCPIPPrinterPort($sPortName, $sPortIP, $iPortnumber)
_AddPrinter($sPrinterName, $sDriverName, $sPortName)

Share this post


Link to post
Share on other sites

If I remove a printer using your func will I still need to remove port, or is that auto?

Thanks


What is what? What is what.

Share this post


Link to post
Share on other sites

_RemovePrinter does not remove the port. You must do it after.

Same thing for the driver.

Tried that, gives error. So i left it out, and the port does not show up on ports list when new printer is added or on the existing ones. So i assume that it's removed automatically


What is what? What is what.

Share this post


Link to post
Share on other sites

Hmm, is this a global (all users) add/delete of local (current profile)?

Speaking exclusively of printserver printers that normally only add per user, unlike local printesr that default to all users. 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Colduction
      Hi AutoIt Programmers!

      I've seen a code that gives Name of Group by writing it's group's SID, but this one response very slower than Windows Command-Line WMIC
       
      Func _GetLocalGroupName($sSID = 'S-1-5-18') $objWMIService = ObjGet ("winmgmts:\\" & @ComputerName & "\root\cimv2") $colItems = $objWMIService.ExecQuery('SELECT Name FROM Win32_Group where SID="' & $sSID & '"') For $GroupNames in $colItems MsgBox (0,"",$GroupNames.Name) ExitLoop Next EndFunc I don't want call and use any third-party programs even CMD, i just want use from Windows API, netapi32.dll or AutoIt Functions (Standalone).
      Do you have any idea to improve speed/performance of this code? I'll happy of your comments
       
       
       
      ====================== SOLOUTION by @Subz ======================
       
    • By jresine
      Hello, is it possible to know via a script or command, to have the percentage of disk usage of a process? thank you in advance.
      ps: see image

    • By Dwalfware
      HI
      Another head scratched
      Anyone solve how to get the IPV6 from WMI?
      I followed the usual SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID='" & GUICtrlRead($cboAdapters) & "'
      get the index 
      port it to 
      Local $query = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE Index = " & _GetSelectedNIC(), "WQL", 0x30 )
      All i can see is IPv4 addresses
      My question is is there another place the IPv6 information is hiding? I configured my LAN with IPV6 and my wireless with IPv4 so I can see what shows.
      Thanks in Advance.
      PS. I did try google
       
    • By Dwalfware
      Hi Folks
      Can not get my head around this one.
      This function gets the DNS object s
      If you have two DNS entries fine. but if you have only one! Trouble
      $objItem.DNSServerSearchOrder[0] = Primary DNS
      $objItem.DNSServerSearchOrder[1] = Secondry DNS not always there. I need a way to return 0 if not there or the IP if its there.
      Or is there a way to tell how many objects there are in the "[?]"
      I'm terrible at WMI errors, thanks for help in advance.
      Func _GETcurrentNICinfo2() $oErrors = ObjEvent("AutoIt.Error", "Error_Handle") Local $DnsSecondry Local $objWMIService = ObjGet( "winmgmts:\\" & @ComputerName & "\root\CIMV2" ) Local $query = $objWMIService.ExecQuery("SELECT DNSServerSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE Index = " & _GetSelectedNIC(), "WQL", 0x30 ) If @error Then Return 0 If NOT IsObj($query) Then Return 0 Else For $objItem In $query Return $objItem.DNSServerSearchOrder[1] next Endif EndFunc  
    • By amin84
      Hello,
      I'm having trouble getting information from Win32_Processor:
      https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-processor
      How does this WMI Query work? Let's say I need to query VMMonitorModeExtensions, Level, ProcessorId, and ProcessorType.
      How would this work?
      Thanks.
×
×
  • Create New...