Форум: "WinAPI";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизWM_DEVICECHANGE Найти похожие ветки
← →
imbalacedees (2006-08-11 23:05) [0]Доброго времени суток.
Пытаюсь поймать момент подключения USB устройств, делаю так:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, UsbTypes;
type
TFormMain = class(TForm)
Button1: TButton;
LogListBox: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMDeviceChange(var aMessage: TMessage); message WM_DEVICECHANGE;
.....
....
procedure TFormMain.WMDeviceChange(var aMessage: TMessage);
var Msg:string;
begin
inherited;
Case aMessage.wParam of
DBT_DEVICEARRIVAL:
begin
ShowMessage("Ïîäêëþ÷åíî óñòðîéñòâî");
end;
DBT_DEVICEREMOVECOMPLETE:
begin
ShowMessage("Óñòðîéñòâî óäàëåíî");
end;
DBT_DEVTYP_VOLUME:
begin
ShowMessage("Íîâûé ëîãè÷åñêè äèñê");
end;
end;
end;
Но ничего не происходит, в чем ошибка?
← →
GanibalLector © (2006-08-11 23:37) [1]> поймать момент подключения USB устройств
А что за устройство?
Кстати,в случае подключения флешки,сообщение ты увидишь. Я правда не знаю где ты взял UsbTypes и чему равны там DBT_DEVICEARRIVAL и прочие.
← →
imbalacedees (2006-08-11 23:42) [2]
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;
const DBT_DEVTYP_VOLUME = $00000002;
Мне как раз и нужно отловить момент подключения/отключения флешки, но т.к. нет под рукой(флешки), проверял на принтере
← →
GanibalLector © (2006-08-11 23:50) [3]Это от того,что принтер не является HID-устройством и система не оязана на него реагировать. На флешку отреагирует и ты увидишь сообщение.
Ну,а если хочется видеть все,то :
// нашел на просторах инета
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const DBT_DEVICEARRIVAL = $8000;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
procedure WMDeviceChange( var Msg: TMessage ); message WM_DEVICECHANGE;
{ Private declarations }
public
{ Public declarations }
end;
DevBroadcastIface = record
dbcc_size: Integer;
dbcc_devicetype: Integer;
dbcc_reserved: Integer;
dbcc_classguid: TGUID;
dbcc_name: array[ 0..128 ] of Char;
end;
PDevBroadcastIface = ^DevBroadcastIface;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var x: PDevBroadcastIface;
begin
// do somethig
Memo1.Lines.Add( "msg: " + IntToHex( Msg.WParam, 8 ) );
if Msg.WParam = DBT_DEVICEARRIVAL then // ê êîìïó ïîäêëþ÷èëè äåâàéñ...
begin
x := PDevBroadcastIface( Msg.lParam );
Memo1.Lines.Add( "INSERTION..." );
Memo1.Lines.Add( "type: " + IntToStr( x.dbcc_devicetype ) );
Memo1.Lines.Add( "guid: " + GUIDToString( x.dbcc_classguid ) );
Memo1.Lines.Add( "name: " + x.dbcc_name );
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var x: DevBroadcastIface;
begin
x.dbcc_size := sizeof( x );
x.dbcc_devicetype := 5;
RegisterDeviceNotification( Handle, @x, DEVICE_NOTIFY_WINDOW_HANDLE or 4 );
end;
end.
← →
Чапаев © (2006-08-12 09:14) [4]
> Это от того,что принтер не является HID-устройством и система
> не оязана на него реагировать.
А что такое HID-устройства? У меня система к HID относит USB-мышку и UPS, но всевозможные флэшки (собственно флэшка, плеер, телефон) к HID не относит, по крайней мере, визуально.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c