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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить нажатие клавиши, и не отдать его другим приложениям 
:(
    Опции темы
Tamerlann
Дата 7.2.2004, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Как программа может отловить нажатие клавиши на клавиатуре так, чтобы затем другие приложения и окна не получили сообщение, что нажата эта клавиша? Я так понимаю, что кроме всего прочего, отлавливающая программа должна иметь более высокий приоритет, чем остальные, от которых скрывается нажатие (остальными судя по всему будут все приложения обычно запускаемые под Виндой, т.е. приоритет - средний). Как поднять приоритет? (прошу не счесть за два вопроса в одном топике - второй вопрос - часть глобального первого smile.gif )
Иными словами (по поводу второго вопроса), кажется, вообще получится что-то вроде драйвера.
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Paradox
Дата 7.2.2004, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Наверное ловить WM_KEYDOWN или WM_KEYPRESS


--------------------
---
PM MAIL WWW   Вверх
Tamerlann
Дата 7.2.2004, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Отловить то само нажатие я смогу, как не отдать его другим приложениям?
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
mmv
Дата 7.2.2004, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

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



Этот вопрос меня тоже интересует.
Только дело тут не в приоритете. Его-то повысить просто:
Например:

Код
{var p : DWORD;}
p := IDLE_PRIORITY_CLASS; // Низкий
p := NORMAL_PRIORITY_CLASS; // Средний
P := HIGH_PRIORITY_CLASS; // высокий
p := REALTIME_PRIORITY_CLASS; // Реального времени


Выше среднего и ниже среднего - я отловить не смог. В хелпе есть, но видно, я что-то не понимаю... Однако суть в том, что это ни фига не влияет на перекрытие клавиш. Это я проверял. Тут нужно прежде всего разобраться в теоретическом аспекте, но он-то как раз для меня остается загадкой. Я тоже в свое время пытался отловить сочетания клавиш, перекрываемые игрушкой. Но потерпел неудачу. Буду вместе с вами с интересом ждать новых ответов.

PM MAIL WWW   Вверх
StayAtHome
Дата 7.2.2004, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

Репутация: нет
Всего: 16



Нужно использовать Hooks -- скачай FAQ от Vit'a? там есть исчерпывающая информация по этой теме. (И не только по этой smile.gif )
PM MAIL WWW ICQ YIM   Вверх
mmv
Дата 8.2.2004, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

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



Если упрощенно, то я делал примерно так:

Код
(*private
   { Private declarations }
 vk : integer;
 procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;*)

procedure TForm1.Button1Click(Sender: TObject);
var
 kbrt : string[1];
 hkey1, hkey : byte;
begin
 hkey1 := MOD_SHIFT + MOD_CONTROL;
 kbrt := 'A';
 hkey := ord (kbrt[1]);
 vk := GlobalAddAtom('Hotkey');
 RegisterHotKey(Handle, vk, hkey1, hkey);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
 if Msg.HotKey = vk then
   ShowMessage ('Какое-то событие');
end;

PM MAIL WWW   Вверх
Tamerlann
Дата 8.2.2004, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Точно, в FAQ есть два примера hook'a, но что-то я не понял как они работают. (может кто объяснит smile.gif )
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
mmv
Дата 9.2.2004, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

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



Цитата
Только дело тут не в приоритете. Его-то повысить просто


А само задание приоритета я забыл написать. Вот оно:

Код
{var
ProcessID : DWORD;
ProcessHandle : THandle;}
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION, false,  ProcessID);
SetPriorityClass(ProcessHandle, proc);


PM MAIL WWW   Вверх
dm9
Дата 9.2.2004, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

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



Я уже устал эту ссылку давать smile.gif
http://delphimaster.ru/articles/hooks/index.html
PM MAIL ICQ   Вверх
Tamerlann
Дата 9.2.2004, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Спасибо, dm9.
Если кто-нибудь ещё знает где почитать про это, то я не откажусь от дополнительных ссылок. smile.gif

Спасибо, mmv, за приоритеты (описание установления). Осталась нам сама малость... :разобраться с hook'ом smile.gif
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Tamerlann
Дата 11.2.2004, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Статья, указанная dm9, действительно подробно описывает ловушки и механизм их работы, но в ней я не нашёл ответа на вопрос: а как же отменить событие, т.е. убрать само сообщение из очереди, чтобы оно не было передано окну (приложению).
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
<Spawn>
Дата 11.2.2004, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Tamerlann @ 11.2.2004, 13:24)
Статья, указанная dm9, действительно подробно описывает ловушки и механизм их работы, но в ней я не нашёл ответа на вопрос: а как же отменить событие, т.е. убрать само сообщение из очереди, чтобы оно не было передано окну (приложению).

Код
Result := 1;
CallNextHookEx(...)



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Tamerlann
Дата 11.2.2004, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Sorry, не понял. Можно просто попдробнее описать?, пожалуйста. (т.е. как работает)
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Tamerlann
Дата 11.2.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Только-что попробовал то, что предложил <Spawn> - всё просто великолепно работает!!!! Большое! спасибо, <Spawn>. smile.gif smile.gif smile.gif smile.gif smile.gif biggrin.gif biggrin.gif tounge.gif

Но всё же, что это за Result?

Это сообщение отредактировал(а) Tamerlann - 11.2.2004, 21:49
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
<Spawn>
Дата 11.2.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я не помню как обстоят дела с WH_KEYBOARD, но для WH_CBT хука, в зависимости от результата выполнения функции хука, разрешается или запрещается операция. Так что попробуй что то типа этого:

Код
function KeyBoardProc(Code: integer; _wParam: WPARAM; _lParam: LPARAM): LongInt; stdcall;
begin
 ...
 //Если нужно отменить нажатие, то
 Result := 1;
 //...Передать управление следующему хуку в цепочке хуков
 CallNextHookEx(...);
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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