Подтвердить что ты не робот

Как получить ввод с клавиатуры из приложения с правами администратора для приложения без администратора?

Я запрограммировал приложение, которое имеет оверлейный вид окна, которое может быть показано и скрыто с помощью горячей клавиши, в то время как другое приложение имеет фокус. Упомянутое другое приложение - это игра DirectX, которая работает с правами администратора.

Я уже пробовал 3 возможных решения для получения уведомления, когда моя горячая клавиша нажата в другом приложении, 2 из них - вид работы, но для моего приложения также требуются административные привилегии. Это приемлемо, но я бы предпочел иметь решение, которое не требует этих привилегий. Я уверен, что должен быть какой-то способ, так как приложениям, таким как TeamSpeak, удается получать ввод без запуска как admin.

Я уже пробовал:

  • RegisterHotkey - не подходит, потому что он не работает в окнах DirectX.
  • SetWindowsHookEx - работает как общий крючок клавиатуры, но только с правами администратора.
  • GetAsyncKeyState - работает, чтобы проверить указанную горячую клавишу, но не без дополнительных прав администратора.

Итак, я был бы очень благодарен, если бы кто-то мог представить идею для другого решения, потому что я ничего не могу придумать... Я использую Delphi, но так как я полагаюсь на Windows API в любом случае не думайте, что решение будет специфичным для языка.

4b9b3361

Ответ 1

Я думаю, что TeamSpeak использует DirectInput для своих горячих клавиш (подходит вам, если вы уже используете DirectX). Что касается взаимодействия с повышенными программами, я думаю, что единственное решение, и я считаю, что один из них использует TeamSpeak, заключается в том, чтобы внедрить манифест приложения, который устанавливает uiAccess=true. Это позволяет обойти UIPI без необходимости запуска приложения в качестве администратора.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

Для этого есть несколько предостережений

  • Приложение должно быть подписано с помощью аутентификации
  • Приложение должно находиться в защищенном каталоге (\ ProgramFiles \,\system32)

Вы можете самостоятельно подписывать приложение (в качестве альтернативы дорого!), но вы должны распространять сертификат вручную и устанавливать его в любой системе, на которой выполняется указанное приложение.