![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отследить подключение устройства в без оконом приложении [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 - это приложение чтоли?