Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1237805266
немо2
2009-03-23 13:47
2009.05.24
Чем Express Editions отличаются от других версий SQL Server?


2-1239019902
Лёша
2009-04-06 16:11
2009.05.24
Как из цвета получить его негатив?


15-1237533790
oldman
2009-03-20 10:23
2009.05.24
Пропадает визуализация данных в dbgrid


3-1221466747
pushkin42
2008-09-15 12:19
2009.05.24
Обратный запрос


15-1237481049
Riply
2009-03-19 19:44
2009.05.24
Наличие ZwCreateNamedPipeFile в Vista и 7- ке.





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