2016-11-05 23 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(); 
} 

その後、私はそれを、具体的thisスレッド以下、CMDでテストが、私はコマンドを実行する「USB001 open.batコピー/ b」が開始しましたちょうど言う:「USB001を上書きするか? (はい/いいえ/すべて) '

ご存知ですか?

答えて

0

解決済み:USBコマンドが見つかりませんでした。lpt1をエミュレートする必要がありました。

  1. コントロールパネルでプリンタを共有します。管理者として
  2. オープンcmdを
  3. NET USE LPT1 \ [コンピュータ名] \プリンタ /永続:コピー/ BのmyFile.batのLPT1
  4. :はい(win8.1では動作しません)CMDから
  5. Javaメソッドから
  6. :私はコマンドはUSB001ポートにopen.batを送っていたと思った

    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ファイル名にコピーしているので上書きするかどうか尋ねてきます。

あなたは常にたとえば、同様に/ Yスイッチを使用しても、その後USB001ファイルを上書きする場合:

copy /B /Y open.bat USB001 

あなたが入力してコマンドプロンプトでCOPYのためのすべてのスイッチを表示することができます。

copy /? 
+0

そうでない場合は、スレッドで私がリンクされ、なぜ、私は、USB001ファイルを持っていないと言います。 ' copy/bはあなたのcontrを送信するのに完全に有効な方法ですolコマンドをプリンタに送ると動作します。 ' – tomyforever

+0

私は、「開始/分メモ帳open.bat」でキャッシュドロワーを開くことができます。しかし、私はファイルの名前と空白がたくさん印刷されているので、メモ帳を使いたくないので、キャッシュドロワーを開くだけです。 'start'コマンドの構文は、[link](http://www.computerhope.com/issues/ch000932.htm)にあります。 – tomyforever

+0

更新:キャッシュドロワー「LPT1ポートをエミュレートする」を開くことができました。 1番目 - コントロールパネルのプリンタを共有します。 2番目のcmdを管理者としてオープン第3 - NET使用LPT1:\\ [コンピュータ名] \プリンタ。コマンド 'copy/b open.bat lpt1'が動作します。しかし、現金引き出しが開かれても生データは印刷されます。 – tomyforever

関連する問題