2016-11-05 136 views
1

我需要用cmd打開一個錢箱。我從Java開始(與我的應用程序),但我沒有找到有關類的詳細信息,以及它們如何與Windows端口進行交互,所以我無法使它工作。這是我試過(既不是錯誤既不是開錢箱)的方法:如何發送命令到USB打印機?

public void cashdrawerOpen() { 

    String code1 = "27 112 0 150 250"; //decimal 
    String code2 = "1B 70 00 96 FA"; //hexadecimal 
    String code = "ESCp0û."; //ascii 

    PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 
    System.out.println(service.getName()); 
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE; 
    DocPrintJob pj = service.createPrintJob(); 
    byte[] bytes; 
    bytes=code2.getBytes(); 
    Doc doc=new SimpleDoc(bytes,flavor,null); 
     try { 
     pj.print(doc, null); 
    } catch (PrintException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


public void cashdrawerOpen2(){ 
    String code1 = "27 112 0 150 250"; 
    String code2 = "1B 70 00 96 FA"; 
    String code = "ESCp0û."; 
    FileOutputStream os = null; 
    try { 
     os = new FileOutputStream("USB001:POS-58"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
     PrintStream ps = new PrintStream(os); 
     ps.print(code1.getBytes()); 
     ps.close(); 
} 

然後,我開始用CMD測試,下面具體this線程,但是當我執行命令「拷貝/ B open.bat USB001」它只是說:'覆蓋USB001? (是/否/全部)'

任何想法?

回答

0

解決:我沒有找到任何USB命令,我不得不模仿lpt1。

  1. 在控制面板上共享打印機。
  2. 打開CMD爲管理
  3. NET USE LPT1 \ [計算機名] \打印機 /持久性:是的(不win8.1工作)
  4. 從CMD:複製/ B myFile.bat LPT1
  5. 從Java方法:

    public void cashdrawerOpen(){ 
        String code2 = "1B700096FA"; // my code in hex 
        FileOutputStream os = null; 
        try { 
         os = new FileOutputStream("LPT1:POS-58"); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } 
         PrintStream ps = new PrintStream(os); 
        ps.print(toAscii(code2)); 
         ps.close(); 
    } 
    
    public StringBuilder toAscii(String hex){ 
    StringBuilder output = new StringBuilder(); 
    for (int i = 0; i < hex.length(); i+=2) { 
    String str = hex.substring(i, i+2); 
    output.append((char)Integer.parseInt(str, 16)); 
    } 
    return output; 
    
    } 
    
0

嗯... USB001文件必須已存在於您要複製的位置,現在它會詢問您是否要覆蓋它,因爲您將open.bat複製到了相同的USB001文件名。

如果你總是想覆蓋USB001文件,然後同時使用/ Y開關爲好,例如:

copy /B /Y open.bat USB001 

您可以通過輸入查看在命令提示符下副本的所有開關:

copy /? 
+0

我以爲命令發送open.bat到USB001端口,我沒有一個USB001文件,如果不是的話,爲什麼在我掛線說:「複製/ b是發送你的控制的完全有效的方式ol命令打印機,它應該工作。 」。 – tomyforever

+0

我使用'start/min notepad open.bat'實現打開錢箱。但我不想使用記事本,因爲它會打印文件的名稱和大量的空白區域,我只需要打開錢箱即可。 'start'命令的語法可以在這裏找到:[link](http://www.computerhope.com/issues/ch000932.htm)。 – tomyforever

+0

更新:我設法打開現金抽屜'模擬'LPT1端口。第一 - 在控制面板上共享打印機。第二個打開cmd作爲管理員第三 - NET USE LPT1:\\ [Computer-Name] \ Printer。然後命令'copy/b open.bat lpt1'將起作用。但是當錢箱打開時它仍然會打印原始數據。 – tomyforever