在Windows

时间:2015-07-01 07:36:34

标签: c# c++ printing

我正在尝试从连接到计算机的所有打印机中获取总页数。要做到这一点,我尝试不同的方式,但没有给我预期的结果:

  • SNMP:非常有用,但不可能在本地打印机上使用它。
  • Win32_printer:无法获取网络打印机的总页数,而且更多本地打印机不会存储页数。
  • printui.dll:不支持总页数。

现在我正在尝试一种不同的方法:有一种方法可以以编程方式将设备配置页面(例如:THAT)打印到文件中吗?您可以将打印机连接到PC上进行打印,以便将其存储在某种数字格式的某个地方。我在互联网上找到的唯一的东西是Bidi Communication,但我找不到任何可以帮助我的文档...我不需要特定的编程语言,但如果可能的话我会优先考虑c#,c ++或java。

@SonerGönül:好的,所以我选择c#只是因为我用来编写snmp测试的语言,但其他语言的例子很受欢迎:

SNMP:

SNMP snmp = new SNMP();
// Aprire la connessione verso la stampante
try
{
   snmp.Open(IPAddressOfPrinter, CommunityString, Retries, TimeoutInMS);
} catch {
MessageBox.Show("Unable to reach the printer");
}
//Sides Counter
lblSides.Text = snmp.Get(".1.3.6.1.2.1.43.10.2.1.4.1.1").ToString();
rtbLog.Text += "Printer Counter: " + lblSides.Text;
rtbLog.Text += " Sides.\n";

该代码给出了打印机打印的边数,没关系,但需要打印机是网络打印机,在USB打印机上我不能使用SNMP。

Win32_Printer:

ConnectionOptions options = new ConnectionOptions();
ManagementScope scope = new ManagementScope(@"\\" + System.Environment.MachineName.ToString() + @"\root\cimv2"); //yeah... i know @"root\cimv2" is enought, i notice only now...
    scope.Connect();
    ObjectQuery PRNquery = new ObjectQuery("SELECT * FROM Win32_Printer");
    ManagementObjectSearcher PRNsearcher = new ManagementObjectSearcher(scope, PRNquery);
    ManagementObjectCollection PRNqueryCollection = PRNsearcher.Get();
    foreach (ManagementObject m in PRNqueryCollection)
    {
       MessageBox.Show(m["JobCountSinceLastReset"].Tostring());
       //But the result is Zero or random error the 90% of the times.

    }

priuntui.dll:

如果我发布

rundll32 printui.dll PrintUIEntry /something

或尝试使用以下内容导出报告:

public static class PrintTest
{
    [DllImport("printui.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    private static extern void PrintUIEntryW(IntPtr hwnd,
        IntPtr hinst, string lpszCmdLine, int nCmdShow);
    public static void Print(string printerName)
    {
        var printParams = string.Format(@"/f C:\test.dat /Xg /n{0}", printerName);
        PrintUIEntryW(IntPtr.Zero, IntPtr.Zero, printParams, 0);
    }
}

我没有找到页数统计报告,只有通用信息。

0 个答案:

没有答案