office2003自带的虚拟打印机.用的不是LPT 是 虚拟接口 Local Port [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)] private static extern IntPtr CreateFile ( string FileName, // file name uint DesiredAccess, // access mode uint ShareMode, // share mode uint SecurityAttributes, // Security Attributes uint CreationDisposition, // how to create uint FlagsAndAttributes, // file attributes int hTemplateFile // handle to template file );返回的 IntPtr 为-1 没有打开接口
to zgke: office2003自带的虚拟打印机.用的不是LPT 是 虚拟接口 Local Port ,这里可以修改端口,将其端口变为LPT1,问题是不知为什么不管LPT1这个端口有没有打印机,handle.IsInvalid总等于false,后来我在一个有真实打印机的机器上试了一下,也是这个样子!真是奇怪!
to littlegang 很有道理,我在试验的时候,将虚拟打印机端口设置成LPT1,然后向端口输出数据,虚拟打印机会出现正在打印信息,这个时候再调用CreateFile时,就出现handle.IsInvalid=true,如果把打印任务清理了,handle.IsInvalid就会又变成false了.
private static extern IntPtr CreateFile
(
string FileName, // file name
uint DesiredAccess, // access mode
uint ShareMode, // share mode
uint SecurityAttributes, // Security Attributes
uint CreationDisposition, // how to create
uint FlagsAndAttributes, // file attributes
int hTemplateFile // handle to template file
);返回的 IntPtr 为-1 没有打开接口
office2003自带的虚拟打印机.用的不是LPT 是 虚拟接口 Local Port ,这里可以修改端口,将其端口变为LPT1,问题是不知为什么不管LPT1这个端口有没有打印机,handle.IsInvalid总等于false,后来我在一个有真实打印机的机器上试了一下,也是这个样子!真是奇怪!
问问VC区的高手,做过这方面的应该比较多
但是你可以通过对端口进行状态查询,来大概获知是否连接了设备如果你是要打开指定打印机的,则可以通过调用打印方面的函数,直接取得某个名字的打印机的DC
很有道理,我在试验的时候,将虚拟打印机端口设置成LPT1,然后向端口输出数据,虚拟打印机会出现正在打印信息,这个时候再调用CreateFile时,就出现handle.IsInvalid=true,如果把打印任务清理了,handle.IsInvalid就会又变成false了.
相同的问题,解决了200分送上!!!!!
添加引用
System.Printing;System.Printing.LocalPrintServer.GetDefaultPrintQueue().QueuePort.Name
如果端口是LPT1,返回 "LPT1:"
如果是虚拟打印机,比如Microsoft XPS Document Writer,返回"XPSPort:"
可以在控制面板里的默认打印机的右键属性的端口里对对看
但是调用handle.DangerousGetHandle()就不等于-1 这是怎么回事