專案需同時操作串口與並行埠 POS 列印機。.NET 內建 SerialPort 解決串口,但並行埠無對應類別。調研兩條路徑:
inpout32.dll:可讀寫,但基址(0x378/0x379/0x37A)非固定,客戶無法自行查找。靈感來自 WQL(WMI Query Language)可查詢硬體資源。實驗證實:
var searcher = new ManagementObjectSearcher(
"ASSOCIATORS OF {Win32_ParallelPort.DeviceID='LPT1'}");
foreach (var obj in searcher.Get()) {
if (obj.ClassPath.ClassName == "Win32_PortResource") {
uint baseAddr = Convert.ToUInt32(obj.Properties["StartingAddress"].Value);
// 取得基址,後續可用 inpout32 讀寫
}
}
此法完美解決基址自動偵測問題,配合 inpout32 實現完整讀寫與狀態輪詢。