关于调用API函数CreateFile打开LPT1端口的问题!!急盼解答!
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const uint OPEN_EXISTING = 3;
[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
private static extern SafeFileHandle 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
);
private void button7_Click(object sender, EventArgs e)
{
try
{
SafeFileHandle handle = CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (handle.IsInvalid)
{
MessageBox.Show("没有连接打印机或者打印机端口不是LPT1", "提示窗口");
return;
}
handle.Close();
}
catch (Exception Error) { MessageBox.Show(Error.Message, "错误提示"); }
}
请问一下,为什么handle.IsInvalid不管LTP1端口有没有打印机,都是false呢?恳请各位解答!!!!我机器上只安装了office2003自带的虚拟打印机.
------解决方案--------------------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 没有打开接口
------解决方案--------------------
不管你接不接打印机,只要存在lpt端口,就可以打开
但是你可以通过对端口进行状态查询,来大概获知是否连接了设备
如果你是要打开指定打印机的,则可以通过调用打印方面的函数,直接取得某个名字的打印机的DC
------解决方案--------------------添加虚拟打印机Microsoft Office Document Image Writer
控制面板→打印机和传真→添加打印机→下一步→选择“连接到此计算机的本地打印机”→取消勾选“自动检测并安装即插即用打印机”→下一步→“使用以下端口”中选择“Microsoft Document Imaging Writer Port(Local)”→下一步→厂商选择“Generic”→打印机选择“Generic/Text Only”→点击“下一步”直到完成。
右击刚添加的打印机→属性→高级→“驱动程序”选“Microsoft Office Document Image Writer”→应用→常规→打印首选项→高级→“输出格式”选择“MDI”并勾选“压缩文档中的图像”→确定→确定。