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
 
Benutzerbild von himitsu
himitsu

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

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
 


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 19: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