AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

Ein Thema von AlexII · begonnen am 30. Jun 2015 · letzter Beitrag vom 4. Jul 2015
Antwort Antwort
Seite 2 von 3     12 3      
hathor
(Gast)

n/a Beiträge
 
#11

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 2. Jul 2015, 13:42
Mit LAZARUS 1.4.0 getestet:

Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  OldWProc: WNDPROC;

implementation

{$R *.lfm}

{ TForm1 }

const DBT_DEVICEARRIVAL = $8000;
//const DBT_DEVICEQUERYREMOVE = $8001;
//const DBT_DEVICEQUERYREMOVEFAILED = $8002;
//const DBT_DEVICEREMOVEPENDING = $8003;
const DBT_DEVICEREMOVECOMPLETE = $8004;
//const DBT_DEVICETYPESPECIFIC = $8005;
//const DBT_CONFIGCHANGED = $0018;

procedure MM(s:string); begin Form1.Memo1.lines.add(s); end;

procedure FindDrives;
var
  Drive: Char;
  DriveLetter: string;
begin
  MM('The following drives were found in this computer:');
  MM('');
  // Search all drive letters
  for Drive := 'Ato 'Zdo
  begin
    DriveLetter := Drive + ':\';
    case GetDriveType(PChar(DriveLetter)) of
     DRIVE_REMOVABLE: MM(DriveLetter + ' USB Stick/Drive');
     DRIVE_FIXED: MM(DriveLetter + ' Fixed Drive');
     DRIVE_REMOTE: MM(DriveLetter + ' Network Drive');
     DRIVE_CDROM: MM(DriveLetter + ' CD/DVD/BR Drive');
     DRIVE_RAMDISK: MM(DriveLetter + ' RAM Disk');
    end;
  end;
  MM('------------------------------------------------');
end;

function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  case uiMsg of
    WM_DEVICECHANGE:
  case wParam of
  DBT_DEVICEARRIVAL:
      begin
        Windows.Beep(1000,250); Windows.Beep(1500,250);
          Form1.Memo1.clear;
          MM('DEVICECHANGE: Drive added.');
        FindDrives;
        Exit;
      end;
  DBT_DEVICEREMOVECOMPLETE:
      begin
        Windows.Beep(2000,250); Windows.Beep(1500,250);
          Form1.Memo1.clear;
          MM('DEVICECHANGE: Drive removed.');
        FindDrives;
        Exit;
      end;
  end;
  end;
  Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam);
end;

procedure SetMyWndProc(Handle : THandle);
begin
     OldWProc := WNDPROC(SetWindowLongPtr(Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc)));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     SetMyWndProc(Handle);
     FindDrives;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.clear;
  FindDrives;
end;

end.
Angehängte Dateien
Dateityp: zip FindDrives.zip (574,5 KB, 27x aufgerufen)

Geändert von hathor ( 2. Jul 2015 um 13:50 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#12

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 2. Jul 2015, 14:41
Mit LAZARUS 1.4.0 getestet:
Funktioniert mit einem USB-Stick, aber nicht mit einer Speicherkarte.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#13

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 2. Jul 2015, 16:48
Bei meinem Notebook wird die SD-Card (POPPSTAR 32GB) erkannt.

Geändert von hathor ( 2. Jul 2015 um 16:51 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#14

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 2. Jul 2015, 17:50
Bei meinem Notebook wird die SD-Card (POPPSTAR 32GB) erkannt.
Am Rechnersystem, an dem ich Deinen Code getestet hatte, hängt an einem USB-Anschluß ein CardReader, welchem immer 4 Laufwerke zugeordnet sind.

Es wird also kein Laufwerk erzeugt, wenn eine Karte eingesteckt wird und kein Laufwerk entfernt, wenn die Karte herausgenommen wird.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#15

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 2. Jul 2015, 21:23
Ich weiß nicht unter was der fest eingebauter CardReader läuft, aber ein Wechsellaufwerk sollte es nicht sein. Somit sollte auch keine Meldung kommen, denn das Laufwerk ist schon da und bleibt, lediglich ein Speichermedium wird gemountet. Wenn du also ein DS Karte einsteckst, dann ist es genau so wie wenn du eine CD in das CD Laufwerk einlegst.

Neben den bei hathors Code aufgelisteten Laufwerke gibt es noch paar andere:


Delphi-Quellcode:
function DriveType(DriveByte: Byte): String;
begin
  case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of
    DRIVE_UNKNOWN: Result := 'unbekannt';
    DRIVE_NO_ROOT_DIR: Result := 'Laufwerk existiert nicht';
    DRIVE_REMOVABLE: Result := 'Wechselmedium';
    DRIVE_FIXED: Result := 'Festplatte';
    DRIVE_REMOTE: Result := 'Netzwerk';
    DRIVE_CDROM: Result := 'CD-ROM/DVD';
    DRIVE_RAMDISK: Result := 'RAM Disk';
  else
    Result := 'anderer Laufwerkstyp';
  end;
end;
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 3. Jul 2015, 18:03
Bei mir läuft der Code von hathor irgendwie instabil. Mal läuft alles, die Laufwerke werden erkannt und angezeigt, mal nicht...

Nachtrag: hab's rausgefunden wieso. In FormCreate muss noch SetMyWndProc(Handle); rein.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  SetMyWndProc(Handle); // <-------
  FindDrives;
end;

Schade nur, dass das die SD-Karten nicht erkennt, dass in einen bereits angeschlossenen Card-Reader eingesteckt werden. Wie bereits im #14 erwähnt.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII ( 3. Jul 2015 um 18:11 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#17

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 3. Jul 2015, 22:06
Das ist jetzt nur so ins Freie geschossen, aber bei einer SD Karte würde ich nicht prüfen ob ein Laufwerk gewechselt wurde, sondern eher ob ein neuer Datenträger gemountet wurde.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 4. Jul 2015, 11:00
Um in meiner App mit zu bekommen, ob ein Datenträger eingelegt wurde, verwende ich das da
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#19

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 4. Jul 2015, 11:17
Das ist jetzt nur so ins Freie geschossen, aber bei einer SD Karte würde ich nicht prüfen ob ein Laufwerk gewechselt wurde, sondern eher ob ein neuer Datenträger gemountet wurde.
Das stimmt, nur muss eine Message an die App darüber gesendet werden.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Erkennen, ob USB-Stick oder SD-Card eingesteckt oder herausgenommen?

  Alt 4. Jul 2015, 11:20
Um in meiner App mit zu bekommen, ob ein Datenträger eingelegt wurde, verwende ich das da
Was meinst Du mit "eingelegt"? Ob ein Laufwerk X: oder so auftaucht oder ob ein Datenträger gemountet wurde?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:57 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