2009-04-03 24 views
13

Cuối cùng tôi đã tìm ra how to print transformed XML mà không cần nhắc người dùng hoặc hiển thị cửa sổ IE, nhưng bây giờ tôi cần chỉ định một số bản sao và có thể là các cài đặt máy in khác.Làm cách nào để thay đổi cài đặt máy in theo chương trình bằng điều khiển WebBrowser?

Có cách nào để thay đổi cài đặt máy in theo chương trình trên điều khiển WebBrowser không?

Các mã trong câu hỏi:

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(); 
} 

Trả lời

12

Phương pháp duy nhất tôi đã thành công với được sửa đổi registry một cách nhanh chóng (và thay đổi chúng trở lại để không ảnh hưởng đến bất cứ điều gì khác).

Bạn có thể tìm thấy các cài đặt bạn cần tại "Software \ Microsoft \ Internet Explorer \ PageSetup" trong CurrentUser.

Để thay đổi máy in, bạn có thể sử dụng này:

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; 
} 


Đối với số lượng bản sao, bạn luôn có thể đặt WebBrowser.Print trong một vòng lặp while.

+0

Bất kỳ vấn đề với cách tiếp cận rằng nếu người dùng đang bị khóa xuống phi Admins? Tôi cần phải đặt khóa đăng ký nào? –

+0

Miễn là người dùng có thể thay đổi cài đặt trong hộp thoại Thiết lập trang, bạn có thể chỉnh sửa cài đặt đăng ký khi đang di chuyển. Tôi sẽ tìm chìa khóa và đặt chúng vào câu trả lời của tôi. –

+0

Bất kỳ cách nào để thay đổi tên máy in hoặc số lượng bản sao thông qua phương pháp đó? Đó là những gì tôi thực sự cần phải làm, nhưng các khóa registry chỉ thực sự có đầu trang, chân trang và lề. Nếu không, tôi sẽ tiếp tục và chấp nhận câu trả lời của bạn và buộc người dùng chỉ cần chọn máy in chết tiệt của họ và số lượng bản sao. –

2

bạn cần thay đổi cài đặt đăng ký qua mã để thay đổi cài đặt cho trình khám phá internet hoặc kiểm soát trình duyệt web. kiểm tra các liên kết dưới đây, nó mô tả làm thế nào để làm như vậy, cũng nếu có nhiều tùy chọn bạn cần phải thay đổi bằng cách sử dụng registry, sau đó sử dụng regedit.exe để tìm những gì các phím khác internet explorer có.

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

ps: bạn nên lưu ý rằng bất kỳ thay đổi bạn thực hiện thông qua mã của bạn để thiết lập registry internet explorer sẽ tồn tại trên hệ thống tài khoản/người dùng của bạn.

+0

Trang MSDN đó thật kinh khủng. Nó không hiển thị các giá trị thực tế cho các khóa registry đó. Ngoài ra những gì nó nói rõ ràng là không hoàn toàn đúng sự thật. Có một cách để làm (một số của nó) w/o thay đổi nó trên quy mô toàn cầu: https://support.microsoft.com/en-us/kb/267240 – c00000fd

0

này làm việc tốt cho tôi, tuy nhiên tôi trên NET 3,5

this.webBrowser1.ShowPrintDialog(); 
+2

Điều đó sẽ làm việc, quá, nhưng đối với những gì tôi cần 3 năm trước, nó phải hoàn toàn có lập trình, không có sự tương tác của người dùng. Phần buồn cười là khi tôi dành hàng tháng để viết tất cả các mã để in báo cáo, thì các bản in cao cấp quyết định không được phép, chỉ xem. –

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

Bạn có thể cho biết cách thay đổi số lượng bản in để in (theo các yêu cầu của OP) không? –

Các vấn đề liên quan