2014-01-17 46 views
2

我想为按钮单击设置windows/system设置的默认打印机。我想点击一个按钮,并希望一个窗口对话框应该出现,要求用户设置一个默认打印机。现在我正在使用PrintDialog,但每次单击按钮时都会更改打印机。我想将所选打印机设置为默认打印机,即使关闭应用程序也应该保持不变。使用c设置窗口的默认打印机#

private void PrintSettingsBtn_Click(object sender, EventArgs e) 
{ 
    PrintDialog PrintDialog = new PrintDialog(); 
    PrintDialog.ShowDialog(); 
    PrinterName = PrintDialog.PrinterSettings.PrinterName; 
} 

回答

4

尝试SetDefaultPrinter的Windows API函数

using System.Runtime.InteropServices; 

    ... 

    [DllImport("winspool.drv", 
       CharSet = CharSet.Auto, 
       SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    public static extern Boolean SetDefaultPrinter(String name); 

    ... 

    SetDefaultPrinter(PrinterName); 

看到

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162971(v=vs.85).aspx http://www.pinvoke.net/default.aspx/winspool/SetDefaultPrinter.html?diff=y

+0

能否请你告诉我,我有一个库包括哪些内容? –

+0

您不必包含任何库:DllImport以及MarshaAs在mscorlib中; winspool.drv是Windows的一部分,因此您已经拥有过。 –

+0

它给我错误DllImport –

1

右键单击Solution Explorer中的项目,选择属性。选择设置标签, 添加打印机名称设置。

在代码中使用的设置:

string PrinterName 
{ 
    get { return (string)Properties.Settings.Default["PrinterName"]; } 
    set 
    { 
     Properties.Settings.Default["PrinterName"] = value; 
     Properties.Settings.Default.Save(); 
    } 
} 

private void print_Click(object sender, EventArgs e) 
{ 
    PrintDialog pd = new PrintDialog(); 
    if (PrinterName != "") 
     pd.PrinterSettings.PrinterName = PrinterName; 
    if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    { 
     // Print 

     PrinterName = pd.PrinterSettings.PrinterName; 
    } 
} 
+0

它给我的例外设置属性'打印机名'找不到。 –

+0

当我在SolutionExplorer中右键点击解决方案时,它没有给我任何类型的设置。但是,当我点击我的项目文件夹中的一个,然后打开设置 –

+0

您需要项目设置(WindowsFormsApplication1或类似的东西),而不是解决方案设置。看看http://social.msdn.microsoft.com/Forums/getfile/193805 – AlexS

相关问题