UnregisterHotKey - почему не работает из другого процесса?
От: Shmj Ниоткуда  
Дата: 19.12.18 13:59
Оценка:
При вызове из того же процесса, который создавал HotKey — все работает. Если вызвать с теми же параметрами из другого процесса — не работает, возращает false (GetLastError возвращает ошибку 2 — файл не найден). В MSDN ничего не сказано что вызывать нужно из того же процесса.
---
Актуальная база RSDN + Janus
Автор: Shmj
Дата: 15.04 16:31
Re: UnregisterHotKey - почему не работает из другого процесса?
От: Carc Россия Aml Pages — оперативный блокнот http://www.amlpages.com/home.php
Дата: 19.12.18 14:39
Оценка:
Здравствуйте, Shmj, Вы писали:

S>При вызове из того же процесса, который создавал HotKey — все работает. Если вызвать с теми же параметрами из другого процесса — не работает, возращает false (GetLastError возвращает ошибку 2 — файл не найден). В MSDN ничего не сказано что вызывать нужно из того же процесса.

А UnregisterHotkey в чужом процессе откуда берет HWND и id хоткея?
Aml Pages Home
Re[2]: UnregisterHotKey - почему не работает из другого процесса?
От: Shmj Ниоткуда  
Дата: 19.12.18 19:05
Оценка:
Здравствуйте, Carc, Вы писали:

C>А UnregisterHotkey в чужом процессе откуда берет HWND и id хоткея?


Для тестов сначала получаю HWND окна первого процесса вручную (в дебагере смотю при вызове RegisterHotKey и его же видно в Spy), id равен 1. Проверял несколько раз внимательно — в том числе и вызывал UnregisterHotkey и смотрел в дебагере что эти же HWND и id используются и все работает.

Если бы удалось запустить в другом процессе, то сейчас бы искал как программно получить HWND и id. Но нет, оно вообще не работает, даже если известны HWND и id.
---
Актуальная база RSDN + Janus
Автор: Shmj
Дата: 15.04 16:31
Re: UnregisterHotKey - почему не работает из другого процесса?
От: Alexander G Украина  
Дата: 19.12.18 19:10
Оценка: 4 (1) +1
Здравствуйте, Shmj, Вы писали:

S> В MSDN ничего не сказано что вызывать нужно из того же процесса.



Да ну!

UnregisterHotKey function


Frees a hot key previously registered by the calling thread.

Re[2]: UnregisterHotKey - почему не работает из другого процесса?
От: CEMb  
Дата: 20.12.18 02:46
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Да ну!


AG>

AG>

UnregisterHotKey function


AG>Frees a hot key previously registered by the calling thread.


Т.е. даже не получится внедриться в родной процесс и разрегистрировать hotkey оттуда
also, it's desktop photo frame
Re[3]: UnregisterHotKey - почему не работает из другого процесса?
От: Carc Россия Aml Pages — оперативный блокнот http://www.amlpages.com/home.php
Дата: 20.12.18 03:45
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Carc, Вы писали:


C>>А UnregisterHotkey в чужом процессе откуда берет HWND и id хоткея?


S>Для тестов сначала получаю HWND окна первого процесса вручную (в дебагере смотю при вызове RegisterHotKey и его же видно в Spy), id равен 1. Проверял несколько раз внимательно — в том числе и вызывал UnregisterHotkey и смотрел в дебагере что эти же HWND и id используются и все работает.


S>Если бы удалось запустить в другом процессе, то сейчас бы искал как программно получить HWND и id. Но нет, оно вообще не работает, даже если известны HWND и id.

А толку? Эти данные могут быть чем угодно… Ну например какой нить ID процесса\треда + соль из HWND/id хоткея. Вызывая из своего процесса получаем другой PID, и всё данные не валидны. Как реализовано, это уже детали — пофиг-веники. Хоть тот же map, или же PID используется как некое смещение в некой таблице (ну вроде как HPROCESS во времена Win98).


Есть такая штука как Hotkey Commander, дык он вроде бы умеет читать чужие хоткеи. Я как-то интересовался этим вопросом давно. Где уж не помню, можь чего-то вроде StackOverflow что ли. Там была какая-то недокументированная функция, для получения всех хоткеев. По крайней мере какая-то левая структура точно была. Но дальше я не пошел. Правда, у меня не было задачи разрегать чужой хоткей, только узнать кто им владеет. Там был какой-то веселый метод, вроде как повесить глобальный хук, а потом через SendInput кликнуть клавишу, и посмотреть кто поймает WM_HOTKEY. Ну да та еще велосепедина.
Aml Pages Home
Re[3]: UnregisterHotKey - почему не работает из другого процесса?
От: Carc Россия Aml Pages — оперативный блокнот http://www.amlpages.com/home.php
Дата: 20.12.18 03:48
Оценка: +1
Здравствуйте, CEMb, Вы писали:

CEM>Здравствуйте, Alexander G, Вы писали:


AG>>Да ну!


AG>>

AG>>

UnregisterHotKey function


AG>>Frees a hot key previously registered by the calling thread.


CEM>Т.е. даже не получится внедриться в родной процесс и разрегистрировать hotkey оттуда

С гуев ли не получится?
Наша внедренная процедурка, вроде того же SetWindowsHookEx и реализации в DLL, будет работать в контексте потока-цели, куда внедрились. Другой вопрос, что прям вот так вот Винда нам и разрешила куда ни попадя свои DLL внедрять
Aml Pages Home
Re[4]: UnregisterHotKey - почему не работает из другого процесса?
От: Alexander G Украина  
Дата: 20.12.18 04:56
Оценка:
Здравствуйте, Carc, Вы писали:

CEM>>Т.е. даже не получится внедриться в родной процесс и разрегистрировать hotkey оттуда

C>С гуев ли не получится?
C>Наша внедренная процедурка, вроде того же SetWindowsHookEx и реализации в DLL, будет работать в контексте потока-цели, куда внедрились. Другой вопрос, что прям вот так вот Винда нам и разрешила куда ни попадя свои DLL внедрять

На тот гипотетический случай, если жадный процесс занял хоткей, но не крутит цикл сообщений, но пермишнов нам хватает, у нас всегда есть SetThreadContext, если что
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.