Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2009, 12:18   #1
mosian
 
Регистрация: 22.07.2009
Сообщений: 4
По умолчанию Перехват сообщений в сервисе

Задача была в следующем получить какое-нибудь сообщение на подкл. USB устройства
ServiceProc – основной поток сервиса
ServiceCtrlHandler – Обработчик сообщенок.
Сервису не приходят дополнительные сообщения SERVICE_CONTROL_DEVICEEVENT но стандартные сообщения на старт стоп сервиса проходят.
Помогите разобраться, в чём подвох уже неделю бьюсь.

Код:
function ServiceCtrlHandler(dwControl: DWORD; dwEventType: DWORD; lpEventData, lpContext: LParam): BOOL; stdcall;
 begin
     ErrortoFile(inttostr(dwControl)); //Записываю любой пришедший код
   ......
 end;

{************************ Оснавная Функция сервиса ****************************}
procedure ServiceProc(argc : DWORD;var argv : array of PChar);stdcall;
var RegDN :pointer;
      dbi         :dev_broadcast_deviceinterface;
      size       :integer;
 begin
   RegDeregLog_Service;                                         //Подцепляем лог файл к службе если удачно fEventLog<>0
   SERV_STATUS.dwServiceType      := SERVICE_WIN32_OWN_PROCESS; //тип сервиса
   SERV_STATUS.dwCurrentState     := SERVICE_START_PENDING;     //Сервис находится в процессе запуска
   SERV_STATUS.dwControlsAccepted := SERVICE_ACCEPT_STOP;       //Сервис может быть остановлен.
   SERV_STATUS.dwWin32ExitCode           := NO_ERROR;
   SERV_STATUS.dwServiceSpecificExitCode := 0;
   SERV_STATUS.dwCheckPoint              := 0;
   SERV_STATUS.dwWaitHint                := 5000;           //Время необх. для полной рег. службы
   advapi32 := LoadLibrary('advapi32.dll');
   RegisterServiceCtrlHandlerEx:=GetProcAddress(advapi32, 'RegisterServiceCtrlHandlerExA');

   SERV_Handle := RegisterServiceCtrlHandlerEx(c_ServiceName,@ServiceCtrlHandler,1); //Регистрируем службу

   if SERV_Handle <> 0 then
    begin
      SERV_STATUS.dwCurrentState :=SERVICE_RUNNING; //меняем статус на запуск
      SERV_STATUS.dwCheckPoint   :=0;
      SERV_STATUS.dwWaitHint     :=0;
      SetServiceStatus(SERV_Handle,SERV_STATUS);    //Запуск сервиса

      size := sizeof(dev_broadcast_deviceinterface);
      zeromemory(@dbi, size);
      dbi.dbcc_size := size;
      dbi.dbcc_devicetype := dbt_devtyp_deviceinterface;
      dbi.dbcc_reserved := 0;
      dbi.dbcc_classguid := guid_devinterface_usb_device;
      dbi.dbcc_name := 0;
      RegDN := Registerdevicenotification(SERV_Handle,@dbi,1);

      //ОСНОВНОЙ КОД ПРОГРАММЫ
      repeat
        sleep(200);
      until SERV_STATUS.dwCurrentState = SERVICE_STOPPED;
mosian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват сообщений icQ Xandr Работа с сетью в Delphi 6 10.08.2010 15:09
Время сообщений DeKot О форуме и сайтах клуба 1 23.02.2009 23:55
Перехват и обработка сообщений Mail.ru агента NikLik Работа с сетью в Delphi 4 22.07.2008 15:39
Перехват сообщений от Службы сообщений (Messenger) SJMS Win Api 6 17.07.2008 10:26
Перехват сообщений rubi Win Api 3 06.09.2007 00:25