setprinter仅可以设置文件型的输出。
下面的过程检测当前打印机输出端口,仅可以检测系统设置的端口,
在nt中,如果运行中在“控制面板/打印机”改变打印机的输出端口
也能检测到,但是在95下面行不行就不知道。
另外,如果用你自己的程序里面用 Printer.SetPrinter 设置的端口,
下面的过程也是不能检测到的。
判断严格一点,有一点不符合就退出。(比如可以指定 LPT1 ,其他端口
都禁止)
var
h:THandle;
info
ointer;
n
WORD;
s1,s2,s3:array[0..1024]of char;
hmem
WORD;
begin
printer.GetPrinter(s1,s2,s3,hmem);
//这里判断一下s3(大小写无关)
if not OpenPrinter(s1,h,nil) then
RaiseLastWin32Error();
GetPrinter(h,2,@info,0,@n);
if( GetLastError()=122 )then
GetMem(info,n)
else
RaiseLastWin32Error();
if(not GetPrinter(h,2,info,n,@n))then
RaiseLastWin32Error();
ShowMessage(PRINTER_INFO_2(info^).pPortName);
//这里判断一下PRINTER_INFO_2(info^).pPortName
end;
还有一个问题,
nt的 打印机属性/调度 有个选择:“打印完后保留文档”
如果选中该项,(即使是输出到LPT1),文档在打印完后
并不会被删除,还留在那里,可以不通过程序再打几次,
你怎么解决? 95/98不知道是否有这个功能,以后总会升级
到win2000的,win2000肯定有这个功能啦.
你怎么办?
还有啊,要是 LPT1 是虚拟的端口,数据被那个虚拟端口程序截取了,
你怎么办?