Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перехватить нажатие определённых клавиш, когда активно не твоё приложение. 
:(
    Опции темы
начинающий_на_Дельфи
Дата 12.7.2004, 13:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите, пожалуйста, как перехватить нажатие определённых клавиш, когда активно не твоё приложение.
  Вверх
Albinos_x
Дата 12.7.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата
procedure TForm1.FormCreate(Sender: TObject);
begin
// регистрирую горячие клавиши приложения
//левый Alt и BackSpace (кнопка [ <- ])
RegisterHotKey(Handle,40,MOD_ALT,8);
end;


А вообще здесь есть тема, не помню как называется, там я подробнее пример делаю


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
начинающий_на_Дельфи
Дата 12.7.2004, 22:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как пользоваться тем, что зарегистрировал?
  Вверх
Albinos_x
Дата 13.7.2004, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата
private
    { Private declarations }
    procedure WMHotKey(var a:TWMHotKey); message WM_HOTKEY;
....

  public
.....
procedure TForm1.WMHotKey(var a:TWMHotKey);
begin
if (a.HotKey=40)  then
  begin
  // здесь пишешь, то что тебе надо выполнить
  end;
end;
....
UnregisterHotKey(Handle,27);// перед закрытием приложения, убираеш регистрацию
...
end.



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
<Spawn>
Дата 13.7.2004, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



начинающий_на_Дельфи Так же можно воспользоваться хуком. Делай поиск по функциям SetWindowsHookEx, CallNextHookEx, UnHookWindowsHookEx


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
начинающий_на_Дельфи
Дата 13.7.2004, 08:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дело сдвинулось, большое спасибо!!! А этими функциями я хотел воспользоваться, но не нашёл их точного описания.
  Вверх
Medved
Дата 13.7.2004, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



М
 
Один топик - один вопрос. Не нарушайте пожалуйста правила форума. Тема разделена!



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Gwire
Дата 13.5.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Походу "разбирательства" возник вопрос:
Код

function ProcHook(Code, WParam, LParam: Integer): Integer; stdcall;
begin
    Writeln( Code, #9, WParam, #9, LParam );
    Result := CallNextHookEx(H, Code, WParam, LParam);
end;

procedure SetHook(Hook: TFNHookProc);
begin
    H := SetWindowsHookEx(WH_KEYBOARD, ProcHook, HInstance, 0);
end;


Вопроос:
Если SetWindowsHookEx натравить на HInstance основной программы,
а не DLL-ки то процедера ProcHook не вополняется.
Как это понимать, Почему ей не подходит HInstance основной программы?

PM MAIL   Вверх
bems
Дата 13.5.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Потому что для выполнения процедуры хука в чужом процессе (там где произошло перехватываемое событие) нужно загрузить в него эту процедуру. Поскольку другого способа кроме как загрузить туда длл в системе не предусмотрено, то процедура хука должна быть в длл, и в SetWindowsHookEx нужно указать какую именно длл нужно загружать (длл идентифицируется своим HMODULE, он же HINSTANCE, он же указатель на начало длл в памяти)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 13.5.2011, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Вместо HInstance указать 0, далее в сл.параметре вместо 0 (ThreadID) указать GetCurrentThreadID. 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.