在c/s模式下我是直接通过以下类跟打印机的lpt1口通讯的,但是当时也没有想到选择或者远程打印机的问题class LPTControl { [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int Offset; int OffSetHigh; int hEvent; } [DllImport("kernel32.dll")] private static extern int CreateFile( string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile ); [DllImport("kernel32.dll")] private static extern bool WriteFile( int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, out int lpNumberOfBytesWritten, out OVERLAPPED lpOverlapped ); [DllImport("kernel32.dll")] private static extern bool CloseHandle( int hObject ); private int iHandle; public bool Open() { iHandle = CreateFile("lpt1", 0x40000000, 0, 0, 3, 0, 0); if (iHandle != -1) { return true; } else { return false; } } public bool Write(String Mystring) { if (iHandle != -1) { int i; OVERLAPPED x; byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring); return WriteFile(iHandle, mybyte, mybyte.Length, out i, out x); } else { throw new Exception("The LPT port doesn't open!"); } } public bool Close() { return CloseHandle(iHandle); }
public string setType { get{ return type;} set { if (value.Length>20) type=value.Substring(1,20); else type=value;} } public string setPublisher { get{ return publishOperator;} set { if (value.Length>20) publishOperator=value.Substring(1,20); else publishOperator=value;} }
<script language=javascript>
window.print();
</script>
1.找到指定的打印机;
2.通过lpt1口向此打印机传数据过去现在第二步我知道怎么弄,就是不知道怎么样让web程序找到用户端本地的打印机
{
[StructLayout(LayoutKind.Sequential)]
private struct OVERLAPPED
{
int Internal;
int InternalHigh;
int Offset;
int OffSetHigh;
int hEvent;
} [DllImport("kernel32.dll")]
private static extern int CreateFile(
string lpFileName,
uint dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile
);
[DllImport("kernel32.dll")]
private static extern bool WriteFile(
int hFile,
byte[] lpBuffer,
int nNumberOfBytesToWrite,
out int lpNumberOfBytesWritten,
out OVERLAPPED lpOverlapped
);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(
int hObject
); private int iHandle;
public bool Open()
{
iHandle = CreateFile("lpt1", 0x40000000, 0, 0, 3, 0, 0);
if (iHandle != -1)
{
return true;
}
else
{
return false;
} }
public bool Write(String Mystring)
{
if (iHandle != -1)
{
int i;
OVERLAPPED x;
byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
return WriteFile(iHandle, mybyte, mybyte.Length, out i, out x);
}
else
{
throw new Exception("The LPT port doesn't open!");
}
}
public bool Close()
{
return CloseHandle(iHandle);
}
{
get{ return type;}
set
{
if (value.Length>20)
type=value.Substring(1,20);
else
type=value;}
}
public string setPublisher
{
get{ return publishOperator;}
set
{
if (value.Length>20)
publishOperator=value.Substring(1,20);
else
publishOperator=value;}
}
不是自己的电脑的话,可以说:不行。我绝对不会打开那么大的权限。
--------------------------------------------------------------
程序,犹如人生。
我做了一个条码打印的web程序,仓库方面运行客户端用来生成条码并且打印出来,条码打印机在他们那边,使用什么方法可以让那个打印机打印出来条码?p.s补充一下斑马机打印原理: 打印机识别一个string变量作为命令,所以要使他工作需要通过lpt1口向他传一个字符变量到它的内存中.不过这个我已经可以搞定