Малко помощ
5 отговора
0 прегледа
Малко помощ
Здравейте,
Бих искал да помоля за малко помощ.
бихте ли ме насочили как да разбера когато USB drive се plug/unplug-ва
в компа.
Благодаря
Бих искал да помоля за малко помощ.
бихте ли ме насочили как да разбера когато USB drive се plug/unplug-ва
в компа.
Благодаря
Я пробвай това дали работи
unit Unit1;
interface
uses
Windows, Messages, Classes, Forms, StdCtrls, Controls;
type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
protected
procedure WMDEVICECHANGE(var Msg: TMessage); message WM_DEVICECHANGE;
public
{ Public declarations }
end;
// Device constants
const
DBT_DEVICEARRIVAL = $00008000;
DBT_DEVICEREMOVECOMPLETE = $00008004;
DBT_DEVTYP_VOLUME = $00000002;
// Device structs
type
_DEV_BROADCAST_HDR = packed record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
end;
DEV_BROADCAST_HDR = _DEV_BROADCAST_HDR;
TDevBroadcastHeader = DEV_BROADCAST_HDR;
PDevBroadcastHeader = ^TDevBroadcastHeader;
type
_DEV_BROADCAST_VOLUME = packed record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
dbcv_unitmask: DWORD;
dbcv_flags: WORD;
end;
DEV_BROADCAST_VOLUME = _DEV_BROADCAST_VOLUME;
TDevBroadcastVolume = DEV_BROADCAST_VOLUME;
PDevBroadcastVolume = ^TDevBroadcastVolume;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDEVICECHANGE(var Msg: TMessage);
var lpdbhHeader: PDevBroadcastHeader;
lpdbvData: PDevBroadcastVolume;
dwIndex: Integer;
lpszDrive: String;
begin
// Perform inherited
inherited;
// Get the device notification header
lpdbhHeader:=PDevBroadcastHeader(Msg.lParam);
// Handle the message
lpszDrive:='Drive ';
case Msg.WParam of
DBT_DEVICEARRIVAL :
begin
if (lpdbhHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then
begin
lpdbvData:=PDevBroadcastVolume(Msg.lParam);
for dwIndex:=0 to 25 do
begin
if ((lpdbvData^.dbcv_unitmask shr dwIndex) = 1) then
begin
lpszDrive:=lpszDrive+Chr(65+dwIndex);
break;
end;
end;
Label1.Caption:=lpszDrive+' available';
end;
end;
DBT_DEVICEREMOVECOMPLETE:
begin
if (lpdbhHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then
begin
lpdbvData:=PDevBroadcastVolume(Msg.lParam);
for dwIndex:=0 to 25 do
begin
if ((lpdbvData^.dbcv_unitmask shr dwIndex) = 1) then
begin
lpszDrive:=lpszDrive+Chr(65+dwIndex);
break;
end;
end;
Label1.Caption:=lpszDrive+' removed';
end;
end;
end;
end;
end.
Linux isn't free, it's worthless.
Re: Я пробвай това дали работи
Какво означава "не тръгва"? Натискаш F9, показва се диалога за компилиране и си седи така?
Получаваш ли WM_DEVICECHANGE съобщения? С каква версия на Delphi си? С каква версия на Windows си? По принцип показват ли се на Windows-а прозорците за избор на действие, когато си включиш флашката? Да не го пробваш на виртуална машина? Да не си пускал някой тул за "оптимизиране" на Windows-а? Променял ли си кода на примера? Нещо друго?...
Linux isn't free, it's worthless.
Получаваш ли WM_DEVICECHANGE съобщения? С каква версия на Delphi си? С каква версия на Windows си? По принцип показват ли се на Windows-а прозорците за избор на действие, когато си включиш флашката? Да не го пробваш на виртуална машина? Да не си пускал някой тул за "оптимизиране" на Windows-а? Променял ли си кода на примера? Нещо друго?...
Linux isn't free, it's worthless.
Re: Я пробвай това дали работи
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//
end;
procedure TForm1.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
DBT_DEVICEARRIVAL: myMsg := 'vklu4eno!';
DBT_DEVICEREMOVECOMPLETE: myMsg := 'izklu4eno!';
end;
Label1.Caption:= myMsg;
end;
end.
Това работи
естествнно че съм бъркъл навсякъде
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//
end;
procedure TForm1.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
DBT_DEVICEARRIVAL: myMsg := 'vklu4eno!';
DBT_DEVICEREMOVECOMPLETE: myMsg := 'izklu4eno!';
end;
Label1.Caption:= myMsg;
end;
end.
Това работи
естествнно че съм бъркъл навсякъде
Редактирано от Timo на