Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1164540601
Nic
2006-11-26 14:30
2006.12.17
Nokia N70 (or N72) vs SE K750 (or K790 or W810)


15-1164538041
Petr V. Abramov (not at home)
2006-11-26 13:47
2006.12.17
Оптимизация загрузки станков


15-1164542000
Чапаев
2006-11-26 14:53
2006.12.17
Пакеты


15-1164573191
WondeRu
2006-11-26 23:33
2006.12.17
Вопросы в "Потрепаться" за январь 2005


15-1163509008
TauRus
2006-11-14 15:56
2006.12.17
Помощь по заданию на Паскале.Поможет кто-то?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский