Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 02.11.16 23:27 
- Nachträglich durch die Entwickler-Ecke gelöscht -


Zuletzt bearbeitet von Frühlingsrolle am Fr 30.06.17 14:23, insgesamt 13-mal bearbeitet

Für diesen Beitrag haben gedankt: Delphi-Laie, t.roller
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 03.11.16 14:21 
- Nachträglich durch die Entwickler-Ecke gelöscht -


Zuletzt bearbeitet von Frühlingsrolle am Fr 30.06.17 18:41, insgesamt 5-mal bearbeitet
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 17.03.17 00:13 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Das im Anhang enthaltene Package ist sowohl auf älteren Delphi Versionen (D7 PE) als auch auf neueren Versionen (D10.1 Starter) installierbar.


Es ist auch schon auf Delphi 6 installierbar.

Delphi 5 kommt hingegen mit dem Befehl

ausblenden Delphi-Quelltext
1:
2:
3:
requires
  rtl,
  vcl;


nicht zurecht, findet die Packages nicht. Warum, weiß ich nicht. "requires" kennen nämlich auch Delphi 5 und sogar Delphi 4 schon.

Edit: Vorher mußte ich noch

ausblenden Delphi-Quelltext
1:
{$ALIGN 8}					


auskommentieren bzw. entfernen, also für den Compiler unsichtbar machen.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.03.17 00:38 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Delphi-Laie
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Fr 17.03.17 01:20 
Man sollte noch einen Versions-Hinweis einbauen, z.B. so:
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:
...
    function GetFreeSize(ADriveLetter: Char): Int64;
    function GetDriverVersion : String;  //<---------------------------
    procedure GetDrives(AList: TStrings; ADriveType: ShortInt); overload;
    procedure GetDrives(AList: TStrings; ADriveType: TDriveTypes); overload;
    property Count: Integer read GetCount;
    property Info[Index: Integer]: TDriveInfo read GetDriveInfo;
  published
    property DriveLetter: string read FDriveLetter write SetDriveLetter;
    property DriveType: TDriveTypes read FDriveType write SetDriveType;
    property Eject: Boolean read FEject write SetEject;
    property DriverVersion: String read GetDriverVersion;   //<---------------------------
  end;
...
function TfrDrive.GetDriverVersion : String;
begin
  Result:= '3.0';
end;
//-------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
caption:= frDrive1.GetDriverVersion;
end;
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.03.17 02:03 
- Nachträglich durch die Entwickler-Ecke gelöscht -
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 18.03.17 23:10 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Forum

Allgemeines:

TfrDrive ist eine nicht-visuelle Delphi Komponente, die einem Anwender dabei helfen soll:
- Laufwerke zu ermitteln und aufzulisten
- (externe) Laufwerke zu trennen / auszuwerfen
- gültige Laufwerke zu erkennen
>> Neu <<
- Laufwerk-Informationen auszulesen

Finde ich sehr interessant! So etwas suche ich gerade, könnte es gut gebrauchen, wenn es "automatisch" erkennt, wenn ich zB. einen USB-Stick anstecke, so, wie der Windows-Explorer das macht, also "bemerkt", dass das entsprechende Laufwerk jetzt bereit ist und beim Abziehen des Sticks auch dies erkennt.
Kann die Komponente das?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 18.03.17 23:42 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
So etwas suche ich gerade, könnte es gut gebrauchen, wenn es "automatisch" erkennt, wenn ich zB. einen USB-Stick anstecke, so, wie der Windows-Explorer das macht, also "bemerkt", dass das entsprechende Laufwerk jetzt bereit ist und beim Abziehen des Sticks auch dies erkennt.
Kann die Komponente das?


Probiere es doch einfach aus!

Nach meinen bescheidenen Kenntnissen ist so etwas (konkret: systemweite Überwachung bestimmter Ereignisse) nur über einen globalen Hook möglich, demnach benötigt man eine Dll-Datei. Hat diese trotzdem sehr gute Komponente jedoch nicht. Deshalb dürfte es nach meiner vorsichtigen Einschätzung damit nichts werden.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 18.03.17 23:51 
- Nachträglich durch die Entwickler-Ecke gelöscht -
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Sa 18.03.17 23:58 
Geht ohne grossen Aufwand:
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
unit Unit1; //20170318

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBT, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    UsbNotifyInfo : TDevBroadcastDeviceinterfaceA;
    UsbDeviceNotificationHandle : Pointer;
    Procedure UsbDeviceChangeNotification(Var Msg : TMessage); MESSAGE WM_DEVICECHANGE;
    { Private declarations }
  public
    { Public declarations }
    Procedure RegisterUsbNotification;
    Procedure UnregisterUsbNotification;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterUsbNotification;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterUsbNotification;
