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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2014, 23:57   #1
WestSide
 
Регистрация: 09.01.2011
Сообщений: 8
По умолчанию Глобальный хук на клаву и мышь БЕЗ dll

Код:
function LowLevelKeyboardProc(nCode:Integer; WParam:WPARAM; LParam:LPARAM) : LRESULT stdcall;
begin
  WriteLn(GetTickCount); // Form1.Label1.Caption:=IntToStr(GetTickCount);
  Result:=CallNextHookEx(hHook1,nCode,WParam,LParam);
end;

function StartTimer:Boolean;
begin
  Result:=False;
  hHook1:=SetWindowsHookEx(13,@LowLevelKeyboardProc,HInstance,0);
  hHook2:=SetWindowsHookEx(14,@LowLevelKeyboardProc,HInstance,0);
if (hHook1<>0) and (hHook2<>0) then Result:=True;
end;
Запускаю как StartTimer. не могу понять почему данный код отлично работает, когда запускаю его из приложения с формой, но нифига не работает, когда запускаю его из консольного приложения. Может есть идеи? StartTimer возвращает True в обоих случаях, но при работе в консоли просто не происходит входа в LowLevelKeyboardProc
WestSide вне форума Ответить с цитированием
Старый 02.08.2014, 00:08   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Может есть идеи?
Учите матчасть. Любой хук должен быть реализован в виде DLL, и никак иначе.
Так уж пвелось, что только DLL может быть подгружена процессом.
Человек_Борща вне форума Ответить с цитированием
Старый 02.08.2014, 00:14   #3
WestSide
 
Регистрация: 09.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Учите матчасть. Любой хук должен быть реализован в виде DLL, и никак иначе.
Так уж пвелось, что только DLL может быть подгружена процессом.
Неправда, попробуйте данный код засунуть в приложение с формой и у вас поставится глобальный хук, который будет реагировать на мышь и клавиатуру. Даже MSDN утверждает что можно использовать глобальные хуки без DLL.
WestSide вне форума Ответить с цитированием
Старый 02.08.2014, 00:20   #4
WestSide
 
Регистрация: 09.01.2011
Сообщений: 8
По умолчанию

Проблема решена, нехватало PeekMessage
WestSide вне форума Ответить с цитированием
Старый 02.08.2014, 00:21   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Даже MSDN утверждает что можно использовать глобальные хуки без DLL.
Ещё раз повторю: Учите матчасть.
Цитата:
A global hook procedure can be called in the context of any application in the same desktop as the calling thread, so the procedure must be in a separate DLL module.
Цитата:
Проблема решена, нехватало PeekMessage
Вот мне интересно, вам известно что консольное приложение вообще не имеет окон и не участвует в оконном цикле сообщений?
Человек_Борща вне форума Ответить с цитированием
Старый 02.08.2014, 00:37   #6
WestSide
 
Регистрация: 09.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ещё раз повторю: Учите матчасть.



Вот мне интересно, вам известно что консольное приложение вообще не имеет окон и не участвует в оконном цикле сообщений?
Специально для вас скомпилировал и положил вместе с исходниками консольную программу, что отлично работает на моей Windows 7 (64), возможности проверить на XP 32 пока нет.

Скачать

Скриншот
http://s017.radikal.ru/i402/1408/cf/17a3e146db7b.png

Последний раз редактировалось WestSide; 02.08.2014 в 00:57.
WestSide вне форума Ответить с цитированием
Старый 02.08.2014, 02:00   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Учите матчасть. Любой хук должен быть реализован в виде DLL, и никак иначе.
Так уж пвелось, что только DLL может быть подгружена процессом.
Кроме "низкоуровневых" хуков. Для них dll не нужна. Они (низкоуровневые хуки) не подгружаются в процессы, да и вообще не знают ничего про процессы. Они, как это и следует из их названия, работают на более низком уровне.

Последний раз редактировалось northener; 02.08.2014 в 02:03.
northener вне форума Ответить с цитированием
Старый 02.08.2014, 21:19   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Кроме "низкоуровневых" хуков. Для них dll не нужна. Они (низкоуровневые хуки) не подгружаются в процессы, да и вообще не знают ничего про процессы. Они, как это и следует из их названия, работают на более низком уровне.
Вроде помню, что раньше на MSDN такое было написано, но потом убрали. Не знаю почему...
Somebody вне форума Ответить с цитированием
Старый 02.08.2014, 21:37   #9
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Вроде помню, что раньше на MSDN такое было написано, но потом убрали. Не знаю почему...
Конфициальность и защита от шпионских программ. Антивирусы такие хуки выслеживают и уничтожают. Им же не скажешь, что этот хук сделал сам пользователь, а не хакер.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 02.08.2014, 21:46   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Вроде помню, что раньше на MSDN такое было написано, но потом убрали. Не знаю почему...
Потому что каждая новая версия MSDN всё больше считает программистов быдлом. Скоро во всех функциях будут писать, что минимально требуемая версия ОС -- Windows 7, хотя функции работали/работают еще с NT4, например.
Vapaamies вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как блокировать клаву но мышь должна работать? Stasensh Помощь студентам 2 18.06.2010 20:48
Хук на клаву HellMercenaries Общие вопросы Delphi 3 23.07.2009 21:23
Глобальный хук на клаву rem37 Win Api 7 03.05.2009 01:25
Глобальный хук. Проблема с dll =\\ Zeraim Win Api 11 19.12.2008 00:18
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41