Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
15-1164713419
sergey888
2006-11-28 14:30
2006.12.17
Скончалась Любовь Полищук


2-1164519166
APiC
2006-11-26 08:32
2006.12.17
CreateThread


15-1164777571
sapsi
2006-11-29 08:19
2006.12.17
Работа в Яндекс


15-1164723562
TUser
2006-11-28 17:19
2006.12.17
Чего только не бывает ...


3-1160471424
Sergiio
2006-10-10 13:10
2006.12.17
ADO, узнать индекс текущей строки