我正在尝试从连接到计算机的所有打印机中获取总页数。要做到这一点,我尝试不同的方式,但没有给我预期的结果:
现在我正在尝试一种不同的方法:有一种方法可以以编程方式将设备配置页面(例如: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);
}
}
我没有找到页数统计报告,只有通用信息。