SetWindowsHookEx в C#

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

10
задан pushkin 19 February 2019 в 15:15
поделиться

3 ответа

SetWindowsHookEx определяет последние два параметра таким образом:

  • hMod

[in] Дескриптор библиотеки DLL, содержащей процедура ловушки, на которую указывает lpfn параметр. Параметр hMod должен быть установить в NULL, если dwThreadId параметр определяет созданный поток текущим процессом и если хук процедура в коде связанный с текущим процессом.

  • dwThreadId

[in] Определяет идентификатор нить, с которой крючком процедура должен быть связан. Если этот параметр равен нулю, подключаемая процедура связаны со всеми существующими потоками работает на том же рабочем столе, что и вызывающий поток.

Я не уверен, что вы можете использовать .NET dll должным образом, но вы определенно можете попробовать.

Grab hMod через Marshal.GetHINSTANCE (typeof ( Form1) .Module) и dwThreadId через Process.Threads . В качестве альтернативы установите для dwThreadId значение 0, если вам нужна глобальная ловушка (то есть ловушка для всех вызовов GetMessage () на текущем рабочем столе), но остерегайтесь снижения производительности.

15
ответ дан 3 December 2019 в 14:34
поделиться

Я считаю, что вам нужно выполнить P / Invoke GetModuleHandle и использовать дескриптор, который он возвращает для третьего параметра SetWindowsHookEx . Я также считаю, что 0 является правильным для четвертого параметра, поскольку вы не хотите подключать какой-либо конкретный поток в стороннем приложении.

Если это не сработает для вас, ] SetWindowsHookEx в MSDN может указать вам правильное направление.

3
ответ дан 3 December 2019 в 14:34
поделиться

Я не знаю, но если вы используете значения параметров, которые указывают, что вы хотите, как говорит API, «внедрить DLL в другой процесс», тогда насколько я знаю он может работать только в том случае, если вы напишете неуправляемую DLL, из которой она будет вызывать.

3
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: