Ostatnio dodałem do tego wsparcie dla naszej aplikacji. Cieszę się, że pokonaliśmy naszego konkurenta!
Są nowe ograniczenia UIPI w Windows 8. Najczęściej stosowane zablokowane skrótu Alt + Tab, więc będziesz chciał zrobić obejścia.
Musisz oznaczyć swoje pliki binarne w uiAccess="true"
w manifeście. (Aby uzyskać więcej informacji o tym, jak to zrobić, google.) Ten manifest uniemożliwia uruchomienie plików binarnych, chyba że jest podpisany za pomocą certyfikatu podpisującego kod i zatwierdzony przez Microsoft i zainstalowany w "bezpiecznej lokalizacji" (system32 lub Program Files/Program Files (x86)) .
Jeśli zainstalujesz swój program z poziomu dowolnego pomocnika: Plik binarny uiAccess nie może zostać uruchomiony z CreateProcess
z procesu średniej integralności (manifest oznacza, że wymaga "wysokiej" integralności). Zamiast tego najłatwiej jest uruchomić go przy użyciu "otwartego" ShellExecute
, aby uzyskać możliwość podniesienia powłoki. Jeśli używasz CreateProcessAsUser
, musisz ustawić TokenUIAccess
na 1 używając SetTokenInformation
, inaczej uruchomienie nie powiedzie się.
Obowiązki końcowe: należy zauważyć, że uiAccess dość mocno ogranicza to, co proces może zrobić. Nie można odbierać danych wejściowych interfejsu użytkownika z procesów normalnej (średniej integralności), więc inne aplikacje nie mogą wchodzić w interakcje z oknami. Jeśli nie stosujesz już dobrych praktyk w zakresie oddzielania interfejsu użytkownika w oddzielny proces, jest to dobry powód, aby to zrobić. Alternatywnie, zadania wymagające uiAccess mogą zostać umieszczone w małym, samodzielnym binarnym pomocniku i całkowicie oddzielone od procesu, który nie jest również obsługiwany przez użytkownika. Twoja główna aplikacja może działać jako proces pomocniczy o wysokiej integralności, który wysyła instrukcje wymagane do wykonania tych konkretnych zadań (takich jak SendInput
).
Wreszcie zadziała SendInput
.
Teraz twoi konkurenci dostają się tutaj. :-) –
Wątpię, by ktokolwiek zmieniał programy właśnie z tego powodu;) –
Należy pamiętać, że funkcja uiAccess = true może zapobiec przeciągnięciu i upuszczeniu z innych programów z mniejszymi uprawnieniami. –