2016-02-16 2 views
1

Я пытаюсь установить крючок с низким уровнем клавиатуры в приложении Metro из классического консольного приложения. Моя проблема заключается в том, что приложения для метро не могут быть связаны с глобальными перехватами. Так что я пытаюсь прикрепить крючок к конкретному потоку, но я его не нахожу.Получение идентификатора потока Metro App для клавиатурыHook

Пока это то, что у меня есть:

private IntPtr SetHook(LowLevelKeyboardProc proc, ProcessModule tabModule) 
    { 
     Debug.WriteLine("INFO HOOK : Setting hook " + tabModule.ModuleName.ToString()); 
     var result = SetWindowsHookEx(WH_KEYBOARD, proc, GetModuleHandle(tabModule.ModuleName), 0); 
     Debug.WriteLine("INFO BACK : Hook handle = " + result); 
     return result; 
    } 

Проблема заключается в том, что в функции SetWindowsHookEx, то 0 означает глобальный хук, который я должен заменить нити ID. Когда я пытаюсь получить идентификатор потока thtough это:

ProcessThreadCollection threadList = processList[0].Threads; 
    Debug.WriteLine("Threads = " + threadList.Count); 
    foreach (ProcessThread thread in threadList) 
     Debug.WriteLine("Thread = " + thread.Id); 

Я получаю отсчет 40 нитей с (конечно) списка.

Мой вопрос: какой поток я могу использовать в качестве последнего параметра SetWindowsHookEx для подключения ввода клавиатуры из приложения Windows Store.

Спасибо!

ответ

0

Используйте WH_KEYBOARD_LL вместо WH_KEYBOARD и LowLevelKeyboardProc, вы можете подключить клавиатуру для всех процессов, включая другое приложение магазина.

+1

Спасибо за ответ, но нет, когда я установил его в WH_KEYBOARD_LL, крючок не поймает входы приложений метро. Документировано в MSDN: «Разработка приложений для Windows Store Если dwThreadId равен нулю, то DLL-файлы с окнами не загружаются в процессе процессов приложений Windows Store и процесс посредника Windows Runtime, если они не установлены ни процессами UIAccess (доступность инструменты). Уведомление доставляется в поток установщика для этих крючков: –

Смежные вопросы