Windows XP Print-Mapping Automation

Found a useful feature in Windows XP the other week when stuffing around with print-mapping scripts. Instead of using the old con2prt feature to connect to printers, you can use Windows’ inbuilt printing APIs to map printers, add new drivers from INF files, remove printer mappings, remove drivers, and much more.

The main reason I like this over the old con2prt.exe is that you can remove individual mappings to printers – you don’t have to remove all the mapped printers at once with a ‘con2prt /f’ if you don’t want to.
Here’s the full info text that “rundll32 printui.dll,PrintUIEntry /?” produces.

Usage: rundll32 printui.dll,PrintUIEntry [options] [@commandfile]
/a[file] binary file name
/b[name] base printer name
/c[name] unc machine name if the action is on a remote machine
/dl delete local printer
/dn delete network printer connection
/dd delete printer driver
/e display printing preferences
/f[file] either inf file or output file
/ga add per machine printer connections
/ge enum per machine printer connections
/gd delete per machine printer connections
/h[arch] driver architecture one of the following, Alpha | Intel | IA64 | x64
/ia install printer driver using inf file
/id install printer driver using add printer driver wizard
/if install printer using inf file
/ii install printer using add printer wizard with an inf file
/il install printer using add printer wizard
/in add network printer connection
/j[provider] print provider name
/k print test page to specified printer, cannot be combined with command when installing a printer
/l[path] printer driver source path
/m[model] printer driver model name
/n[name] printer name
/o display printer queue view
/p display printer properties
/q quiet mode, do not display error messages
/r[port] port name
/s display server properties
/Ss Store printer settings into a file
/Sr Restore printer settings from a file
Store or restore printer settings option flags that must be placed at the end of command:
2 PRINTER_INFO_2
7 PRINTER_INFO_7
c Color Profile
d PrinterData
s Security descriptor
g Global DevMode
m Minimal settings
u User DevMode
r Resolve name conflicts
f Force name
p Resolve port
/u use the existing printer driver if it’s already installed
/t[#] zero based index page to start on
/v[version] driver version one of the following, Windows 95, 98 and Me | Windows NT 4.0 | Windows NT 4.0 or 2000 | Windows 2000 or XP | Windows XP
/w prompt the user for a driver if specified driver is not found in the inf
/y set printer as the default
/Xg get printer settings
/Xs set printer settings
/z do not auto share this printer
/Y do not auto generate a printer name
/K changes the meaning of /v and /h to accept 0,1,2,3, respectively for Windows x64 and Windows IA64 | Windows NT x86 | Windows NT Alpha_AXP | Windows 4.0
/Z share this printer, can only be used with the /if option
/? help this message
@[file] command line argument file
/Mw[message] show a warning message before committing the command
/Mq[message] show a confirmation message before committing the command
/W[flags] specifies flags and switches for the wizards (for APW & APDW)
r make the wizards to be restart-able from the last page
/G[flags] specifies global flags and switches
w suppress setup driver warnings UI (super quiet mode)

Examples:
Run server properties:
rundll32 printui.dll,PrintUIEntry /s /t1 /nmachine
Run printer properties:
rundll32 printui.dll,PrintUIEntry /p /nmachineprinter
Run add printer wizard localy:
rundll32 printui.dll,PrintUIEntry /il
Run add printer wizard on machine:
rundll32 printui.dll,PrintUIEntry /il /cmachine
Run queue view:
rundll32 printui.dll,PrintUIEntry /o /nmachineprinter
Run inf install:
rundll32 printui.dll,PrintUIEntry /if /b “Test Printer” /f %windir%infntprint.inf /r “lpt1:” /m “AGFA-AccuSet v52.3″
Run add printer wizard using inf:
rundll32 printui.dll,PrintUIEntry /ii /f %windir%infntprint.inf
Add per machine printer connection:
rundll32 printui.dll,PrintUIEntry /ga /cmachine /nmachineprinter /j”LanMan Print Services”
Delete per machine printer connection:
rundll32 printui.dll,PrintUIEntry /gd /cmachine /nmachineprinter
Enumerate per machine printer connections:
rundll32 printui.dll,PrintUIEntry /ge /cmachine
Add printer driver using inf:
rundll32 printui.dll,PrintUIEntry /ia /cmachine /m “AGFA-AccuSet v52.3” /h “Intel” /v “Windows 2000 or XP” /f %windir%infntprint.inf
Add printer driver using inf:
rundll32 printui.dll,PrintUIEntry /ia /K /cmachine /m “AGFA-AccuSet v52.3” /h “Windows NT x86” /v 3
Remove printer driver:
rundll32 printui.dll,PrintUIEntry /dd /cmachine /m “AGFA-AccuSet v52.3” /h “Intel” /v “Windows 2000 or XP”
Remove printer driver:
rundll32 printui.dll,PrintUIEntry /dd /K /cmachine /m “AGFA-AccuSet v52.3” /h “Windows NT x86” /v 3
Set printer as default:
rundll32 printui.dll,PrintUIEntry /y /n “printer”
Set printer comment:
rundll32 printui.dll,PrintUIEntry /Xs /n “printer” comment “My Cool Printer”
Get printer settings:
rundll32 printui.dll,PrintUIEntry /Xg /n “printer”
Get printer settings saving results in a file:
rundll32 printui.dll,PrintUIEntry /f “results.txt” /Xg /n “printer”
Set printer settings command usage:
rundll32 printui.dll,PrintUIEntry /Xs /n “printer” ?
Store all printer settings into a file:
rundll32 printui.dll,PrintUIEntry /Ss /n “printer” /a “file.dat”
Restore all printer settings from a file:
rundll32 printui.dll,PrintUIEntry /Sr /n “printer” /a “file.dat”
Store printer information on level 2 into a file :
rundll32 printui.dll,PrintUIEntry /Ss /n “printer” /a “file.dat” 2
Restore from a file printer security descriptor:
rundll32 printui.dll,PrintUIEntry /Sr /n “printer” /a “file.dat” s
Restore from a file printer global devmode and printer data:
rundll32 printui.dll,PrintUIEntry /Sr /n “printer” /a “file.dat” g d
Restore from a file minimum settings and resolve port name:
rundll32 printui.dll,PrintUIEntry /Sr /n “printer” /a “file.dat” m p

The commands I found useful were:

Delete a local printer driver:
rundll32 printui.dll,PrintUIEntry /dd /m “PrinterNameHere123”

Usage:
rundll32 printui.dll,PrintUIEntry /dd /m “RICOH Aficio 3245C PCL 6”

Delete a network printer:
rundll32 printui.dll,PrintUIEntry /dn /n servernameprintsharename
Usage:
rundll32 printui.dll,PrintUIEntry /dn /n server01mfc_blue_bw
rundll32 printui.dll,PrintUIEntry /dn /n server01mfc_blue_colour
rundll32 printui.dll,PrintUIEntry /dn /n server01mfc_yellow_colour
rundll32 printui.dll,PrintUIEntry /dn /n server01mfc_yellow_bw

Install a network printer:
rundll32 printui.dll,PrintUIEntry /in /n servernameprintsharename
Usage:
rundll32 printui.dll,PrintUIEntry /in /n ads01mfc_blue_colour

Install Printer Driver from INF File:
rundll32 printui.dll,PrintUIEntry /ia /m “PrinterModelName” /h “Intel” /v “Windows 2000 or XP” /f servernamefilename.INF
Usage:
rundll32 printui.dll,PrintUIEntry /ia /m “RICOH Aficio 3245C PCL 6” /h “Intel” /v “Windows 2000 or XP” /f ads01publicPrinterDrivers3245pcldisk1OEMSETUP.INF

Set a printer as the default:
(Note that printer must be connected already for this to work)
rundll32 printui.dll,PrintUIEntry /y /n servernameprintsharename
Usage:
rundll32 printui.dll,PrintUIEntry /y /n PC01HPLaserJet2420

3 thoughts on “Windows XP Print-Mapping Automation

  1. Pingback: Del.icio.us Links » Blog Archive » links for 2008-05-13

  2. Hi!

    I have tried printui.dll a lot to connect network printers in Vista and I have lots of problems!

    First, every time I reboot my PC, the printers are gone! How should I use printui.dll to get the printers staying there even when I restart the computer?

    Second, is there a way to use printui.dll to remove all the printers in just one command?

    Third, if I would like to use a command file, what should that look like?

    Regards
    Bertil Johansson

    Like

  3. Funny that you mention this, as I just looked at this post again yesterday in relation to print mapping in Vista. I didn’t get a chance to play around with it, but i’ll post something up once I have a chance to test it out. Hopefully today.

    Bertil: What’s your environment? Are you mapping printers on a network? Are you in a Windows domain environment?

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s