USB Treiber??



  • Hi ich wollte mal ein paar Fragen bezüglich Benutzung von USBs und USB Treibern fragen:

    Mal angenommen ich möchte folgendes realisieren:
    Ich habe einen USB Stick auf dem bestimmte Programmdaten drauf sind. Ich möchte nun, dass wenn ich den USB Stick einstecke, dass sich dann mein Programm startet und sich die Daten vom USB Stick holt.

    Wie würdet ihr das realisieren?

    Ich habe zum Beispiel überlegt, ob man nicht einen Windows Dienst schreibt, der z.B. jede Sekunde checkt, ob ein USB Stick eingesteckt wurde. Allerdings würde dies die Systemleistung um einiges beeinträchtigen oder?
    Und außerdem: Wie finde ich raus ob ein USB stick eingesteckt wurde?
    Wie finde ich den Pfad raus??

    Man könnte natürlich auch irgendwie nen Treiber schreiben/umschreiben..
    Aber das klingt für mich recht kompliziert...

    Das waren jetzt viele Fragen auf einmal 🙂 😃

    Ich hoffe ich krieg trotzdem ein paar antworten.

    MFG
    Ace



  • Autorun.



  • Soweit ich weiß ist Autorun bei USB nicht möglich.
    Bzw. nur mit bestimmten.



  • Wenn dein Programm ein Hauptfenster besitzt, kannst du mit der Message WM_DEVICECHANGE feststellen, wenn ein Gerät (dazu zählen auch USB-Sticks) gewechslt wird.

    The WM_DEVICECHANGE device message notifies an application of a change to the hardware configuration of a device or the computer.

    A window receives this message through its WindowProc function.

    also könntest du das so machen

    //...
    case WM_DEVICECHANGE:
    {
    if (wParam == DBT_DEVICEARRIVAL) // Wenn neues Gerät verfügbar
    {
    PDEV_BROADCAST_VOLUME pDB = (PDEV_BROADCAST_VOLUME)lParam;
    char cDrive = pDB->dbcv_unitmask; // Der Laufwerksbuchstabe des neuen Gerätes
    }
    return 0;
    } break;
    // ...
    

    Das ist die Struktur PDEV_BROADCAST_VOLUME:

    typedef struct _DEV_BROADCAST_VOLUME {
      DWORD dbcv_size;
      DWORD dbcv_devicetype;
      DWORD dbcv_reserved;
      DWORD dbcv_unitmask;
      WORD dbcv_flags;
    } DEV_BROADCAST_VOLUME,
     *PDEV_BROADCAST_VOLUME;
    

    Der Devicetype enthält lediglich Informationen, ob es sich um ein Speichermedium
    (USB-Stick, usw.) oder ein Netzwerkgerät handelt.

    DBTF_MEDIA
    0x0001 Change affects media in drive. If not set, change affects physical device or drive.

    DBTF_NET
    0x0002 Indicated logical volume is a network volume.



  • noch etwas:
    vor der Nutzung musst du dbt.h inkludieren

    #include <dbt.h>
    


  • Danke werd ich ma ausprobieren


Anmelden zum Antworten