c++ - 什么是XcvPort(在OpenPrinter函数中使用)

标签 c++ winapi

我正在使用 OpenPrinter 函数,该函数的第一个参数称为“pPrinterName” 这就是 MSDN 描述:

[in] Pointer to a null-terminated string that specifies the name of the printer or print server, the printer object, the XcvMonitor, or the XcvPort. For a printer object use: PrinterName,Job xxxx. For an XcvMonitor, use: ServerName,XcvMonitor MonitorName. For an XcvPort, use: ServerName,XcvPort PortName.

显然我对粗体部分感兴趣。 XcvPort 到底是什么?我知道这似乎是一个懒人的问题,但我真的找不到有关这个概念的信息。如果我想在 ABC 端口上打开打印机,我应该写: “\\MySrever,XcvPort ABC”?

最佳答案

非常接近,只需添加一个反斜杠:

[DllImport("winspool.drv", EntryPoint = "OpenPrinter", SetLastError = true)]
    internal static extern bool OpenPrinter(string pPrinterName, ref IntPtr phPrinter, PRINTER_DEFAULTS pDefault);

[DllImport("winspool.drv", EntryPoint = "ClosePrinter", SetLastError = true)]
    internal static extern int ClosePrinter(IntPtr hPrinter);

public struct OpenPrinterAccessCodes
{
    public const int DELETE = 0x10000; // DELETE - Allowed to delete printers
    public const int READ_CONTROL = 0x20000; // READ_CONTROL - Allowed to read printer information
    public const int WRITE_DAC = 0x40000; // WRITE_DAC - Allowed to write device access control info
    public const int WRITE_OWNER = 0x80000; // WRITE_OWNER - Allowed to change the object owner
    public const int SERVER_ACCESS_ADMINISTER = 0x1;
    public const int SERVER_ACCESS_ENUMERATE = 0x2;
    public const int PRINTER_ACCESS_ADMINISTER = 0x4;
    public const int PRINTER_ACCESS_USE = 0x8;
    public const int STANDARD_RIGHTS_REQUIRED = 0xF0000;
    public const int PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE);
    public const int SERVER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE);

    public const int MAX_PORTNAME_LEN = 64;
    public const int MAX_NETWORKNAME_LEN = 49;
    public const int MAX_SNMP_COMMUNITY_STR_LEN = 33;
    public const int MAX_QUEUENAME_LEN = 33;
    public const int MAX_IPADDR_STR_LEN = 16;

    public const int ERROR_INSUFFICIENT_BUFFER = 122;
    public const int ERROR_INVALID_FLAGS = 1004;
}
var def = new PRINTER_DEFAULTS { pDatatype = null, pDevMode = IntPtr.Zero, DesiredAccess = OpenPrinterAccessCodes.SERVER_ACCESS_ADMINISTER };
var hPrinter = IntPtr.Zero;
OpenPrinter(@"\\MyServer\,XcvPort ABC", ref hPrinter, def)
ClosePrinter(hPrinter);

关于c++ - 什么是XcvPort(在OpenPrinter函数中使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12591358/

相关文章:

c++ - 在此特定情况下使用 unique_ptr 的 char 数组

c++ - C++ 中的共享字符串?

c++ - Win32 程序的编译器?

windows - 如何枚举另一个用户 session 的打开窗口 (~EnumWindows)

C++ 文件系统迭代器无效参数

C++:控制台窗口有奇怪的边框..?

c++ - 错误 C2248 : 'Gdiplus::Bitmap::Bitmap' : cannot access private member declared in class 'Gdiplus::Bitmap'

c++常量函数声明变体?

c++ - 如何知道 LoadLibrary 加载了哪些依赖项?

c++ - "undeclared identifier"实际声明