// TARGET:ping // START_IN: using System; using System.Runtime.InteropServices; using System.Text; using LoginPI.Engine.ScriptBase; public static class WinSpoolApi { [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetDefaultPrinter(string pszPrinter); [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool GetDefaultPrinter( StringBuilder pszBuffer, ref int pcchBuffer ); } public class SetDefaultPdfPrinterScript : ScriptBase { void Execute() { const string desiredPrinter = "Microsoft Print to PDF"; Log("Starting default-printer change to '" + desiredPrinter + "'"); // 1) Set the default printer if (!WinSpoolApi.SetDefaultPrinter(desiredPrinter)) { int err = Marshal.GetLastWin32Error(); ABORT("Failed to set default printer (Win32 error " + err + ")"); return; } Log("SetDefaultPrinter succeeded"); // 2) Read it back int capacity = 0; WinSpoolApi.GetDefaultPrinter(null, ref capacity); var buffer = new StringBuilder(capacity); if (!WinSpoolApi.GetDefaultPrinter(buffer, ref capacity)) { int err = Marshal.GetLastWin32Error(); ABORT("Failed to retrieve default printer (Win32 error " + err + ")"); return; } string current = buffer.ToString(); Log("Current default printer is '" + current + "'"); // 3) Validate if (!string.Equals(current, desiredPrinter, StringComparison.OrdinalIgnoreCase)) { ABORT("Default printer mismatch: expected '" + desiredPrinter + "', but found '" + current + "'"); } Log("Default printer correctly set to '" + desiredPrinter + "'"); } }