2016-01-22 39 views
0

簡而言之:如何獲得與USB POS打印機相關的設備路徑?例如\\?\usb#vid_5986&pid_0535#200901010001#{a5dcbf10-6530-11d2-901f-00c04fb951ed}如果我知道打印機的端口是USB001,我知道它的名字?如何通過CreateFile獲取原始直接打印的USB打印機文件名?

完整:我有這個noname POS打印機我需要打印。它帶有一個SDK,一個帶有OpenPort(「USB001」),SendData(「hello world」)和ClosePort()函數的簡單DLL,這對於簡單打印來說是可以的。如果您需要重新編程打印機,則不正常 - SendData的空終止參數會阻止您將零發送到打印機,這對於某些命令來說是絕對必需的。

我花了一些時間研究,如果我能找到其他方式,沒有發現任何實質性的東西。最後,我發現this article about Setupapi.lib並試了一下:我寫了一個簡單的程序,枚舉所有設備路徑,打印機運行,打印機運行,設備路徑消失,用作CreateFile的參數,將數據寫入打開處理和 - 萬歲! - 有效。打印機確實打印了我在那裏發送的數據。 :)

現在我需要更簡單和優雅的方式來獲取此設備路徑。我仍然在挖掘Setupapi.lib的參考資料,但也許有人可以給我一個提示,以加快這個過程或建議替代路線?

在此先感謝。

+0

您已經有工作代碼,現在您要求更簡單的解決方案?這似乎沒有足夠的具體問題成爲stackoverflow的主題。 – IInspectable

+0

需要人工協助打開/關閉設備的代碼,並且也會盲目地認爲沒有其他變化...是否真正起作用? –

+0

最終我發現並遵循了此解決方案:http://stackoverflow.com/ a/13533429/1525403 –

回答

1

我搜索了「setupapi獲取設備路徑」,我得到的第一個命中是SetupDiGetDeviceInterfaceDetail api。看看那個頁面,你會看到它返回一個SP_DEVICE_INTERFACE_DETAIL_DATA,它包含一個設備路徑。如果你在谷歌的API,你會發現一個代碼示例以及幾個SO問題/答案的使用。

相關問題