Сейчас на форуме: hgdagon, asfa (+5 невидимых)

 eXeL@B —› Программирование —› RegisterHotKey кем занята?
Посл.ответ Сообщение

Ранг: 30.6 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 24 апреля 2007 13:10 · Поправил: soho
· Личное сообщение · #1

Всем привет!

Функция RegisterHotKey служит для регистрации горячих клавиш (кто бы мог подумать!...).
Если заданная комбинация клавиш уже зарегистрирована, функция возвращает отлуп.
Таким образом, получается вопрос: как можно определить кем (напр. его hWnd) занята комбинация горячих клавиш?

user32.dll::RegisterHotKey говорит, что там вызов int 0x2e:

; BOOL __stdcall RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk)
public RegisterHotKey
RegisterHotKey proc near

hWnd = dword ptr 4
id = dword ptr 8
fsModifiers = dword ptr 0Ch
vk = dword ptr 10h

mov eax, 11D6h
lea edx, [esp+hWnd]
int 2Eh ; DOS 2+ internal - EXECUTE COMMAND
; DS:SI -> counted CR-terminated command string
retn 10h
RegisterHotKey endp




Ранг: 30.6 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 26 апреля 2007 08:59
· Личное сообщение · #2

Дополнение/уточнение вопроса:
Как найти обработчик прерывания Windows (в частности, прерывания 2e, вектор 0x11d6)?
Или протрассировать до обработчика?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 26 апреля 2007 12:20
· Личное сообщение · #3

soho
Обработчик прерывания ищется в таблице прерываний (как ни странно), это IDT, есть дофига сорцев дров, где хучатся прерывания, там они хучается как раз по адресу.


 eXeL@B —› Программирование —› RegisterHotKey кем занята?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати