![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Задача была в следующем получить какое-нибудь сообщение на подкл. 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; |