USB Stick
-
Hallo Sovok,
Such mal in der MSDN nach WM_DEVICECHANGE bzw. CWnd::OnDeviceChange.
Wenn ich mich recht erinnere, gab es hier mal eine Artikel (kann ihn im Moment nicht finden), der beschrieb wie man über das Einlegen einer CD informiert wird.
Ähnlich sollte es mit dem USB-Stick gehen.Hoffe, Du hast Erfolg.
-
Doppelpost.
-
danke der tip war gut
habs jetzt soweit, dass ich informiert werde wenn ein stick angeschlossen wirdbeim beenden des sticks werd ich zwar auch informiert... weiss aber nich wie ich das sauber umsetze
momentan block ich den aufruf von "hardware sicher entfernen" so lange bis ich fertig bin... dann hängt sich aber "hardware sicher entfernen" prog solange auf bis ich mein ok geb
wie kann ich die anfrage ablehnen, meinen job zuende machen und später mein ok geben?
hab schon versucht direkt den befehl "eject" an den stick zu schicken... da kommt aber nur zugriff verweigert zurück
-
Hallo Sovok,
Wie Du selber den USB-Stick sauber entfernst, also quasi vom Programm aus denn Button "hardware sicher entfernen drückst" ist in der ct 16/2003 auf Seite 208 beschrieben. Dazu gibs auch eine Link:
http://www.heise.de/ct/03/16/links/208.shtml
Dort ist ein Beispielprogramm im Quelltext.
Wie Du allerdings ein Veto gegen das Entfernen einlegst, kann ich Dir auch nicht sagen.Viel Spaß beim suchen und probieren.
-
gibts noch was anderes?
der ct code is im bezug auf api aufrufe sehr undurchsichtig
-
Sovok schrieb:
gibts noch was anderes?
der ct code is im bezug auf api aufrufe sehr undurchsichtigBist Du schon weitergekommen?
Ich habe mich mal durch den Code gewühlt und habe es selbst nochmal geschrieben und es sogar hinbekommen.
Ich nutze das Programm allerdings zum gezielten Auswerfen vor dem Abziehen des Sticks, da es ja auch zu Datenverlust führen kann, sofern der Stick sich noch im Schreibzugriff befindet.
-
der holt sich da doch irgendwelche funktionszeiger...
hast du ne ahnung welchen apifunktionen die entsprechen
vom namen her hab ich in keinem meiner sdks was gefunden
-
Sovok schrieb:
der holt sich da doch irgendwelche funktionszeiger...
hast du ne ahnung welchen apifunktionen die entsprechen
vom namen her hab ich in keinem meiner sdks was gefundenJa, Du brauchst dazu das Windows2k DDK oder halt die Header dazu.
Der Autor von der CT-Version lädt sich die Methoden direkt aus der DLL.
Die Methoden, die er verwendet stehen ja in seinem Code bei dem Aufruf von GetProcAddress().
CM_Locate_DevNode()
CM_Get_Child()
CM_Get_Sibling()
CM_Get_DevNode_Status()
CM_Get_Device_ID_Size()
CM_Get_Device_IDA()
CM_Request_Device_Eject()Ich bin noch dabei einige Änderung an meiner Klasse vorzunehmen, dann werde ich sie auch gerne mal posten.
-
wo gibts das 2k ddk
ich find bei ms nur n dx7 ddk und n paar w98/me ddk samples
-
Sovok schrieb:
wo gibts das 2k ddk
ich find bei ms nur n dx7 ddk und n paar w98/me ddk samplesFrüher konnte man sich das mal so herunterladen. Nun mußt Du es Dir von MS anfordern und bekommst es gegen Portobezahlung zugesandt wenn ich mich recht erinnere.
Ich habe nochmal ne Frage zu WM_DEVICECHANGE:
Ich habe die Message abgefangen und fülle auch die DEV_BROADCAST_HDR-Struktur, aber was kann ich damit machen? Wie bekomme ich dann den Namen des Devices?
-
du kannst den typ prüfen und es dann in die struktur des typs casten
danach hast du dann den laufwerksbuchstabe
-
Sovok schrieb:
du kannst den typ prüfen und es dann in die struktur des typs casten
danach hast du dann den laufwerksbuchstabeJa, das habe ich auch gerade gemerkt, nachdem ich von der MSDN auf die Platform SDK gewechselt habe.
Habe nun nen DEV_BROADCAST_VOLUME-struct und da dann dbcv_unitmask von 8192 was ja 2^13 ist => Laufwerk N:
Aber wie setze ich das geschickt um?
Muß ich das dann zu fuß machen oder gibt es dafür ne schicke Methode.Und ich suche auch noch den Namen des Devices. Zum Beispiel in meinem Fall "USB-Massenspeicher" oder noch besser das ChildDevice "Q-MAX USB Flash Drive USB Device" davon.
Dann wäre ich total happy

-
GetVolumeInformation
das wichtigste is aber die seriennummer
damit kannst du mehrere disks unterscheiden
-
Sovok schrieb:
GetVolumeInformation
das wichtigste is aber die seriennummer
damit kannst du mehrere disks unterscheidenDamit bekomme ich zwar die Serial und den Laufwerksnamen, aber nicht den Devicenamen.
Oder kann ich noch etwas mit der Serial machen?
-
ne für den devicenamen kenn ich keinen einfachen weg
aber was anderes
wo kann man denn das ddk bestellen?
hab nur ne msdn subscriber seite gefunden
oder mail mit einfach die libs und header .... ich brauchs ja eh nur für usb