SetDefaultPrinter (winspool)
Last changed: -179.178.48.53

.
Summary
Sets the default printer for a user. Only supported for Windows 2000 and above.

C# Signature:

    [DllImport("winspool.drv", CharSet=CharSet.Auto, SetLastError=true)]
    public static extern bool SetDefaultPrinter(string Name);

VB Signature:

Declare Function SetDefaultPrinter Lib "winspool.drv" Alias "SetDefaultPrinterA" (ByVal pszPrinter As String) As Boolean

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Optionally call SendMessageTimeout() to notify running programs of the change:

{

    pinvokeResult = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero,
        IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out innerPinvokeResult);

}

Sample Code:

    // Locals
    bool result;
    IntPtr pinvokeResult;
    IntPtr HWND_BROADCAST;
    IntPtr innerPinvokeResult;

    // Set default printer
    result = SetDefaultPrinter(defaultPrinterName);

    // Notify running programs?
    if (result == true && notifyRunningPrograms == true)
    {
        // Tell all open programs that this change occurred.
        // Allow each program 1 second to handle this message.
        HWND_BROADCAST = new IntPtr(0xffff);
        pinvokeResult = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero,
            IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out innerPinvokeResult);
    }

    // Return result
    return result;

Alternative Managed API:

Do you know one? Please contribute it!

Documentation