![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Service(служба) и Windows vista [D7]
alex.rus © (2010-08-25 09:06:00)Здравствуйте.
Есть служба полностью работает на ХР, служба просто выводит сообщение, но под вистой не хочет работать, т.е. она запускается, в службах стоит статус что работает, но ни одного сообщения не выводит. галочка "Разрешить взаимодействие с рабочим столом" стоит. Запускал от разных пользователей и от локального админа и от админа домена. И устанавливал службу тоже от разных пользователей результат один и тот же.
Сергей М. (2010-08-25 11:35:00) [21]
> екзешник грузит сам себя как ДЛЛку ну чтоб обойтись без
> лишних ДЛЛ
>
Хук WH_KEYBOARD_LL = 13 не требует никаких DLL.
Убирай.
> без этого
> While GetMessage(Msg, 0, 0, 0) Do
> Begin
> TranslateMessage(Msg);
> DispatchMessage(Msg);
> End;
> в ХР не работало
И кто же твоему сервису, крутящемуся, как я полагаю, в доп.потоке, будет посылать WM_QUIT для выхода из этого цикла ?
alex.rus (2010-08-25 11:28:00) [22]Перехват сообщений от клавиатуры (нажатия клавиш имеется ввиду)
Вот это
Exe := GetModuleHandle(nil);
If (hExe <> 0) Then hExe := LoadLibrary(PChar(ParamStr(0)));
екзешник грузит сам себя как ДЛЛку ну чтоб обойтись без лишних ДЛЛ
ну а вот без этого
While GetMessage(Msg, 0, 0, 0) Do
Begin
TranslateMessage(Msg);
DispatchMessage(Msg);
End;
в ХР не работало
Сообщения обрабатывались SetWindowsHookEx(13, @HookProc, hExe, 0); функцией HookProc
Anatoly Podgoretsky (2010-08-25 11:23:00) [23]> alex.rus (25.08.2010 10:58:03) [3]
sniknik знал!
Сергей М. (2010-08-25 11:09:00) [24]
> Ноок на перехват сообщений
Каким боком к этому относится число "13" ?
> hExe := GetModuleHandle(nil);
> If (hExe <> 0) Then hExe := LoadLibrary(PChar(ParamStr(0)));
>
А это что за шаманство ?
> While GetMessage(Msg, 0, 0, 0) Do
> Begin
> TranslateMessage(Msg);
> DispatchMessage(Msg);
> End;
Это зачем ? Твоему сервису кто-то кроме SCM посылает сообщения что ли ? Тогда где и как ты их обрабатываешь ?
alex.rus (2010-08-25 10:58:00) [25]Спасибо sniknik не знал что может выводиться сообщение не на тот раб. стол. А вот в файл все прекрасно выводиться. Сообщения я делал для проверки.
А вообще мне нужно поставить Ноок на перехват сообщений.
делаю так (В ХР работало):
hExe := GetModuleHandle(nil);
If (hExe <> 0) Then hExe := LoadLibrary(PChar(ParamStr(0)));
If (hExe = 0) Then Halt(0);
hHook := SetWindowsHookEx(13, @HookProc, hExe, 0);
While GetMessage(Msg, 0, 0, 0) Do
Begin
TranslateMessage(Msg);
DispatchMessage(Msg);
End;
If (hHook <> 0) Then UnhookWindowsHookEx(hHook);
В результате
hExe <> 0 и hHook<>0
Но до процедуры HookProc дело не доходит т.е. тело функции не выполняется
я вот думаю может в висту не утраивает в этой функции SetWindowsHookEx(13, @HookProc, hExe, 0); первый параметр ?
Anatoly Podgoretsky (2010-08-25 10:13:00) [26]> alex.rus (25.08.2010 09:06:00) [0]
А что в логах?
sniknik (2010-08-25 09:24:00) [27]совместимость с XP в свойствах файла службы поставь. на висте она может и "просто выводит сообщение", но не на тот рабочий стол, сделай вместо него сохранение в файл, это же просто для проверки? в рабочей версии от сообщений лучше вообще отказаться.