2010-02-02 11 views
9

Podobne do this question, ale ... czy możliwe jest wyzwolenie przez interfejs API nowego skanowania urządzenia sprzętowego? Mam urządzenie Bluetooth portu szeregowego, które paruję automatycznie za pomocą wywołań API z 32feet.net .NET Bluetooth, co działa całkiem nieźle. Chociaż mogę zapytać o usługi szeregowe podczas skanowania urządzenia, porty COM nie pojawiają się na karcie Porty COM okna urządzeń Bluetooth.Czy jest wywołanie API, aby rozpocząć skanowanie urządzeń sprzętowych?

Odpowiedz

10

Nie jestem pewien, czy to pomoże w ogólnym problemie, ale powinno to odpowiedzieć na pytanie w pierwszym zdaniu.

Pierwotnie zrobiłem coś takiego za pomocą instalatora NSIS Nullsoft kilka lat temu.

Jeśli chcesz po prostu wywołać skanowanie sprzętu wanilia można użyć następującego kodu (w języku C# za znacznikiem .net w tej kwestii):

To jest klasa wrapper dla P/Invoke funkcje

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); 
} 

to jest przykład tego, jak z nich korzystać

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..."); 

Po prostu szybko przetłumaczyłem to z dokumentacji MSDN C++ i przetestowałem je w postaci kolca, więc wiem, że działa, ale nie jest to jakość produkcji. Ponadto, jeśli zależy ci na konkretnych kodach powrotu, możesz je wyszukać w cfgmgr32.h.

+0

nie patrzyłem na poprzednie odpowiedzi, ale na wszelki wypadek, gdy myślałeś, że skopiowałem tutaj oryginalną wersję, którą zrobiłem w NSIS: http://forums.winamp.com/showthread.php?t=192348 –

+0

Również moja jest w C# a próbka MS znajduje się w klasycznym VB. –

+0

Działa jak urok. Uwaga: MUSISZ PROWADZIĆ POŁĄCZENIA WINAPI Z PRAWAMI ADMINISTRACYJNYMI! Testowany na Windows 8 x64 – JanW

1

Właśnie znalazłem this SO post, które również może rozwiązać mój problem lub inne osoby, które znajdą to pytanie.

Powiązane problemy