aardio写的监控新增文档,自动打印
编辑时间:2018-06-30 作者:loop 浏览量:3656 来源:aardio论坛

转自aardio论坛,原文由loop发表,链接地址:http://bbs.aardio.com/forum.php?mod=viewthread&tid=22591&page=1#pid86292


单位有一台打印机,win10无法安装驱动。只能通过XP打印文件。

根据这个需求,只需将XP的一个目录共享,然后写一个程序监控目录新增加的文档,来操作打印机自动打印。

这段代码用到了目录监控、com操作word接口、线程信号来完成需求。
path变量是监控的目录地址,我这里使用的是c:\printTemp,日志目录为c:\printLog,这个需要更改一下。

import win.ui;
/*DSG{{*/
var winform = win.form(text="打印";right=589;bottom=349;parent=...)
winform.add(
editChange={cls="edit";left=23;top=21;right=564;bottom=322;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}
)
/*}}*/

import process; 
import fsys.dirWatcher;
import fsys.dlg;
import win.util.tray
//import console;; 
import fsys.file;
import thread.event;
import fsys
import thread.semaphore
import thread.manage
import win.ui.menu;




path = "C:\printTemp";
semaphore = thread.semaphore(,1);
manage = thread.manage()

winform.popmenu = win.ui.popmenu(winform);//创建弹出菜单
winform.popmenu.add('退出',function(id){ winform.close()})        

popup = win.util.tray(winform);
popup.tip = "打印监控";
popup.message = 0xACCF/*_WM_TRAYMESSAGE*/;

//console.open()

//创建监视线程
winform.thrdWatcher = fsys.dirWatcher.thread(
        function(filename,action,actionText){ 

                if(action === 1 && string.indexOf(filename,'.') && !string.startWith(filename,'~')){

                        var pos = string.lastIndexOf(filename,".")
                        var ext = string.sub(filename,pos+1)

                        
                        if(ext === 'doc' || ext=== 'docx'){
                                printWord(path+""+filename)
                                winform.editChange.appendText("打印word:",filename,'\n')
                        }
                        
                        if(ext === 'xls' || ext=== 'xlsx'){
                                printExcel(path+""+filename)
                                winform.editChange.appendText("打印excel:",filename,'\n')
                        }
                        
                        if(ext=== 'pdf'){
                                printPdf(path+""+filename)
                                winform.editChange.appendText("打印pdf:",filename,'\n')
                                
                        }
                }
                
        }, path); 
                        
//process.explore(path)


function printWord(file){
        manage.create(semaphoreWord,semaphore,file)
}
    
function printExcel(file){
        manage.create(semaphoreExcel,semaphore,file)
 }
 
function printPdf(file){
    manage.create(semaphorePdf,semaphore,file)
 }
 
 function semaphorePdf(semaphore,file){
    //import console; 
        import com
        import fsys
        
        //console.log('我在等待机会\n') sleep(1000)
        semaphore.wait();
        //console.log('正在打印'+ file +'\n')
        
        pdf = com.CreateObject("Wscript.Shell")
        pdf.run("""C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe"" /p /h "+""""+file+"""",0,false)
        sleep(15000)        
        pdf.Run("cmd.exe /C taskkill /f /im AcroRd32.exe",0,true)
        sleep(500)                        
        //console.log('完成打印.\n')
        sleep(500)
        fsys.delete(file)
        semaphore.release()
 }

function semaphoreExcel(semaphore,file){
    //import console; 
        import com
        import fsys
        
        //console.log('我在等待机会\n') sleep(1000)
        semaphore.wait();
        //console.log('正在打印'+ file +'\n')
        
        excel = com.CreateObject("Excel.Application")
        excel.Workbooks.open(file)
        excel.ActiveSheet.PrintOut()
        sleep(15000)
        excel.DisplayAlerts= false;
        excel.application.quit();        
        //console.log('完成打印.\n')
        sleep(500)
        fsys.delete(file)
        semaphore.release()

 }

function semaphoreWord(semaphore,file){
    //import console; 
        import com
        import fsys
        
        
        //console.log('我在等待机会\n') sleep(1000)
        semaphore.wait();
        //console.log('正在打印'+ file +'\n')
        
           word = com.CreateObject("Word.Application")
        word.Documents.Open(file)
        word.printout()
        sleep(15000)
        word.quit(false)                
        //console.log('完成打印.\n')
        sleep(500)
        fsys.delete(file)
        semaphore.release()
        
 }

 
import fsys.ini;
import time.performance

function writelog(logfile,logs){
        result="";
        try{
            
        tempfile = ..io.open(logfile,"a+") //文件名为空则创建可读写的临时文件
        
        //获取当前时间
        t_now=..time.now();
        //tm = time();
        t_now.format="%Y年%m月%d日 %H:%M:%S ";
        t_now = tostring(t_now);
        logs=t_now+'\n'+logs;
        tempfile.write(logs,'-----------------------------------------------\n');
        tempfile.close();
        result=t_now;
        }
        catch(e){
                result=e;
                return        result;
        }
        return        result;
}



winform.wndproc = function(hwnd,message,wParam,lParam){

        select(message) {//判断消息类型
                case( 0xACCF/*_WM_TRAYMESSAGE*/ ) { //托盘图标消息
                
                    if( lParam = 0x205/*_WM_RBUTTONUP*/ ){
                            import mouse;
                            x,y = mouse.getPos();
                            //弹出托盘菜单以前,一定要前置主窗口中,不然不点击菜单不会消失
                            win.setForeground(winform.hwnd)
                            winform.popmenu.popup( x,y,true )
                    }
                    if( lParam = 0x203/*_WM_LBUTTONDBLCLK*/ ){
                    if(win.isVisible(winform.hwnd)){
                    winform.show(false)
                    }
                    else {
                    winform.show(true)
                    }
                    
                    }
                    
                }
                case( 0x112/*_WM_SYSCOMMAND*/ ){ //系统命令消息
                        if( wParam == 0xF060/*_SC_CLOSE*/ || wParam == 0xF020 ){ //用户点击了关闭按钮
                    winform.show(false); //隐藏窗口
                    return true;//阻击默认消息传递,取消最小化过程
                        }
                } 
                
        }
}


//彻底退出,包括WEB
winform.onClose = function(hwnd,message,wParam,lParam){

                popup.delete();
                winform.thrdWatcher.close(); //停止监视文件
                        
                if(winform.editChange.text !==""){                
                        t_now=..time.now();
                t_now.format="%Y年%m月%d日";
                t_now = tostring(t_now);
                        writelog("c:\printLog"+t_now+".txt",winform.editChange.text)
                        }        
            win.quitMessage();
    
}



                        
//process.explore(path)
     
winform.show(false) 
win.loopMessage();


来说两句吧