AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi wie Hardware (HID) erkennen und via Programm verbinden/trennen?
Thema durchsuchen
Ansicht
Themen-Optionen

wie Hardware (HID) erkennen und via Programm verbinden/trennen?

Ein Thema von himitsu · begonnen am 12. Okt 2010 · letzter Beitrag vom 23. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#1

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?

  Alt 13. Okt 2010, 17:25
Nee, funktioniert leider garnicht.
Es wird SPINT_ACTIVE angegeben, aber das Device ist definitiv noch im "Leerlauf", also nicht verbunden.
Und wenn ich es dann verbinde, dann ändert sich an diesen Flags auch nichts.

PC hochgefahren > Device im "Leerlauf" und Status=SPINT_ACTIVE
Gerät verbunden > unverändert Status=SPINT_ACTIVE
Gerät getrennt (nicht entfernt) > Device wird von SetupDiEnumDeviceInterfaces nicht mehr gefunden, obwohl es doch der selbe Status sein sollte, wie zu Anfang
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#2

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?

  Alt 23. Okt 2010, 08:24
Ich dreh langsam noch durch.

Aktuell hab ich meinen Code so, über diesen wollte ich auch mit testen, ob das Device verbunden ist.
Delphi-Quellcode:
Case FPortAccess of
  paWriteFile: Begin
    ...
  End;
  paSetOutputReport:
    ...
  Else Begin
    Result := HidD_SetOutputReport(FPort, Report, Len);
    If not Result Then Begin
      ResetEvent(FOverlappt.hEvent);
      If not WriteFile(FPort, Report, FOutputReportSize, W, @FOverlappt) Then Begin
        E := GetLastError;
        If (E = ERROR_HANDLE_EOF) or (E = $048F{ERROR_DEVICE_NOT_CONNECTED}) Then Begin
          DoDisconnect;
          Result := False;
          Exit;
        End;
        W := WaitForSingleObject(FOverlappt.hEvent, FTimeout);
        If (W = WAIT_TIMEOUT) or (W = WAIT_FAILED)
            or not GetOverlappedResult(FPort, FOverlappt, W, False) Then Begin
          CancelIo(FOverlappt.hEvent);
          Result := False;
          Exit;
        End Else FPortAccess := paWriteFile;
      End;
      Result := True;
    End Else FPortAccess := paSetOutputReport;
  End;
End;
Nur liefert WriteFile oftmals direkt True (natürlich ohne einen Fehlercode zu setzen), selbst wenn das Device nicht verbunden ist, sich also nur im Leerlauf befindet.

Vorher hatte ich den Code so,
aber hier lieferte WriteFile auch manchmal direkt True und somit False als Result, auch wenn das Device erfolgreich angesteuert wurde.
Delphi-Quellcode:
Case FPortAccess of
  paWriteFile: Begin
    ...
  End;
  paSetOutputReport:
    ...
  Else Begin
    Result := HidD_SetOutputReport(FPort, Report, Len);
    If not Result Then Begin
      ResetEvent(FOverlappt.hEvent);
      If not WriteFile(FPort, Report, FOutputReportSize, W, @FOverlappt) Then Begin
        E := GetLastError;
        If (E = ERROR_HANDLE_EOF) or (E = $048F{ERROR_DEVICE_NOT_CONNECTED}) Then Begin
          DoDisconnect;
          Result := False;
          Exit;
        End;
        W := WaitForSingleObject(FOverlappt.hEvent, FTimeout);
* If (W = WAIT_TIMEOUT) or (W = WAIT_FAILED)
* or not GetOverlappedResult(FPort, FOverlappt, W, False) Then Begin
* CancelIo(FOverlappt.hEvent);
* Result := False;
* End Else Begin
* FPortAccess := paWriteFile;
* Result := True;
* End;
* End Else Result := False;
    End Else FPortAccess := paSetOutputReport;
  End;
End;

Also WriteFile liefert manchmal True, wenn das Device erfolgreich angesteuert wurde und leider auch dann, wenn es nicht angeschlossen ist und somit garnicht angesteuert wurde.

Somit laß ich jetzt erstmal die obere Variante, aber leider kann ich es so nicht nutzen, um zu erkennen, ob das Device überhaupt verbunden ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#3

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?

  Alt 12. Nov 2010, 16:14


Weiß denn wirklich keiner, wie man "getrennte" HID- oder genauer Bluetooth-Geräte, welche sich im Standby befinden wiederverbinden kann?

Bzw. die man Bluetooth-Geräte via Programm suchen/verbinden/wiederverwinden/trennen/auswerfen kann?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz