Главная страница
    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.47 MB
Время: 0.059 c
3-1160381969
Prohor
2006-10-09 12:19
2006.12.17
Загрузить из Lines в TreeView


2-1164707125
TrainerOfDolphins
2006-11-28 12:45
2006.12.17
Вот тебе и VarChar ....


2-1164607754
vitv
2006-11-27 09:09
2006.12.17
Edit[i].text-возможно ли это?


15-1164270914
TauRus
2006-11-23 11:35
2006.12.17
Вычисление SIN, как еще можно сделать?


2-1164540980
doncova1
2006-11-26 14:36
2006.12.17
Как в DBGrid изменить высоту строк





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