AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SD-Card im CardReader mittels WM_DeviceChange?
Thema durchsuchen
Ansicht
Themen-Optionen

SD-Card im CardReader mittels WM_DeviceChange?

Offene Frage von "ralfiii"
Ein Thema von Rociel · begonnen am 1. Sep 2006 · letzter Beitrag vom 18. Jul 2011
Antwort Antwort
Seite 1 von 3  1 23      
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#1

SD-Card im CardReader mittels WM_DeviceChange?

  Alt 1. Sep 2006, 08:33
hi, folgender code läuft ganz gut (mit cd's klappts):

Delphi-Quellcode:
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 http://www.delphipraxis.net/internal...ct.php?t=89850 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?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 8. Sep 2006, 15:59
Schonmal MSDN-Library durchsuchenRegisterDeviceNotification probiert?
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#3

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 8. Sep 2006, 21:47
hi, danke erstmal für den tipp, ich hab mir mal http://www.swissdelphicenter.ch/de/showcode.php?id=2211 angeschaut.

wenn ich das jetzt richtig sehe, dann sagt RegisterDeviceNotification dem system, dass es für ein zusätzliches gerät, welches connectet, bzw. disconnected wird, dann über WMDeviceChange eine Meldung bringt, ja?

und wenn ja, bzw. nein, wie binde ich das dann für meine zwecke in mein programm ein, sry, für die frage, aber ich habe noch so ziemlich keine erfahrungen, was API-Programmierung angeht.....
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 06:17
RegisterDeviceNotification sollte man nicht brauchen. Es ist dafuer zustaendig das man alle WM_DEVICECHANGEs fuer ein bestimmtes Device bekommt.
Die Basis-DEVICECHANGEs bekommt man auch so.

Ich wuerde mal vermuten das WM_DEVICECHANGE hier nicht an die zweite Form weitergeleitet wird.

Besorg dir mal mal meine HID-Komponente von http://www.soft-gems.net/HID.php oder aus der JVCL.
Dort ist eine Konversion von DBT.h (DBT.pas) dabei. Damit hast du erst mal die WM_DEVICECHANGE Konstanten.
Zusaetzlich enthaelt das File noch nuetzliche Kommentare von Microsoft.
Der beste Weg WM_DEVICECHANGe zu empfangen geht ueber AllocateHwnd.
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#5

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 08:34
an welche zweite form denn?

ich hab das mom um fehlerquellen zu vermeiden, erstmal in einem form laufen.

wie gesagt mit cds etc. gehts ja, nur halt nich wenn ich karten im cardreader austausche
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#6

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 08:59
so, hab grad mit der komponente das ausprobiert, bei DeviceChange und Arrival hab ich gesagt, dass er erstmal ne message bringen soll, hat er aber nu auch nicht, also geht das mit der nit
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 09:54
Zitat von Robert Marquardt:
RegisterDeviceNotification sollte man nicht brauchen. Es ist dafuer zustaendig das man alle WM_DEVICECHANGEs fuer ein bestimmtes Device bekommt.
Die Basis-DEVICECHANGEs bekommt man auch so.
Klar, nur leider nicht für alle Geräteklassen. Daher mein Tip.

Im PSDK steht (Hervorhebung meinerseits):
The DBT_DEVICEARRIVAL and DBT_DEVICEREMOVECOMPLETE events are automatically broadcast to all top-level windows for port devices. Therefore, it is not necessary to call RegisterDeviceNotification for ports, and the function fails if the dbch_devicetype member is DBT_DEVTYP_PORT. Volume notifications are also broadcast to top-level windows, so the function fails if dbch_devicetype is DBT_DEVTYP_VOLUME. OEM-defined devices are not used directly by the system, so the function fails if dbch_devicetype is DBT_DEVTYP_OEM.
Kann mein Fehler sein, aber ich sah Smartcards nicht als "port devices" an ...
Aber als übersetzer der entsprechenden API-Teile bei den JEDIs kennst du dich dabei sicher besser aus.

Die Benutzung von RegisterDeviceNotification ist wunderbar im PSDK beschrieben, einfach durchlesen und das erarbeitete anwenden. Hat man das ein paar Mal gemacht, hat man das Schema raus und braucht beim nächsten mal nur noch gezielt nachschauen wie diese oder jene API-Funktion aufgerufen wird.
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#8

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 10:28
aso, ok, lads mir grad runter.

und die Karte im CardReader läuft dann unter DBT_DEVTYP_OEM, ja?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 12:17
Ich denke eher: DBT_DEVTYP_DEVICEINTERFACE und dann die GUID für Smartcard-Devices.
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#10

Re: SD-Card im CardReader mittels WM_DeviceChange?

  Alt 9. Sep 2006, 15:05
so, ich hab den CardReader angeschlossen, und folgenden code verwendet:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var dbi: DEV_BROADCAST_DEVICEINTERFACE;
  Size: Integer;
begin
  Size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
  ZeroMemory(@dbi, Size);
  dbi.dbcc_size := Size;
  dbi.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
  dbi.dbcc_reserved := 0;
  dbi.dbcc_classguid := GUID_DEVINTERFACE_SD;
  dbi.dbcc_name := 0;

  RegisterDeviceNotification(FWindowHandle, @dbi, DEVICE_NOTIFY_WINDOW_HANDLE);
end;
delphi meckert nich, un startet das programm ohne fehler.

und nu zur classGUID, ich hab in der registry n bissl gestöbert, und folgende Schlüssel:
  • HK_LocalMachine\Systen\CurrentControlSet\Enum\
  • USBSTOR\'blabla_zeugs,von Cardreader'\000000000020&1\ (wobei es &0 bis &3 gibt)
  • USB\Vid_0dda&Pid_2005\Vid_0dda&Pid_2005\ und
  • STORAGE\RemovableMedia\
  • STORAGE\Volume\

verschiedenste GUIDs gefunden, und halt zugeordnet:
Delphi-Quellcode:
const
  GUID_DEVINTERFACE_SD: TGUID = '{71A27CDD-812A-11D0-BEC7-08002BE2092F}';
er bringt aber keine meldung, beim reinstecken, bzw. rausziehn der Karte.....[delphi]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz