user278618
user278618

Reputation: 20222

process always prints document by default printer

I have a problem with selecting printer to print my document.

My code is :

var filename = @"C:\Users\I\Desktop\test.doc";

PrintDialog pd = new PrintDialog();

pd.PrinterSettings =new PrinterSettings();

    if (DialogResult.OK == pd.ShowDialog(this))
    {
        Process objP = new Process();

        objP.StartInfo.FileName = filename;


        objP.StartInfo.WindowStyle =

        ProcessWindowStyle.Hidden; //Hide the window. 

        objP.StartInfo.Verb ="print";

          objP.StartInfo.Arguments ="/p /h \"" + filename + "\" \"" + pd.PrinterSettings.PrinterName + "\"";
        objP.StartInfo.CreateNoWindow = false;
        //true;//!! Don't create a Window. 
        objP.Start();
        //!! Start the process !!// 
        objP.CloseMainWindow();
    }

and whatever I choose, process always will use default printer, no matter what value of pd.PrinterSettings.PrinterName is.

What's wrong with my code?

Upvotes: 4

Views: 8512

Answers (2)

MethodMan
MethodMan

Reputation: 18843

Try changing pd.PrinterSettings =new PrinterSettings(); to read something like this:

pd.PrinterSettings =new System.Drawing.Printing.PrinterSettings; 

By default when you create an instance of printer settings it returns the default printer name just an fyi... you can then try something like this

//sudu code
foreach(string strPrinter in PrinterSettings.InstalledPrinters)
{
 // or unless you know the name of the printer then skip this and assign it to the code above
}

Upvotes: 3

Jacob Proffitt
Jacob Proffitt

Reputation: 12768

You probably want to use "PrintTo" instead of "print" for the verb. You already set objP.FileName to the filename so there's no need to get complicated in the arguments. Pass the printer name alone there.

var filename = @"C:\Users\I\Desktop\test.doc"; 

PrintDialog pd = new PrintDialog(); 

pd.PrinterSettings =new PrinterSettings(); 

if (DialogResult.OK == pd.ShowDialog(this)) 
{ 
    Process objP = new Process(); 

    objP.StartInfo.FileName = filename;
    objP.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //Hide the window.
    objP.StartInfo.Verb ="PrintTo";
    objP.StartInfo.Arguments = pd.PrinterSettings.PrinterName;
    objP.StartInfo.CreateNoWindow = false; 
    //true;//!! Don't create a Window.  

    objP.Start(); 
    //!! Start the process !!//  

    objP.CloseMainWindow(); 
}

Upvotes: 4

Related Questions