110,545
社区成员
发帖
与我相关
我的任务
分享
#region 引用 WindowsAPI
//引用API声明
[StructLayout(LayoutKind.Sequential)]
private struct OVERLAPPED
{
int Internal;
int InternalHigh;
int Offset;
int OffSetHigh;
int hEvent;
}
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile
(
string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare,
int securityattributes,
[MarshalAs(UnmanagedType.U4)]FileMode creationdisposition,
int flags,
IntPtr templat
);
[DllImport("kernel32.dll",SetLastError=true)]
private static extern bool WriteFile
(
int hFile,
byte[] lpBuffer,
int nNumberOfBytesToWrite,
out int lpNumberOfBytesWritten,
out OVERLAPPED lpOverlapped
);
[DllImport("Kernel32.dll")]
static extern bool CloseHandle(IntPtr hObject);
#endregion
//C#LPT端口打印类的操作
public IntPtr iHandle;
public string WritetoLpt(string prnPort, string BarCode)
{
SafeFileHandle sfh = null;
IntPtr iHandle = CreateFile(prnPort, FileAccess.ReadWrite, FileShare.ReadWrite, 0, FileMode.OpenOrCreate, 0, IntPtr.Zero);
if (iHandle.ToInt32() == -1)
{
return "Faile To printer";
}
else
{
//OVERLAPPED x = new OVERLAPPED();
//int i = 0;
//byte[] mystring = System.Text.Encoding.Default.GetBytes(BarCode);
//WriteFile(iHandle, mystring, mystring.Length, ref i, ref x);
sfh = new SafeFileHandle(iHandle, true);
FileStream fs = new FileStream(sfh, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
sw.Write(BarCode);
sw.Flush();//运行到这里的时候就卡住很长一段时间,然后会有个“设备未连接”的错误
fs.Flush();
sw.Close();
fs.Close();
CloseHandle(iHandle);
return "";
}
}