end;

Procedure TForm1.RegisterUsbNotification;
Var
  Error : Cardinal;
Begin
  ZeroMemory(@UsbNotifyInfo, sizeof(UsbNotifyInfo));
  UsbNotifyInfo.dbcc_size := sizeof(TDevBroadcastDeviceInterfaceA);
  UsbNotifyInfo.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
  UsbNotifyInfo.dbcc_reserved := 0;
  UsbNotifyInfo.dbcc_classguid := StringToGuid('{A5DCBF10-6530-11D2-901F-00C04FB951ED}');
  UsbDeviceNotificationHandle := RegisterDeviceNotification(self.Handle, @UsbNotifyInfo, Cardinal(0));
  If UsbDeviceNotificationHandle = NIL Then
  Begin
    Error := GetLastError;
    ShowMessage(Format('Registering Device Notification failed, error code: %d', [Error]));
  End;
End;

Procedure TForm1.UnregisterUsbNotification;
Begin
  If (UsbDeviceNotificationHandle <> NILThen
  Begin
    UnregisterDeviceNotification(UsbDeviceNotificationHandle);
  End;
End;

Procedure TForm1.UsbDeviceChangeNotification(Var Msg : TMessage);
Var
  device : PDevBroadcastHdr;
  DeviceInfoBlock : PDevBroadcastDeviceInterface;
  MyDevice : String;
Begin
  If Msg.Msg = WM_DEVICECHANGE Then
  Begin
  Winapi.windows.Beep(2000,50);
    If Msg.WParam = DBT_DEVICEREMOVECOMPLETE Then
    Begin
      device := PDevBroadcastHdr(Msg.lParam);
      If device.dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE Then
      Begin
        DeviceInfoBlock := PDevBroadcastDeviceInterface(Msg.LParam);
        MyDevice := String(Pchar(@DeviceInfoBlock.dbcc_name));
        MyDevice := Uppercase(MyDevice);
       MM('REMOVAL: '+#13#10+MyDevice);
      End;
    End
    Else
    If Msg.WParam = DBT_DEVICEARRIVAL Then
    Begin
      device := PDevBroadcastHdr(Msg.lParam);
      If device.dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE Then
      Begin
        DeviceInfoBlock := PDevBroadcastDeviceInterface(Msg.LParam);
        MyDevice := String(Pchar(@DeviceInfoBlock.dbcc_name));
        MyDevice := Uppercase(MyDevice);
        MM('ARRIVAL: '+#13#10+MyDevice);
      End;
    End;
  End;
End;

end.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: galagher
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.03.17 01:28 
- Nachträglich durch die Entwickler-Ecke gelöscht -


Zuletzt bearbeitet von Frühlingsrolle am Fr 30.06.17 14:09, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: galagher
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: So 19.03.17 08:04 
Leider stürzt das Programm ab bei FOnDeviceConnected und FOnDeviceDisconnected.
Version fehlt: function GetVersion: string; muss unter public
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.03.17 13:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: So 19.03.17 20:33 
Crash beim Abziehen und/oder Anstecken eines USB-Sticks.
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.03.17 20:50 
- Nachträglich durch die Entwickler-Ecke gelöscht -
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: So 19.03.17 20:53 
Das ist nicht die Ursache.
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.03.17 21:06 
- Nachträglich durch die Entwickler-Ecke gelöscht -
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: So 19.03.17 21:19 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Und nein, GetVersion muss nicht unter public sein. :)


Ich hatte es anders in der Unit1:

ausblenden Delphi-Quelltext
1:
caption:= frDrive2.GetVersion;					

statt
ausblenden Delphi-Quelltext
1:
caption:= frDrive2.Version;					


Aber wenn es public ist, kann man beide verwenden... :)

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: So 19.03.17 21:27 
Seltsam: Deine EXE funktioniert, die unveränderte Compilation mit XE7 führt zum Absturz.
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.03.17 21:30 
- Nachträglich durch die Entwickler-Ecke gelöscht -