直接操作打印机

来源:互联网 发布:淘宝手机端模板多少钱 编辑:程序博客网 时间:2024/05/06 01:07

QZZ   =   Chr(27)   &   Chr(74)           '前进纸  
    HZZ   =   Chr(27)   &   Chr(106)         '后进纸  
    DZT   =   Chr(28)   &   Chr(38)   &   _  
                Chr(27)   &   Chr(43)   &   Chr(100)   &   _  
                Chr(28)   &   Chr(87)   &   Chr(0)         '大字体  
    XZT   =   Chr(28)   &   Chr(46)   &   _  
                Chr(27)   &   Chr(77)   &   _  
                Chr(27)   &   Chr(15)   &   _  
                Chr(27)   &   Chr(107)   &   Chr(0)       '小字体  
    CR   =   Chr(13)   &   Chr(10)  
   
  Tstr   =   Chr(27)   &   Chr(64)   &   _                         'Tstr代表要打印的字符窜  
                                Chr(27)   &   Chr(74)   &   Chr(23)   &   _  
                                Chr(28)   &   Chr(38)   &   _  
                                Chr(27)   &   Chr(43)   &   Chr(100)   &   _  
                                Chr(28)   &   Chr(87)   &   Chr(0)   &   _  
                                String(15,   "   ")   &   S1   &   S2   &   CR   &   _  
                                Chr(27)   &   Chr(74)   &   Chr(5)   &   _  
                                String(15,   "   ")   &   S3   &   S4   &   CR   &   _  
                                Chr(27)   &   Chr(74)   &   Chr(7)   &   _  
                                String(15,   "   ")   &   S5   &   S6   &   CR   &   _  
                                CR   &   CR   &   CR   &   _  
                                Chr(27)   &   Chr(106)   &   Chr(20)  
   
                                Call   Print_axis("Epson   LQ-300K",   Tstr)  
   
                 
  '以下写在模块里  
  Private   Type   DOCINFO  
      pDocName   As   String  
      pOutputFile   As   String  
      pDatatype   As   String  
  End   Type  
             
  Dim   CR   As   String  
               
  Private   Declare   Function   ClosePrinter   Lib   "winspool.drv"   (ByVal   _  
        hPrinter   As   Long)   As   Long  
  Private   Declare   Function   EndDocPrinter   Lib   "winspool.drv"   (ByVal   _  
        hPrinter   As   Long)   As   Long  
  Private   Declare   Function   EndPagePrinter   Lib   "winspool.drv"   (ByVal   _  
        hPrinter   As   Long)   As   Long  
  Private   Declare   Function   OpenPrinter   Lib   "winspool.drv"   Alias   _  
      "OpenPrinterA"   (ByVal   pPrinterName   As   String,   phPrinter   As   Long,   _  
      ByVal   pDefault   As   Long)   As   Long  
  Private   Declare   Function   StartDocPrinter   Lib   "winspool.drv"   Alias   _  
      "StartDocPrinterA"   (ByVal   hPrinter   As   Long,   ByVal   Level   As   Long,   _  
      pDocInfo   As   DOCINFO)   As   Long  
  Private   Declare   Function   StartPagePrinter   Lib   "winspool.drv"   (ByVal   _  
      hPrinter   As   Long)   As   Long  
  Private   Declare   Function   WritePrinter   Lib   "winspool.drv"   (ByVal   _  
      hPrinter   As   Long,   pBuf   As   Any,   ByVal   cdBuf   As   Long,   _  
      pcWritten   As   Long)   As   Long  
   
  Public   Sub   Print_axis(P1   As   String,   str   As   String)  
                Dim   lhPrinter   As   Long  
                Dim   lReturn   As   Long  
                Dim   lpcWritten   As   Long  
                Dim   lDoc   As   Long  
                Dim   sWrittenData   As   String  
                Dim   MyDocInfo   As   DOCINFO  
                CR   =   Chr(13)   &   Chr(10)  
   
                lReturn   =   OpenPrinter(P1,   lhPrinter,   0)  
                If   lReturn   =   0   Then  
                    MsgBox   "未正确安装打印机!"  
                    Exit   Sub  
                End   If  
                MyDocInfo.pDocName   =   "标签"  
                MyDocInfo.pOutputFile   =   vbNullString  
                MyDocInfo.pDatatype   =   vbNullString  
                lDoc   =   StartDocPrinter(lhPrinter,   1,   MyDocInfo)  
                Call   StartPagePrinter(lhPrinter)  
                sWrittenData   =   str  
                lReturn   =   WritePrinter(lhPrinter,   ByVal   sWrittenData,   _  
                Len(sWrittenData),   lpcWritten)  
                lReturn   =   EndPagePrinter(lhPrinter)  
                lReturn   =   EndDocPrinter(lhPrinter)  
                lReturn   =   ClosePrinter(lhPrinter)  
            End   Sub  
   
  '具体如何控制打印行间据、字间距、字体大小、定位等等,可以参照epson   ESC/P指令集Top

    
  1.MyDocInfo是什么对像:  
        是自定义类型  
  Private   Type   DOCINFO  
      pDocName   As   String  
      pOutputFile   As   String  
      pDatatype   As   String  
  End   Type  
  lReturn   =   OpenPrinter(P1,   lhPrinter,   0)  
  Dim   MyDocInfo   As   DOCINFO  
   
  2.Public   Sub   Print_axis(P1   As   String,   str   As   String),这里P1指的是打印机名还是打印机的型号  
    lReturn   =   OpenPrinter(P1,   lhPrinter,   0)  
  Private   Declare   Function   OpenPrinter   Lib   "winspool.drv"   Alias   _  
      "OpenPrinterA"   (ByVal   pPrinterName   As   String,   phPrinter   As   Long,   _  
      ByVal   pDefault   As   Long)   As   Long  
   
  pPrinterName   String,要打开的打印机的名字    
  phPrinter   Long,用于装载打印机的句柄    
  pDefault   PRINTER_DEFAULTS,这个结构保存要载入的打印机信息     
  说简单点打印机的句柄就是调用打印机时系统分配的一个指向该打印机的一个数值  
  跟窗体句柄的含义差不多的方法,直接对打印机操作  
  Open   "PRN"   For   Output   As   #1  
   
  Print   #1,   Chr(&HE)  
  Print   #1,   "123"  
  Print   #1,   Chr(&H14)  
  Print   #1,     "456"  
  Close   #1Top