Autor Beitrag
rociel
Hält's aus hier
Beiträge: 8

Win 98(+DOS;P), Win 2k, Win XP, Knoppix für rettungsversuche
D7 Enterprise
BeitragVerfasst: Fr 01.09.06 11:40 
hi, folgender code läuft ganz gut (mit cd's klappts):

ausblenden 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// system detected a new device 
  DBT_DEVICEREMOVECOMPLETE = $8004;  // device is gone 
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 www.delphipraxis.net...c89850,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?
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.10.06 22:07 
Die Lösung steht eigentlich in diesem Forum schon (Tellerrandproblem!):

ausblenden 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:
//  erkennt am USB angeschlossenen CardReader als Diskette:
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 Drive := 'A' to 'Z' do  //geändert: brauchte Int-wert wg. Stringgrid    
for I := 1 to 26 do
  begin
    for c := 2 to SG1.RowCount - 1 do SG1.Cells[i, c] := ''// alte werte löschen

    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:
www.delphi-forum.de/...ragenquot_63683.html

Dazu brauchst Du noch einen Timer...

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
rociel Threadstarter
Hält's aus hier
Beiträge: 8

Win 98(+DOS;P), Win 2k, Win XP, Knoppix für rettungsversuche
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: 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 (delphi.about.com/lib...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 (delphi.about.com/lib...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:
ausblenden 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