Главная страница
    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.039 c
2-1164868094
pavel_guzhanov
2006-11-30 09:28
2006.12.17
Работа с XML


15-1164730131
WErqw
2006-11-28 19:08
2006.12.17
Ну дайте решение задачи коммивояжера!!!


2-1164721063
KyRo
2006-11-28 16:37
2006.12.17
Как узнать что система не висит.


15-1164687154
DelphiN!
2006-11-28 07:12
2006.12.17
Отключить использование Proxy сервера в компоненте TWebBrowser


6-1153812560
Kacnep
2006-07-25 11:29
2006.12.17
Динамическая привязка OnConnect в КОНСОЛЬНОМ приложении





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский