2013-04-09 6 views
11

Zaprogramowałem aplikację, która ma okno nakładki, które można wyświetlić i ukryć za pomocą klawisza skrótu, podczas gdy inna aplikacja ma fokus. Inną aplikacją jest gra DirectX, która działa z uprawnieniami administratora.Jak otrzymać od użytkownika aplikację z uprawnieniami administratora do aplikacji nieadministracyjnej?

Próbowałem już 3 możliwych rozwiązań, aby otrzymać powiadomienie, gdy mój klawisz skrótu zostanie naciśnięty w drugiej aplikacji, 2 z nich to rodzaj pracy, ale wymagam, aby moja aplikacja miała również uprawnienia administracyjne. Jest to dopuszczalne, ale wolę rozwiązanie, które nie wymaga tych przywilejów. Jestem pewien, że musi być jakiś sposób, ponieważ aplikacje takie jak TeamSpeak nie są w stanie odbierać danych wejściowych bez uruchamiania jako administrator.

Co Próbowałem już:

  1. RegisterHotkey - nie nadaje, ponieważ nie działa natomiast w Windows DirectX.
  2. SetWindowsHookEx - działa jako ogólny hak klawiatury, ale tylko z uprawnieniami administratora.
  3. GetAsyncKeyState - działa, aby sprawdzić określony klawisz skrótu, ale nie bez uprawnień administratora jeszcze raz.

Tak, byłbym naprawdę wdzięczny, gdyby ktoś mógł przedstawić pomysł na inne rozwiązanie, ponieważ nie ma nic więcej, co mógłbym wymyślić ... Używam Delphi, ale ponieważ polegam na systemie Windows API i tak nie sądzę, że rozwiązanie będzie specyficzne dla danego języka.

Odpowiedz

4

Myślę, że TeamSpeak używa DirectInput dla swoich skrótów klawiszowych (dobrze pasuje do Ciebie, jeśli korzystasz już z DirectX). Jeśli chodzi o interakcję z podwyższonymi programami, myślę, że jedynym rozwiązaniem, i uważam, że używa tego TeamSpeak, jest osadzenie manifestu aplikacji, który ustawia uiAccess=true. Pozwala to ominąć interfejs UIPI bez konieczności uruchamiania aplikacji jako administrator.

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

Aby to działało istnieje kilka ostrzeżenia

  • Wniosek należy Authenticode podpisany
  • Wniosek musi znajdować się w chronionym katalogu (\ ProgramFiles \, \ system32)

Możesz samodzielnie podpisać wniosek (alternatywnie jest drogi!), Ale musisz rozprowadzić certyfikat ręcznie i zainstaluj go w dowolnym systemie z uruchomioną aplikacją.

+1

Dzięki za wkład, wydaje się, że to właściwe rozwiązanie. Jednak z tego, co przeczytałem, dostarczenie takiego samopodpisanego certyfikatu wraz z moim instalatorem stanowi potencjalne zagrożenie bezpieczeństwa, którego wolałbym nie brać, ponieważ nie mam głębszego wglądu w tę sprawę ... popraw mnie, jeśli " m źle. – DNR

+0

@HeinaBaumstamm Przypuszczam, że bezpieczniejsze dla użytkownika jest uruchomienie aplikacji z uiAccess na pełne uprawnienia administratora ... w obu przypadkach musisz mieć pewność, że nie robisz na nich złośliwego oprogramowania. W przeciwnym razie prawdopodobieństwo, że twoja aplikacja będzie punktem wyjścia dla zewnętrznych exploitów, jest raczej minimalne. Z pewnością twoja aplikacja będzie bardziej ograniczona w przypadkowych uszkodzeniach, które może spowodować przez błędy, jeśli uruchomisz uiAccess przez prostego administratora. To naprawdę kwestia wygody i zaufania ... naprawdę zależy od tego, kto będzie używał programu. –

Powiązane problemy