import io

io.open();//打开控制台
import win;
import win.guid;
import win.version;


//打开打印机获取打印机句柄
::Winspool := ..raw.loadDll("Winspool.drv")
OpenPrinter = ::Winspool.api("OpenPrinterA","int(string pPrinterName,int& phPrinter,struct& pDefault)")
//关闭打印机对象,手册中没有该声明,需要自行转换
::Winspool := ..raw.loadDll("Winspool.drv")
ClosePrinter = ::Winspool.api("ClosePrinter","int(int hPrinter)")
//根据打印机句柄对打印机进行控制
::Winspool := ..raw.loadDll("Winspool.drv")
SetPrinter = ::Winspool.api("SetPrinterA","int(int hPrinter,int Level,byte& pPrinter,int Command)")
//启动一个打印的文档
::Winspool := ..raw.loadDll("Winspool.drv")
StartDocPrinter = ::Winspool.api("StartDocPrinterA","int(int hPrinter,int Level,byte& pDocInfo)")
//启动一个打印的页面
::Winspool := ..raw.loadDll("Winspool.drv")
StartPagePrinter = ::Winspool.api("StartPagePrinter","int(int hPrinter)")
//往打印机中发送数据
::Winspool := ..raw.loadDll("Winspool.drv")
WritePrinter = ::Winspool.api("WritePrinter","int(int hPrinter,pointer& pBuf,int cdBuf,int& pcWritten)")
//指定打印中页的结尾
::Winspool := ..raw.loadDll("Winspool.drv")
EndPagePrinter = ::Winspool.api("EndPagePrinter","int(int hPrinter)")
//后台打印中指定一个文档的结束
::Winspool := ..raw.loadDll("Winspool.drv")
EndDocPrinter = ::Winspool.api("EndDocPrinter","int(int hPrinter)")

//获取打印机的作业列表
::Winspool := ..raw.loadDll("Winspool.drv")
EnumJobs = ::Winspool.api("EnumJobsA","int(int hPrinter,int FirstJob,int NoJobs,int Level,byte& pJob,int cdBuf,int& pcbNeeded,int& pcReturned)")

var PRINTER_DEFAULTS= class{
string pDatatype;
int pDevMode;
int DesiredAccess;
}

var sttemp =PRINTER_DEFAULTS();//注意这个赋值方法

sttemp.DesiredAccess = 0x4;//表示要配置打印机为允许配置,否则调用SetPrinter总是失败
//stemp = raw.convert(,PRINTER_DEFAULTS());
//开启
var dwError,dwPrinter,stPrintInfo = OpenPrinter("\\192.168.17.132\ImagePrinter_zxq",0,sttemp)

if(dwError == 0x0/*_ERROR_SUCCESS*/){
error("OpenPrinter ERROR",dwError)
}else{
io.print('Open Sucess',dwPrinter)
}
io.print('')

//var pList = WLAN_INTERFACE_INFO_LIST()
//这句最重要将pPointer2转换为WLAN_INTERFACE_INFO_LIST类型,并返回其结果
/*
pIfList2 = raw.convert(stPrintInfo,PRINTER_DEFAULTS())//将指针或者变量pPointer2转换为结构体WLAN_INTERFACE_INFO_LIST
io.print("打印机类型",pIfList2.pDatatype)
io.print("打印机地址",pIfList2.pDevMode);
io.print("打印机安全值",pIfList2.DesiredAccess);
*/
io.print("打印机句柄",dwPrinter)
io.print("")

/*
var dwError =EnumJobs(dwPrinter,0,5,1,0,0,20480000,0)
if(dwError == 0)
{
io.print(..lasterr());
}else{
io.print(dwError,' Open Sucess')
}
*/

//对打印机进行控制,0x3表示删除正在打印的内容
/*
var dwError = SetPrinter(dwPrinter,0,0,0x3);
if(dwError == 0){
io.print(..lasterr());
}else{
io.print(dwError,'Open Sucess')
}
*/
var DOCINFO= class{ //12 个字节
int cbSize;
string lpszDocName;
string lpszOutput;
}

var DOC_INFO_1=class {
string pDocName;
string pOutputFile;
string pDatatype;
}

var MYARR =class{
byte buffer[1024]={}
};

var di = DOC_INFO_1();
di.pDocName="testPrintDocIn"
di.pOutputFile="testPrintDocOout" //定义打印出来的文件的内容
di.pDataType="RAW"

//演示如何发送一个结构体
//var value = ..raw.convert(di,MYARR())
//var value=raw.convert(di, {BYTE len[1024]}).len

class

io.print(value)
//var ret = StartDocPrinter(dwPrinter,1,1)//第三个参数不知道怎么传输过去
/*
if(ret == 0) //0---Fail
{
io.print(..lasterr());
}
else {
ret = StartPagePrinter(dwPrinter);
if(ret != 0)
{
var pvalue="12345"
ret = WritePrinter(dwPrinter,topointer(pvalue),5,0);
EndPagePrinter(dwPrinter);
}
EndDocPrinter(dwPrinter);
}
*/

io.print('')
execute("pause") //按任意键继续

ClosePrinter(dwPrinter);//关闭打印机对象
io.close();//关闭控制台

posted on 2013-05-30 19:41  蚂蚁跳楼  阅读(359)  评论(0)    收藏  举报