Hallo,
ich versuche gerade, meine Software dazu zu bringen, dass sie mich benachrichtigt, wenn ein Bluetooth-Gerät mit dem Rechner verbunden oder die Verbindung getrennt wird.
Für USB-Geräte habe ich das schon mal wie folgt implementiert:
private void Window_SourceInitialized(object sender, EventArgs e)
{
//hook in to receive device changed event
IntPtr windowHandle = (new WindowInteropHelper(this)).Handle;
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.AddHook(new HwndSourceHook(WndProc));
}
private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) //device added or removed
{
// address the messages you are receiving using msg, wParam, lParam
if (msg == 537) //WM_DEVICECHANGE
{
if ((int)wParam == 7) //DBT_DEVNODES_CHANGED
_PortScanner.StartScan();
}
return IntPtr.Zero;
}
Nun möchte ich das Ganze, wie gesagt, für Bluetooth haben. Google hat das hier gefunden:
Bluetooth Programming with Windows Sockets
Bluetooth and WM_DEVICECHANGE Messages
Aber so richtig schlau werde ich daraus nicht und bräuchte etwas Hilfe.
Grüße, Alex
Final no hay nada más
Und ausserhalb der Microsoft Dokumentation hast Du nichts gefunden?
Kann mir kaum vorstellen, dass Du der Erste mit diesem Wunsch bist.
Spätestens auf die sehr bekannte 32feet.NET Open Source Bibliothek für PANs (und damit für Bluetooth) solltest Du gestolpert sein.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
32feet habe ich natürlich gefunden, das unterstützt aber den BT-Stack meines Adapters nicht. Ich hab inzwischen noch bisschen weiter recherchiert und fürchte, dass das nicht ganz so trivial ist wie oben mit USB, weil man offensichtlich eine Verbindung zum BT-Adapter herstellen muss. Eine generelle Variante scheint also schwierig, was doof ist, da ich ja nicht weiß, auf welchem Rechner die Anwendung später läuft.
Vielleicht sollte ich noch erwähnen, dass ich am Ende mit SPP bzw. COM-Port kommunieren möchte. Ich möchte nur die Ports scannen, wenn eines meiner Geräte sich mit dem Rechner verbindet, damit man das nicht immer manuell machen muss. In der eigentlichen Anwendung habe ich mit der eigentlichen Bluetooth-Kommunikation gar nichts zu tun.
Final no hay nada más
IIRC bietet Windows Callbacks an, auf die Du Dich setzen kannst. Meines Wissens aber gibts Unterschiede der APIs pro Betriebssystemversion.
32feet ist eben ein Wrapper für diese APIs. Wenn also 32feet den Stack nicht unterstützt, dann liegt das evtl. an der API zu Windows(Win32).
Ob Du das "automatisch Verbinden" überhaupt ohne eigenen Treiber hin bekommst weiß ich nicht; kann mir vorstellen, dass es hier eine Sicherheitshürde gibt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich möchte mich ja nicht automatisch verbinden. Ich möchte nur eine Message, wenn ein Gerät sich verbunden hat. Wenn PC <-> Gerät sich kennen (gepaired sind) sollte das doch automatisch gehen, wenn sie in Reichweite sind. Und wenn das passiert bzw. wenn manuell eine Verbindung hergestellt wurde, hätte ich gern eine Message/Event, damit die Software bescheit weiß.
Final no hay nada más