1
我正在尝试使用DeviceCapabilities
获取网络打印机支持的页面大小列表,并且完全与sPort
参数混淆。网络打印机的DeviceCapabilities
DWORD nPapersCount = ::DeviceCapabilities(sPrinter, sPort, DC_PAPERS, nullptr, nullptr);
任何人都可以建议我,我应该在网络打印机的sPort中提供什么,以及我如何可靠地获得该端口?
作为实验,我尝试过格式为“\\ Share”的PC名称,其端口“\\ Share \ LPT1”,只是“LPT1”,没有运气。
此外,我找到了EnumPorts
函数,所以我可以获得远程服务器上的打印机端口列表,但我不知道如何处理端口列表(如果服务器上有多个打印机)。
typedef struct _PORT_INFO_2 { LPTSTR pPortName; LPTSTR pMonitorName; LPTSTR pDescription; DWORD fPortType; DWORD Reserved; } PORT_INFO_2, *PPORT_INFO_2;
不要忘记释放'hDevMode','hDevNames'和'hDC'处理在'PRINTDLG '结构完成使用后。为此,使用'GlobalFree()'和'DeleteDC()'。但是你确定你需要'PD_RETURNDC'吗?你没有使用'hDC'做任何事情。 –
@RemyLebeau没有分配,所以不需要'GlobalFree'。也没有DC。 'PD_RETURNDC'是不必要的,我删除它。 –
['PRINTDLG'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646843.aspx)文档明确指出,如果hDevMode和hDevNames为NULL,则分配它们输入。它没有说的是,“PD_RETURNDEFAULT”是否改变了这种行为。它所说的是,它们被设置为处理系统默认打印机。他们是否被分配?或者他们是静态的,由操作系统所拥有?文件没有说这种或那种。但大多数'PD_RETURNDEFAULT'示例我都可以找到调用'GlobalFree()'。 –