How can I open the printer "Preferences" dialog?

O

OmegaSquared

have customized PageSetup and Print dialogs that emulate the standard
dialogs. I would like to be able to open the "Printer Preferences" dialog by
clicking a button (just like can be done on the standard dialogs).

(On some Print dialogs (such as in Word and Excel) this button is labelled
"Properties". And just to avoid being too consistent, it is labelled
"Options" on the Excel PageSetup dialog.)

I thought that this would be trivial, but so far I haven't been able to
figure out how to do this. Does anyone know of an easy way to open this
"Printer Preferences" dialog box?

Thanks,
Randy
 
O

OmegaSquared

For anyone else who may be interested, I finally found the answer here:

http://bytes.com/forum/thread389569.html

This answer is provided by (and with my thanks to) Bart Mermuys. The
following snippet shows the essence of the solution.

Cheers,
Randy

Imports System.Drawing.Printing
Public Class Form1
Private Const DM_IN_BUFFER As Integer = 8
Private Const DM_OUT_BUFFER As Integer = 2
Private Const DM_IN_PROMPT As Integer = 4

Private Declare Auto Function GlobalLock _
Lib "kernel32.dll" (ByVal handle As IntPtr) As IntPtr
Private Declare Auto Function GlobalUnlock _
Lib "kernel32.dll" (ByVal handle As IntPtr) As Integer
Private Declare Auto Function GlobalFree _
Lib "kernel32.dll" (ByVal handle As IntPtr) As IntPtr
Private Declare Auto Function DocumentProperties _
Lib "winspool.drv" (ByVal hWnd As IntPtr, _
ByVal hPrinter As IntPtr, _
ByVal pDeviceName As String, _
ByVal pDevModeOutput As IntPtr, _
ByVal pDevModeInput As IntPtr, _
ByVal fMode As Int32) As Integer

Sub ShowPrinterProperties(ByVal Settings As PrinterSettings)
' PrinterSettings+PageSettings -> hDEVMODE
Dim hDevMode As IntPtr
hDevMode = Settings.GetHdevmode(Settings.DefaultPageSettings)
' Show Dialog ( [In,Out] pDEVMODE )
Dim pDevMode As IntPtr = GlobalLock(hDevMode)
DocumentProperties(Me.Handle, IntPtr.Zero, _
Settings.PrinterName, pDevMode, pDevMode, _
DM_OUT_BUFFER Or DM_IN_BUFFER Or DM_IN_PROMPT)
GlobalUnlock(hDevMode)
' hDEVMODE -> PrinterSettings+PageSettings
Settings.SetHdevmode(hDevMode)
Settings.DefaultPageSettings.SetHdevmode(hDevMode)
' cleanup
GlobalFree(hDevMode)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
If (Me.PrintDocument1.PrinterSettings.IsValid) Then
Me.ShowPrinterProperties(Me.PrintDocument1.PrinterSettings)
Else
MsgBox("Invalid Printer Name!", MsgBoxStyle.Information)
End If
End Sub

End Class
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top