Archive: SetDefaultPrinter call via System Plug-in


SetDefaultPrinter call via System Plug-in
Hello

I'm trying to use the System plug-in to call the SetDefaultPrinter function (which I understand is availabel on my Windows XP system), but I'm not having much success.

I found an earlier posting (here) and decided to start by copying the GetDefaultPrinter example, but when I use the following:

System::Call 'winspool::GetDefaultPrinter(t .r0, *i ${NSIS_MAX_STRLEN})'
MessageBox MB_OK $0
I just get an empty message box ($0=NULL).

Similarly when I try the following:

System::Call 'winspool::SetDefaultPrinter(*t "PrinterName")'
The default printer doesn't change.

This is the first time I've use the System plug-in, and though I've read the help and tutorial I'm afraid I don't seem to be grasping it.

Any help and suggestions to point me in the right direction would be gratefully received.

TIA

Tim

Here is one way to do it:

ExecWait 'rundll32 printui.dll,PrintUIEntry /y /n "HP LaserJet 4240 PCL 6"'


Here is one way to do it:

ExecWait 'rundll32 printui.dll,PrintUIEntry /y /n "HP LaserJet 4240 PCL 6"'


Thanks cchian

That works a lot better.

Regards

Tim


Looking at this MSDN page I think that the correct syntax for the GetDefaultPrinter function should be:

System::Call 'winspool::GetDefaultPrinterA(*t .r0,i ${NSIS_MAX_STRLEN})i.r1'
and you should get a non-zero value at $1 if the function succeeds, along with the printer name at $0. You could try adding ?e at the end to get extended error information (on $2):
System::Call 'winspool::GetDefaultPrinterA(*t .r0, i ${NSIS_MAX_STRLEN})i.r1 ?e'
Pop $2
Also the SetDefaultPrinter call should like this:
System::Call 'winspool::SetDefaultPrinterA(*t "PrinterName")i.r0'
and I think you would have to experiment a bit with both functions to figure out the format of PrinterName
Hope this helps ...
CF