全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1766
推到 Plurk!
推到 Facebook!

列印前偵測USB熱感應式收據印表機是否開啟或缺紙

尚未結案
h5rong
一般會員


發表:32
回覆:44
積分:15
註冊:2003-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2019-08-02 09:38:02 IP:210.61.xxx.xxx 未訂閱
Hi !
因系統是放在室外,開放使用者自行交易刷卡繳費,管理員並未一直在電腦旁,故若使用者交易繳費後,當列印收據時,才發現印表機忘記開啟,或已無紙張可供列印收據,往往需麻煩使用者通知管理員補印收據,造成雙方困擾,故請問列印前,有無可能偵測USB熱感應式收據印表機是否開啟或缺紙? 曾閱讀USB熱感應式收據印表機技術手冊,提到只需送出 hex 0X1B 至印表機,即可判斷收據印表機目前狀態,但如何偵測 USB PORT,是虛擬的 USB001? 不知是否有相關經驗,可提供完整的方向?

謝謝。


Hrong_
monkeyhkn1
一般會員


發表:0
回覆:1
積分:0
註冊:2019-08-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2019-08-02 15:48:11 IP:118.163.xxx.xxx 未訂閱
分享之前工作經驗作法讓你參考:

雖印表機規格一致,但因 每台PC連接 Printer Port (LPT,USB001,USB002...),

當時我有下列2種作法:
1.每台PC放個txt ,記錄印表機的Port,
由程式讀取該txt,取得連接Port
2.固定印表機名稱(ex. 刷卡機印表機),
由程式取得印表機清單,比對名稱取得連接Port

後來實作下來,第2點作法對日後維運較無負擔。
h5rong
一般會員


發表:32
回覆:44
積分:15
註冊:2003-08-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2019-08-02 17:19:42 IP:59.120.xxx.xxx 未訂閱
monkeyhkn1: 您好!

我曾經想透過以下方式,取得 USB 的 PORT,但一直是空字串,故不知您是如何取得USB 的 PORT,可否舉個例子,感謝答覆。

Printer.PrinterIndex := -1;
GetMem(Device, 255);
GetMem(Driver, 255);
GetMem(Port, 255);
aPrinter := TPrinter.Create;
try
for I := 0 to Printer.Printers.Count - 1 do
begin
if Printer.Printers[I] = PrinterName then
begin
aprinter.PrinterIndex := I;
aPrinter.getprinter(device, driver, port, HdeviceMode);
StrCat(Device, ',');
StrCat(Device, Driver);
StrCat(Device, Port);
WriteProfileString('windows', 'device', Device);
StrCopy(Device, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
end;
end;
finally
aPrinter.Free;
end;
FreeMem(Device, 255);
FreeMem(Driver, 255);
FreeMem(Port, 255);
系統時間:2024-04-29 3:17:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!