我们有一个虚拟打印机(由第三方提供)被分配给无效的本地打印机端口。打印机始终是本地的(我们不处理远程打印服务器或类似的东西)。我想创建一个新的本地端口(特定于我们的应用程序),然后将打印机配置为分配给该端口,而不是打印驱动程序安装程序选择的随机(通常是不正确的)端口。
我相信我需要使用XcvData and/or Xcv数据端口函数可以做到这一点,但我对如何做有点不知所措。
有人有关于如何进行的示例或指示吗?
我想我需要执行以下操作:
- 检查以确保端口名称尚不存在(我可能可以使用枚举端口为此,但我不确定这是最好的方法,因为我还必须创建端口)
- 创建端口名称(如果存在)
- 更改打印机配置以使用新端口
以及卸载:
- 删除端口
哇,看起来这个问题难倒了所有人......经过一番挖掘,以下是如何做到这一点:
DWORD CreatePort(LPWSTR portName)
{
HANDLE hPrinter;
PRINTER_DEFAULTS PrinterDefaults;
memset(&PrinterDefaults, 0, sizeof(PrinterDefaults));
PrinterDefaults.pDatatype = NULL;
PrinterDefaults.pDevMode = NULL;
PrinterDefaults.DesiredAccess = SERVER_ACCESS_ADMINISTER;
DWORD needed;
DWORD rslt;
if (!OpenPrinter(",XcvMonitor Local Port", &hPrinter, &PrinterDefaults))
return -1;
DWORD xcvresult= 0;
if (!XcvData(hPrinter, L"AddPort", (BYTE *)portName, (lstrlenW(portName) + 1)*2, NULL, 0, &needed, &xcvresult))
rslt= GetLastError();
if (!ClosePrinter(hPrinter))
rslt= GetLastError();
return rslt;
}
在给定打印机上设置端口相对简单 - OpenPrinter()、GetPrinter() 和 PRINTER_INFO_2、SetPrinter()、ClosePrinter()
Cheerio.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)