0

Internet Explorer を介してフォルダ内のいくつかの HTML ファイルをデフォルトのプリンタに出力するための短いコンソール コードをまとめようとしています。http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspxから次のコードを見つけました。これは私のニーズにほぼ合っているようです。

いくつかの変更を加えましたが、私のプログラミング スキルは非常に限られています。構文が正しいことを確認するための助けと、Internet Explorer を介してサイレント モードで印刷する方法を教えてくれる人を探しています。

どんな助けでも大歓迎です...

using System
using System.IO

// How much deep to scan. (of course you can also pass it to the method)
const int HowDeepToScan=4; 

public static void ProcessDir(string sourceDir, int recursionLvl) 
{
if (recursionLvl<=HowDeepToScan)
{
// Process the list of files found in the directory. 
string [] fileEntries = Directory.GetFiles(@"C:\fileDump\", "*.html");  
foreach(string fileName in fileEntries)
{
   // do something with fileName
   System.Diagnostics.Process.Start(fileName);
}

// Recurse into subdirectories of this directory.
string [] subdirEntries = Directory.GetDirectories((@"C:\fileDump);
foreach(string subdir in subdirEntries)
   // Do not iterate through reparse points
   if ((File.GetAttributes(subdir) &
        FileAttributes.ReparsePoint) !=
            FileAttributes.ReparsePoint)

        ProcessDir(subdir,recursionLvl+1);
}
}
4

2 に答える 2

1

解決すべき同様の(ただし異なる)問題があり、使用したコードが役立つ場合があります。

私の問題の背景

ファイル (この場合は .MHTML ファイル) を開くために使用されると、実際に IE で開き、ページをすぐに印刷して IE を閉じるプログラムを作成します。

コード

 public partial class MainWindow : Window
    {
        const int PRINT_WAITFORCOMPLETION = 2;
        public MainWindow()
        {
            InitializeComponent();

            if (Application.Current.Properties["ArgFileName"] != null)
            {
                string fname = Application.Current.Properties["ArgFileName"].ToString();
                if (String.IsNullOrEmpty(fname))
                {
                    fileLabel.Content = "No File Specified";
                }
                else
                {
                    fileLabel.Content = fname;
                    SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
                    IE.DocumentComplete +=new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                    IE.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(IE_PrintTemplateTeardown);
                    IE.Visible = true;
                    IE.Navigate2(fname);    
                }      
            }
        }

       void IE_PrintTemplateTeardown(object pDisp)
        {
            if (pDisp is SHDocVw.InternetExplorer)
            {
                SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
                IE.Quit();
                System.Environment.Exit(0);
            }
        }

       void IE_DocumentComplete(object pDisp, ref object URL)
        {
            if (pDisp is SHDocVw.InternetExplorer)
            {
                SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
                IE.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 2);

            }
        }
    }

ノート

これをファイル ループに組み込んだら、IE ウィンドウが表示されないように変更IE.Visible = true;する必要があります。IE.Visible = false;

于 2012-11-21T15:45:22.830 に答える
0

アイデアは、プログラムを単純なコマンド ライン プログラムにすることです。

ファイルを循環する少し簡単な方法を見つけました。コードは正しく追加されていると思います。しかし、私が得ている2つのエラーから、私は何かを見落としているように見えると思います.何か提案はありますか?

理想的には、プログラムを単一のクラスのままにしたいと考えています。

私のエラーは次のとおりです。

'Bulk_Pdf.Main.Main(string)': 静的コンストラクターはパラメーターなしである必要があります (CS0132) - C:\Users\Ben\Desktop\bulkPrint_pdf.cs:16,18

'Bulk_Pdf.Main.Main(string)': アクセス修飾子は静的コンストラクターでは許可されていません (CS0515) - C:\Users\Ben\Desktop\bulkPrint_pdf.cs:16,18

何か提案はありますか?

using System;
using System.IO;

namespace HTML_Print
{
class Main
{
    private static Main(string dirPath)
    {

        // Define Working Directory
        DirectoryInfo dir = new DirectoryInfo(@"C:\fileDump");

        // Define File Type
        foreach (FileInfo finfo in dir.GetFiles("*.html"))

        // Open IE Explorer and Print
        if (Application.Current.Properties["finfo"] != null)
        {
            string fname = Application.Current.Properties["finfo"].ToString();
            if (String.IsNullOrEmpty(fname))
            {
                fileLabel.Content = "No File Specified";
            }
            else
            {
                fileLabel.Content = fname;
                SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
                IE.DocumentComplete +=new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
                IE.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(IE_PrintTemplateTeardown);
                IE.Visible = true;
                IE.Navigate2(fname);    
            }      
        }
    }

   void IE_PrintTemplateTeardown(object pDisp)
    {
        if (pDisp is SHDocVw.InternetExplorer)
        {
            SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
            IE.Quit();
            System.Environment.Exit(0);
        }
    }

   void IE_DocumentComplete(object pDisp, ref object URL)
    {
        if (pDisp is SHDocVw.InternetExplorer)
        {
            SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp;               
            IE.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 2);

        }
    }
}


}
于 2012-11-22T10:43:45.323 に答える