Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отследить подключение устройства в без оконом приложении [D7, 2000, XP, 2003]


dreamse ©   (2009-04-06 11:45:00) 

Приветствую. Есть код для отслеживания подключения различных устройств ( Flash и пр).

Не могу разобраться как код адаптировать к без оконному приложению ( например в Data Module

Хочу поместить его в сервис который не имеет окон и потому не может перехватить сообщение.

Сам код:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls, DBT;

type
 TForm1 = class(TForm)
   lbDevice: TListBox;
 private
   {обработчик сообщения WM_DEVICECHANGE}
   procedure WMDEVICECHANGE(var Msg : TWMDeviceChange); message WM_DEVICECHANGE;
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{обработчик сообщения WM_DEVICECHANGE}
procedure TForm1.WMDEVICECHANGE(var Msg: TWMDeviceChange);
var
 lpdb  : PDevBroadcastHdr;
 lpdbv : PDevBroadcastVolume;
 lpdbpr: PDevBroadCastPort;
 S : String;
begin
{Заголовок сообщения}
lpdb := PDevBroadcastHdr(Msg.dwData);

{Отображаем код события}
lbDevice.Items.Add('Обнаружено событие. Код:'+IntToHex(Msg.Event, 4));

Case Msg.Event of
 DBT_DEVICEARRIVAL: begin {Добавление}
  lbDevice.Items.Add('>Добавлено устройство. Код:'+IntToHex(lpdb^.dbch_devicetype, 4));

  { Новое устройство - порт (последовательный или параллельный) }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
   lpdbpr:= PDevBroadCastPort(Msg.dwData);
   lbDevice.Items.Add('>>Добавлен порт. Имя:'+WideCharToString(@lpdbpr.dbcp_name));
  End;

  { Новое устройство - логический диск }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
   lpdbv := PDevBroadcastVolume(Msg.dwData);
   lbDevice.Items.Add('>>Добавлен логический диск');
  End;
 End;

 DBT_DEVICEREMOVECOMPLETE: begin {Удаление}
  lbDevice.Items.Add('>Удалено устройство. Код:'+IntToHex(lpdb^.dbch_devicetype, 4));

  { Удаленное устройство - порт (последовательный или параллельный) }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_PORT then begin
   lpdbpr:= PDevBroadCastPort(Msg.dwData);
   lbDevice.Items.Add('>>Удален порт. Имя:'+WideCharToString(@lpdbpr.dbcp_name));
  End;

  { Удаленное устройство - логический диск }
  If lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then begin
   lpdbv := PDevBroadcastVolume(Msg.dwData);
   lbDevice.Items.Add('>>Удален логический диск');
  End;
 End;
End;

end;

end.


dreamse   (2009-04-06 13:33:00) [1]

> Anatoly Podgoretsky ©   (06.04.09 13:23) [12]

Повторю еще раз.

ЭТО ПРИМЕР. Так как программа работает. Не нужно от нее отталкиваться.

Это пример того как программа работает.

Спасибо большое :)


Anatoly Podgoretsky   (2009-04-06 13:23:00) [2]

> Сергей М.  (06.04.2009 13:19:10)  [10]

У автора - uses ..., Forms, ...


dreamse   (2009-04-06 13:21:00) [3]

Всем спасибо, нашел, буду разбираться.


Сергей М.   (2009-04-06 13:19:00) [4]


> Anatoly Podgoretsky ©   (06.04.09 13:05) [9]


Не понял, у кого "у него" ?


Anatoly Podgoretsky   (2009-04-06 13:05:00) [5]

> Сергей М.  (06.04.2009 12:53:07)  [7]

Которое тоже у него есть.


Anatoly Podgoretsky   (2009-04-06 13:03:00) [6]

> dreamse  (06.04.2009 12:44:05)  [5]

Не в той справке ищешь.


Сергей М.   (2009-04-06 12:53:00) [7]

В простейшем случае в вызове AllocateHWnd нет необходимости - сообщения существующемуокну контролируются в теле обработчика, назначаемого св-ву-событию Forms.Application.OnMessage


Сергей М.   (2009-04-06 12:47:00) [8]

Alloc ateHWnd


dreamse   (2009-04-06 12:44:00) [9]

> Сергей М. ©   (06.04.09 12:32) [3]

Не могу негде найти к сожалению описание AllocHWnd()

Синтаксис верный ?


dreamse   (2009-04-06 12:36:00) [10]

> Palladin ©   (06.04.09 11:46) [1]

Это дата модуль.

> Anatoly Podgoretsky ©   (06.04.09 12:12) [2]

Это просто пример. В котором работает все.
Вопрос был как сделать чтобы это же заработало в  сервисе где нет окон.


Сергей М.   (2009-04-06 12:32:00) [11]


> Хочу поместить его в сервис который не имеет окон


В твоем случае как минимум одно имеет.
А если бы даже и не имел, то ничто не мешает заиметь его, например, вызовом AllocHWnd().


Anatoly Podgoretsky   (2009-04-06 12:12:00) [12]

> dreamse  (06.04.2009 11:45:00)  [0]

Это "TForm1" у нас уже безоконное приложение?


Palladin   (2009-04-06 11:46:00) [13]

Data Module - это приложение чтоли?


Наверх

Титульная страница Поиск, карта сайта Написать письмо