Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];
ВнизОтследить подключение устройства в без оконом приложении Найти похожие ветки
← →
dreamse (2009-04-06 11:45) [0]Приветствую. Есть код для отслеживания подключения различных устройств ( 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.
← →
Palladin © (2009-04-06 11:46) [1]Data Module - это приложение чтоли?
← →
Anatoly Podgoretsky © (2009-04-06 12:12) [2]> dreamse (06.04.2009 11:45:00) [0]
Это "TForm1" у нас уже безоконное приложение?
← →
Сергей М. © (2009-04-06 12:32) [3]
> Хочу поместить его в сервис который не имеет окон
В твоем случае как минимум одно имеет.
А если бы даже и не имел, то ничто не мешает заиметь его, например, вызовом AllocHWnd().
← →
dreamse (2009-04-06 12:36) [4]> Palladin © (06.04.09 11:46) [1]
Это дата модуль.
> Anatoly Podgoretsky © (06.04.09 12:12) [2]
Это просто пример. В котором работает все.
Вопрос был как сделать чтобы это же заработало в сервисе где нет окон.
← →
dreamse (2009-04-06 12:44) [5]> Сергей М. © (06.04.09 12:32) [3]
Не могу негде найти к сожалению описание AllocHWnd()
Синтаксис верный ?
← →
Сергей М. © (2009-04-06 12:47) [6]AllocateHWnd
← →
Сергей М. © (2009-04-06 12:53) [7]В простейшем случае в вызове AllocateHWnd нет необходимости - сообщения существующему окну контролируются в теле обработчика, назначаемого св-ву-событию Forms.Application.OnMessage
← →
Anatoly Podgoretsky © (2009-04-06 13:03) [8]> dreamse (06.04.2009 12:44:05) [5]
Не в той справке ищешь.
← →
Anatoly Podgoretsky © (2009-04-06 13:05) [9]> Сергей М. (06.04.2009 12:53:07) [7]
Которое тоже у него есть.
← →
Сергей М. © (2009-04-06 13:19) [10]
> Anatoly Podgoretsky © (06.04.09 13:05) [9]
Не понял, у кого "у него" ?
← →
dreamse (2009-04-06 13:21) [11]Всем спасибо, нашел, буду разбираться.
← →
Anatoly Podgoretsky © (2009-04-06 13:23) [12]> Сергей М. (06.04.2009 13:19:10) [10]
У автора - uses ..., Forms, ...
← →
dreamse (2009-04-06 13:33) [13]> Anatoly Podgoretsky © (06.04.09 13:23) [12]
Повторю еще раз.
ЭТО ПРИМЕР. Так как программа работает. Не нужно от нее отталкиваться.
Это пример того как программа работает.
Спасибо большое :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c