Dot-Net
是否有 API 呼叫開始掃描硬體設備
與這個問題相關,但是……是否可以通過 API 觸發新的硬體設備掃描?我有一個串口藍牙設備,我通過 API 呼叫與32feet.net .NET Bluetooth自動配對,效果很好。雖然我可以在掃描設備時查詢串列服務,但 COM 埠不會顯示在藍牙設備對話框的 COM 埠選項卡中。
與在 Windows 設備管理器中以程式方式解除安裝設備相關
我從那裡的回答:
要強制“掃描硬體更改”檢查“如何強制從應用程序中重新列舉設備樹”,那裡的範例顯示瞭如何強制重新列舉整個樹。
不確定這是否會幫助您解決整體問題,但這應該回答您第一句話中的問題。
幾年前,我最初使用 Nullsoft 的 NSIS 安裝程序做了類似的事情。
如果您只想觸發普通硬體掃描,您可以使用以下程式碼(根據此問題中的 .net 標籤以 C# 提供):
這是 P/Invoke 函式的包裝類
public static class Win32Api { public const int CM_LOCATE_DEVNODE_NORMAL = 0x00000000; public const int CM_REENUMERATE_NORMAL = 0x00000000; public const int CR_SUCCESS = 0x00000000; [DllImport("CfgMgr32.dll", SetLastError=true)] public static extern int CM_Locate_DevNodeA(ref int pdnDevInst, string pDeviceID, int ulFlags); [DllImport("CfgMgr32.dll", SetLastError=true)] public static extern int CM_Reenumerate_DevNode(int dnDevInst, int ulFlags); }這是如何使用它們的範例
int pdnDevInst = 0; if (Win32Api.CM_Locate_DevNodeA(ref pdnDevInst, null, Win32Api.CM_LOCATE_DEVNODE_NORMAL) != Win32Api.CR_SUCCESS) throw new Exception("something..."); if (Win32Api.CM_Reenumerate_DevNode(pdnDevInst, Win32Api.CM_REENUMERATE_NORMAL) != Win32Api.CR_SUCCESS) throw new Exception("something else...");我只是從 MSDN C++ 文件中快速翻譯了它,並在短時間內對其進行了測試,所以我知道它可以工作,但它不是生產質量。此外,如果您關心具體的返回程式碼,您可以在 cfgmgr32.h 中查找它們。