Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.02.2018, 20:26
portal portal вне форума
Прохожий
 
Регистрация: 08.02.2018
Сообщения: 2
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Хотели Кука, а съели хука

Здравствуйте всем!
Когда-то во времена XP прекрасно работала функция SetWindowsHookEx,
но в Widows 7(а может и в Висте), перестала, не помогали никакие манифесты, есть ли сейчас что-либо подобное SetWindowsHookEx для Windows7,8,10 ? Спасибо за информацию.
Ответить с цитированием
  #2  
Старый 08.02.2018, 21:52
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,139
Версия Delphi: 7, XE3, 10.2
Репутация: 49086
По умолчанию

Да, вроде, должно работать, согласно МСДН.
Но там теперь есть ограничения.
1. Битность dll и процесса должна совпадать. Т.е. для 32 битного процесса должна быть соотвественно 32 битная dll, а для 64 битного - 64 битная dll.
2. Имена 32х и 64х битных dll должны быть разные
3. Для Windows Store процессов/приложений надо обязательно давать dwThreadId, инача хук не поставится.
Ответить с цитированием
  #3  
Старый 09.02.2018, 11:44
portal portal вне форума
Прохожий
 
Регистрация: 08.02.2018
Сообщения: 2
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Да, вроде, должно работать, согласно МСДН.
Но там теперь есть ограничения.
1. Битность dll и процесса должна совпадать. Т.е. для 32 битного процесса должна быть соотвественно 32 битная dll, а для 64 битного - 64 битная dll.
2. Имена 32х и 64х битных dll должны быть разные
3. Для Windows Store процессов/приложений надо обязательно давать dwThreadId, инача хук не поставится.

Спасибо за ответ, но насколько я помню именно SetWindowsHookEx работает без dll, по 3 пункту так делать не пробовал,но попробую.
Интересно кто-нибудь пользовался этой функцией для windows 7 и выше, и какой результат?
Ответить с цитированием
  #4  
Старый 09.02.2018, 17:31
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 273
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

юзал только мышь. на 7/10 х64 вполне работает. без длл
Код:
  MouseHook := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, HInstance, 0);
Код:
function LowLevelMouseProc(nCode: Integer; WParam: WParam; LParam: LParam)
  : LRESULT; stdcall;
begin
  if nCode >= 0 then
  begin
   
    case WParam of
      WM_LBUTTONUP:
        begin
   ...
        end;

    end;
  end
...

Последний раз редактировалось nixon232, 09.02.2018 в 17:48.
Ответить с цитированием
  #5  
Старый 10.02.2018, 00:09
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,139
Версия Delphi: 7, XE3, 10.2
Репутация: 49086
По умолчанию

А можно спросить такой вот странный вопрос - нифига хукать свое окно? Что, просто написать свой обработчик сообщения религия не позволяет? Или воспольщоваться AppEvents.OnMessage?
Эта функция как раз полезна для отлова сообщений в ЧУЖИХ окнах...
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter