Entwickler-Ecke
Windows API - SD-Card im CardReader mittels WM_DeviceChange?
rociel - Fr 01.09.06 11:40
Titel: SD-Card im CardReader mittels WM_DeviceChange?
hi, folgender code läuft ganz gut (mit cd's klappts):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm2.WMDeviceChange(var Msg: TMessage); const DBT_DEVICEARRIVAL = $8000; DBT_DEVICEREMOVECOMPLETE = $8004; var myMsg: string; begin inherited; case Msg.wParam of $8000: myMsg := '0'; $8001: myMsg := '1'; $8002: myMsg := '2'; $8003: myMsg := '3'; $8004: myMsg := '4'; $8005: myMsg := '5'; $8006: myMsg := '6'; $8007: myMsg := '7'; $8017: myMsg := '17'; $8018: myMsg := '18'; $8019: myMsg := '19'; $FFFF: myMsg := 'FFFF!'; else myMsg:='other'; end; ShowMessage(myMsg); end; |
Das problem ist, wenn ich in meinen über USB angeschlossenen CardReader eine Karte stecke, meldet der mit dieser prozedur garnix.
anzumerken ist, dass ich das autorun schon wie in
http://www.delphipraxis.net/topic89850,0,asc,45.html beschrieben aktiviert hab, und neugestartet hab.
wenn ich den Cardreader an sich zum usb connecte, bringt er jedoch auch die meldung, dass er was gefunden hat, nur halt nit wenn ich dann ne karte reinstecke.
kann mir wer sagen, was ich falsch mache?
Delete - Mo 02.10.06 22:07
Die Lösung steht eigentlich in diesem Forum schon (Tellerrandproblem!):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.GetDrives(const AItems: TStrings); const DriveTypeTexts: array[DRIVE_UNKNOWN..DRIVE_RAMDISK] of String = ('unknown', 'no root', 'Diskette', 'HDD', 'Net-Drive', 'DVD/CDROM', 'RAMDisk'); var Drive: Char; i,c, DriveType: Integer; DriveMask: Integer; Flag: Integer; begin DriveMask:=GetLogicalDrives; flag:=1; for I := 1 to 26 do begin for c := 2 to SG1.RowCount - 1 do SG1.Cells[i, c] := ''; if (flag and DriveMask)<>0 then begin Drive:= Chr(i+64); DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ; SG1.cells[1,i]:= Format('%s', [DriveTypeTexts[DriveType]]); end; flag:=flag shl 1; end; end; |
Den Rest findest Du hier:
http://www.delphi-forum.de/topic_CD+NameTitel+quoterfragenquot_63683.html
Dazu brauchst Du noch einen Timer...
Moderiert von
raziel: Delphi-Tags hinzugefügt
rociel - Mi 04.10.06 15:16
ich mag das aber lieber über die WinAPI lösen, und nicht mit nem timer, da wenn man das über die winAPI macht schließlich ressourcenschonender ist.....
whitef - Mi 22.08.12 20:10
hi,
das Thema ist zwar schon ganz schön angestaubt, aber weiß vlt. jmd wie man mittels der Windows API auf das Einlegen von SD-Karten reagieren kann?
mfg
----------------------------------
EDIT:
haha... und schon hab ich selbst ne Lösung gefunden, die eigentlich mal sau genial ist und vor allem easy 2 handle ist:
1. Auf dieser Seite (
http://delphi.about.com/library/code/ncaa030403b.htm) das herunterladen:
Download the TSHChangeNotify component with source.
2. In Delphi die enthaltene PAS Datei installieren (Components > Install Component > ...)
3. Neues Projekt anlegen
4. Die neue Komponente auf die Form ziehen (Custom > TSHChangeNotify)
5. Im OnCreate der Form folgendes einfügen "SHChangeNotify1.Execute;"
6. Im OnClose und im OnDestroy der Form folgendes einfügen "SHChangeNotify1.Stop;"
7. Jetzt könnt ihr so einige Dinge mit dem Teil auslesen lassen
Ein Beispiel Projekt findet ihr auch auf der obigen Seite (
http://delphi.about.com/library/code/ncaa030403b.htm) hinterlegt bei:
Download the ZIPed project source.
hier mal eine Liste in der mal teilweise ja schon ableiten kann was da geht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| property OnAssocChanged : TTwoParmEvent read fAssocChanged write fAssocChanged; property OnAttributes : TOneParmEvent read fAttributes write fAttributes; property OnCreate : TOneParmEvent read fCreate write fCreate; property OnDelete : TOneParmEvent read fDelete write fDelete; property OnDriveAdd : TOneParmEvent read fDriveAdd write fDriveAdd; property OnDriveAddGUI : TOneParmEvent read fDriveAddGUI write fDriveAddGUI; property OnDriveRemoved : TOneParmEvent read fDriveRemoved write fDriveRemoved; property OnMediaInserted : TOneParmEvent read fMediaInserted write fMediaInserted; property OnMediaRemoved : TOneParmEvent read fMediaRemoved write fMediaRemoved; property OnMkDir : TOneParmEvent read fMkDir write fMkDir; property OnNetShare : TOneParmEvent read fNetShare write fNetShare; property OnNetUnshare : TOneParmEvent read fNetUnshare write fNetUnshare; property OnRenameFolder : TTwoParmEvent read fRenameFolder write fRenameFolder; property OnRenameItem : TTwoParmEvent read fRenameItem write fRenameItem; property OnRmDir : TOneParmEvent read fRmDir write fRmDir; property OnServerDisconnect : TOneParmEvent read fServerDisconnect write fServerDisconnect; property OnUpdateDir : TOneParmEvent read fUpdateDir write fUpdateDir; property OnUpdateImage : TOneParmEvent read fUpdateImage write fUpdateImage; property OnUpdateItem : TOneParmEvent read fUpdateItem write fUpdateItem; property OnEndSessionQuery : TEndSessionQueryEvent |
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!