Wie merkt man, dass ein USB-Stick angesteckt wurde?



  • Moin!

    Da unsere User scheinbar überwiegend zu faul zum Lesen sind und von dem Anteil der einen Brief liest ein weiterer Großteil dessen Inhalt nach 5 Minuten vergessen hat, suche ich nun die Möglichkeit eines individuellen Autostarts für USB-Sticks unter Windows (ab 98SE!).

    Auf jedem USB Stick der Firma befindet sich eine LiesMich.txt in der der Anwender sozusagen den Diskettenauskleber findet. Da steht eben, was auf dem Stick drauf ist und was wo installiert werden muss.
    PC-fitte Anwender können dann gleich installieren und hinterher anrufen. Unsichere rufen uns an werden von uns bei der Installation Mausklick für Mausklick begleitet.

    Leider liest kaum jemand die LiesMich und so kommen oft Updates uninstalliert zurück. Das will ich nun verhindern. Jedes Mal einen Brief mitschicken finde ich arbeitsaufwändig und umweltfeindlich.
    Daher soll die Anwender beim Anstecken des USB-Sticks die LiesMich.txt anspringen - so lesen Sie sie eher mal.

    Nun könnte ich ein Programm schreiben was sich in den Systray legt und alle 10 Sekunden nach einem USB-Stick sucht - das frisst Leistung die viele PCs nicht haben.
    Wenn es alle 5 Minuten guckt kann es sein dass der Stick schon wieder abgezogen ist... 🙄

    Optimal wäre, wenn es beim Anstecken eines USB-Sticks systemweit eine Nachricht an alle Programme gäbe die ich dann nur abfangen und verwerten muss.
    Gibt es sowas? Wie heißt es?

    Oder erfinde ich das Rad neu? Gibt es da schon was fertiges?
    Dann immer her damit. 😃



  • Schau mal hier in der Sektion "Automatische Aktionen beim Anstecken und Abziehen".



  • Danke, aber leider steht da

    USBDLM ist ein Windows-Dienst für Windows 2000, XP, Server 2003 und Vista

    Ich muss hier noch unter Win98SE arbeiten und die PCs sind die wichtigeren. 😞



  • Schau mal nach WM_DEVICECHANGE in der MSDN. Das liefert eine Message wenn ein Device eingesteckt / gezogen wurde. Glaub dazu gabs im FAQ auch nen Beitrag.



  • Uruk-h4j schrieb:

    Schau mal nach WM_DEVICECHANGE in der MSDN. Das liefert eine Message wenn ein Device eingesteckt / gezogen wurde. Glaub dazu gabs im FAQ auch nen Beitrag.

    Danke... der Beitrag war sogar ne Frage von mir.
    Nur habe ich damals den Lösungsansatz (mangels Verständnis oder weil ich dachte es geht unter Win98Se nicht) nicht weiter verfolgt.

    Mit Knobeln bin ich nun so weit, dass ich auf den Breakpoint in der Funktion auflaufe. War gar nicht so einfach da der Assistent (weder VC6 noch 2003) die Nachricht nicht kennt.

    So gehts:

    // Im Header
    	afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );
    
    // Im CPP
    // MessageMap
    	ON_WM_DEVICECHANGE()
    //[...]
    BOOL CBackupDlg::OnDeviceChange( UINT nEventType, DWORD dwData )
    {
    	return CDialog::OnDeviceChange(nEventType, dwData);
    }
    


  • kann ich mir vorstellen 😉
    Warum man noch für win98 programmiert ist mir sowieso schleierhaft 😉

    Was du glaub ich noch brauchst, um NUR eingehende USB-Geräte zu erkennen ist

    wParam Set to DBT_DEVICEARRIVAL.

    Sonst haut dir Windows alle Events (ausstecken, CD-Auswurf, etc.) um die Ohren. Und jedesmal die Liesmich zu bekommen wird die Anwender etwas nerven (oder machs wie Microsoft: "Its not a bu its a feature) 😉

    Alle Messages bekommst du hier: http://msdn.microsoft.com/en-us/library/aa363232%28VS.85%29.aspx



  • Uruk-h4j schrieb:

    Was du glaub ich noch brauchst, um NUR eingehende USB-Geräte zu erkennen ist

    wParam Set to DBT_DEVICEARRIVAL.

    Danke, das klappt. Ohne gehen nämlich 6 LiesMich auf. 😃
    Allerdings braucht man noch

    #include <dbt.h>
    

    Und bei der Funktion die ich nutze sieht die Prüfung so aus:

    if (nEventType == DBT_DEVICEARRIVAL)
    

    Naja, jedenfalls scheint das Programm jetzt zu tun, was ich will. 👍
    Danke 🙂


Log in to reply