gpt4 book ai didi

c++ - 如何创建新端口并将其分配给打印机

转载 作者:太空狗 更新时间:2023-10-29 22:53:42 26 4
gpt4 key购买 nike

我们有一个虚拟打印机(由第 3 方提供)被分配到一个无效的本地打印机端口。打印机总是本地的(我们不处理远程打印服务器或类似的东西)。我想创建一个新的本地端口(特定于我们的应用程序),然后将打印机配置为分配给该端口,而不是打印驱动程序安装程序选择的随机(通常是不正确的)端口。

我相信我需要使用 XcvData和/或 XcvDataPort功能来做到这一点,但我有点不知所措。

有没有人有关于如何进行的任何示例或指示?

我想我需要做以下事情:

  1. 检查以确保端口名称不存在(我可以为此使用 EnumPorts,但我不确定这是最好的方法,因为我还必须创建端口)
  2. 如果存在则创建端口名
  3. 更改打印机配置以使用新端口

卸载:

  1. 删除端口

最佳答案

哇,看起来那个难倒了每个人......经过大量挖掘,下面是如何做到这一点:

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()

干杯。

关于c++ - 如何创建新端口并将其分配给打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com