检查是否连接了打印机

Blu*_*eft 5 c++ windows printing windows-mobile windows-ce

Windows(在Windows CE中有效)是否有办法检查打印机是否已连接并在C++中与LPT1通信?


[编辑]更多信息:

我们目前正在使用通用的Windows CE打印机驱动程序pcl.dll- 通过将其传入CreateDC,以获取打印机的DC.

我们无法调用PrintDlg()显示打印对话框,因为它"太复杂了",但我们也无法调用它,PD_RETURNDEFAULT因为我们不想使用默认打印机.所以,我们手动设置一个DEVMODE传递给的结构CreateDC.

我们有DC后,我们调用GetDeviceCaps()得到打印机的信息(如页面宽度,等等),然后StartPage()/ EndPage()/ ExtTextOut()打印.

但是,如果没有连接打印机,程序会冻结大约一分钟,然后再"中止/重试/失败?" 对话框(我不知道在这个过程中它冻结了什么点).当您尝试打印时,其他软件不会冻结,因此必须有一种方法可以防止这种情况......

rob*_*x44 2

我还建议枚举设备,但您可以尝试以下功能来查看它是否快速且优雅地挂起(我目前没有任何方法来测试此...):

CreateFile("LPT1:", 0, 0, NULL, OPEN_EXISTING, ...);
DeviceIOControl(HANDLE, IOCTL_PARALLEL_STATUS, ...);
Run Code Online (Sandbox Code Playgroud)

这可能比尝试使用 DC 打印更好地返回失败。如果有效,请不要忘记在打开 DC 进行打印之前对从 CreateFile 返回的 HANDLE 调用 CloseHandle()。