Поскольку я не достаточно надежен, чтобы редактировать принятый ответ, я выложу второй ответ ...
Принятый ответ отлично работает для отображения диалогового окна собственного принтера и получения изменений из этого диалога. Однако он не устанавливает свойства в диалоговом окне заранее.
Чтобы вставить настройки в собственное диалоговое окно, необходимо изменить подпись DocumentProperties следующим образом. Новая подпись не использует параметр ref в качестве входных данных.
Вот страница , которая указала мне на эту небольшую, но существенную разницу.
[DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesW", SetLastError = true, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
static extern int DocumentProperties(
IntPtr hwnd,
IntPtr hPrinter,
[MarshalAs(UnmanagedType.LPWStr)] string pDeviceName,
IntPtr pDevModeOutput,
IntPtr pDevModeInput, //removed ref
int fMode);