Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

Отследить подключение устройства в без оконом приложении   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
2-1239291893
SP
2009-04-09 19:44
2009.05.24
Как из cgi-приложения узнать запущены ли другие его копии?


15-1237604382
baldyman
2009-03-21 05:59
2009.05.24
Клиентский интерфейс под Windows, а само приложение на Unix e


2-1239114286
микола
2009-04-07 18:24
2009.05.24
делфи и єксель


2-1239259328
worldmen
2009-04-09 10:42
2009.05.24
Ошибки при добавление картинок в БД Interbase


2-1239340712
И. Павел
2009-04-10 09:18
2009.05.24
Отслеживание смены форматов.