Quicksort: Пока я не добрался до колледжа, я никогда не подвергал сомнению, была ли Пузырьковая сортировка грубой силы самым эффективным способом отсортировать. Это просто казалось интуитивно очевидным. Но быть подвергнутым неочевидным решениям как Quicksort учило меня смотреть мимо очевидных решений видеть, доступно ли что-то лучше.
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 ()
на текущем рабочем столе), но остерегайтесь снижения производительности.
Я считаю, что вам нужно выполнить P / Invoke GetModuleHandle
и использовать дескриптор, который он возвращает для третьего параметра SetWindowsHookEx
. Я также считаю, что 0
является правильным для четвертого параметра, поскольку вы не хотите подключать какой-либо конкретный поток в стороннем приложении.
Если это не сработает для вас, ] SetWindowsHookEx
в MSDN может указать вам правильное направление.
Я не знаю, но если вы используете значения параметров, которые указывают, что вы хотите, как говорит API, «внедрить DLL в другой процесс», тогда насколько я знаю он может работать только в том случае, если вы напишете неуправляемую DLL, из которой она будет вызывать.