Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Service(служба) и Windows vista [D7]


Страницы:   1 2

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 в свойствах файла службы поставь. на висте она может и "просто выводит сообщение", но не на тот рабочий стол, сделай вместо него сохранение в файл, это же просто для проверки? в рабочей версии от сообщений лучше вообще отказаться.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо