2009-04-03 12 views
13

私は最後にhow to print transformed XMLを探し出しましたが、ユーザーにプロンプ​​トを表示したり、IEウィンドウを表示したりせずに、今度はいくつかのコピーやその他のプリンタ設定を指定する必要があります。WebBrowserコントロールでプリンタの設定をプログラム的に変更するにはどうすればよいですか?

WebBrowserコントロールでプリンタの設定をプログラムで変更する方法はありますか?

問題のコード:

private static void PrintReport(string reportFilename) 
{ 
    WebBrowser browser = new WebBrowser(); 

    browser.DocumentCompleted += browser_DocumentCompleted; 

    browser.Navigate(reportFilename); 
} 

private static void browser_DocumentCompleted 
    (object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    WebBrowser browser = sender as WebBrowser; 

    if (null == browser) 
    { 
     return; 
    } 

    browser.Print(); 

    browser.Dispose(); 
} 

答えて

12

私はその場でレジストリを変更する(とバック他に何も影響しないようにそれらを変更すること)されたとの成功を持っていた唯一の方法。

CurrentUserの下にある「Software \ Microsoft \ Internet Explorer \ PageSetup」で、必要な設定を見つけることができます。

プリンタを変更するには、これを使用することができます:
using System.Management 

public static bool SetDefaultPrinter(string defaultPrinter) 
{ 
    using (ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer")) 
    { 
     using (ManagementObjectCollection objectCollection = objectSearcher.Get()) 
     { 
      foreach (ManagementObject mo in objectCollection) 
      { 
       if (string.Compare(mo["Name"].ToString(), defaultPrinter, true) == 0) 
       { 
        mo.InvokeMethod("SetDefaultPrinter", null, null); 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 


は部数として、あなたは常にwhileループでWebBrowser.Printを置くことができます。

+0

そのアプローチで問題にしていますか?どのレジストリキーを設定する必要がありますか? –

+0

ユーザーが[ページ設定]ダイアログの設定を変更できる場合は、その場でレジストリ設定を編集できます。私は鍵を見つけて答えに入れます。 –

+0

その方法でプリンタ名やコピー数を変更する方法はありますか?それは私が実際にやる必要があるものですが、レジストリキーには実際にヘッダー、フッター、マージンしかありません。もしそうでなければ、私は先に進み、あなたの答えを受け入れ、ユーザーにちょっとしたプリンタとコピー枚数を選んでもらう。 –

2

インターネットエクスプローラまたはウェブブラウザコントロールの設定を変更するには、レジストリ設定をコードで変更する必要があります。レジストリを使用して変更する必要があるオプションがたくさんある場合は、regedit.exeを使用してインターネットエクスプローラの他のキーを調べてください。

http://support.microsoft.com/kb/236777

PS:あなたは、インターネットエクスプローラのレジストリ設定にあなたのコードを経由して行った変更は、システム/ユーザーアカウントで存続することに注意すべきです。

+0

そのMSDNのページは残念です。これらのレジストリキーの実際の値は表示されません。それが明らかにそこに述べていることも全く真実ではない。グローバルスケールで変更することなく(そのうちのいくつかを)行う方法があります:https://support.microsoft.com/en-us/kb/267240 – c00000fd

0

これは私のためによく働いていたユーザーがロックダウンされている場合は非管理者は、しかし私は、.NET 3.5

this.webBrowser1.ShowPrintDialog(); 
+2

それはうまくいくでしょうが、必要なもの3年前、完全にプログラムでなければならず、ユーザーとのやりとりは必要ありませんでした。面白いのは、レポート印刷を行うためにすべてのコードを書くのに何ヶ月も費やしたときだった。 –

2
  string strKey = "Software\\Microsoft\\Internet Explorer\\PageSetup"; 
     bool bolWritable = true; 

     RegistryKey oKey = Registry.CurrentUser.OpenSubKey(strKey, bolWritable); 
     Console.Write(strKey); 

     if (stringToPrint.Contains("Nalog%20za%20sluzbeno%20putovanje_files")) 
     { 
      oKey.SetValue("margin_bottom", 15); 
      oKey.SetValue("margin_top", 0.19); 
     } 
     else 
     { 
      //Return onld walue 
      oKey.SetValue("margin_bottom", 0.75); 
      oKey.SetValue("margin_top", 0.75); 
     } 
+0

印刷する部数を変更する方法を(OPの要件に従って)表示できますか? –

関連する問題