0

プリンタジョブを傍受して、印刷ジョブの属性を変更しようとしています。印刷ジョブを傍受して、それに関する情報を取得できます。私はそのためにこの記事に従いました

http://www.codeproject.com/Questions/423178/printing-order-intercept-with-csharp

印刷ジョブの用紙サイズを変更したいのですが、そのためにこの記事を見つけました

http://social.msdn.microsoft.com/Forums/en/windowsxps/thread/8af6ba92-5d2c-444b-91f4-a8747739c1b7

しかし、問題は、クラスPrintCapabilitiesを作成できないことです。私は何かが足りないのですか?助けてください。

私の現在のコードは次のようになります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Printing;

namespace PrintJob
{
    class EvenWatch
    {
        private ManagementEventWatcher manEWatch;

        public EvenWatch(string host)
        {

            System.Management.ManagementScope oMs = new System.Management
            .ManagementScope(@"\\" + host + @"\root\cimv2");
            oMs.Connect();
            manEWatch = new ManagementEventWatcher(oMs, new EventQuery("SELECT * FROM    __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_PrintJob'"));



            manEWatch.EventArrived += new EventArrivedEventHandler(
            mewPrintJobs_EventArrived);
            manEWatch.Start();
        }

        static void mewPrintJobs_EventArrived(object sender, EventArrivedEventArgs e)
        {
            foreach (PropertyData prop in e.NewEvent.Properties)
            {
                string val = prop.Value == null ? "null" : prop.Value.ToString();

            }

            ManagementBaseObject printJob = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
            string v = "";
            foreach (PropertyData propp in printJob.Properties)
            {
                string name = propp.Name;
                string val = propp.Value == null ? "null" : propp.Value.ToString();
                val += "\n";
                v += name + ":" + val;

            }

            PrintQueue printerSpooler = null;
            printerSpooler = new PrintQueue(new PrintServer(), "EPSON LQ-300+ /II ESC/P 2");
            PrintJobSettings printJobSetting = printerSpooler.CurrentJobSettings;
            string desc = printJobSetting.Description;



            //printerSpooler.CurrentJobSettings.CurrentPrintTicket

            Console.WriteLine("-------");
            Console.WriteLine(v);
        }
    }
}
4

1 に答える 1

1

私は実際に答えを見つけました。4.0を使用している場合は、魔法が発生したときにReachFramework.dllも参照する必要があります:)

于 2013-02-27T10:51:03.880 に答える