Dlaczego visual studio łapie kluczowe wydarzenia przed autohotkey?
Niedawno przełączyłem się na układ klawiatury Dvoraka jako mały eksperyment. Jedną z najtrudniejszych części przejścia było radzenie sobie z klawiszami skrótów klawiszowych. Większość skrótów klawiszowych jest zaprojektowana z myślą o QWERTY i, co gorsza, skróty klawiaturowe wydają się być bardzo związane z pamięcią.
Zamiast ponownie uczyć się wszystkich skrótów klawiszowych, napisałem skrypt autohotkey, aby przetłumaczyć układ Dvoraka z powrotem na QWERTY, gdy Ctrl, klawisze Alt lub Win są wciśnięte w połączeniu z innymi kluczami. Działa pięknie wszędzie, gdzie próbowałem, z wyjątkiem Visual Studio '08. Wygląda na to, że naciśnięcia klawiszy są przechwytywane, zanim autohotkey będzie mógł je przetłumaczyć.
Dlaczego tak się dzieje i jak to naprawić?Poniżej fragment (od początku) mojego skryptu:
; control + letter
^;::^z
^q::^x
^j::^c
^k::^v
Update: skrypt działa dobrze na Win7 z ahk, vs08 i coderush świeżo zainstalowany. Maszyna, z którą mam problem, uruchamia Vistę. Wszelkie przemyślenia, jak dalej zdiagnozować?
Update 2: skrypt działa dobrze z Vista i 2010 beta 2. Wydaje się być coś z tylko vs 08 + vista. Spróbuję dziś zainstalować nową wersję vs08.
4 answers
Aha! Rozgryzłem to. Jeśli ahk i aplikacja docelowa nie działają pod tymi samymi uprawnieniami (lub użytkownikami), ahk nie będzie prawidłowo przechwytywać / symulować zdarzeń klawiatury. W moim przypadku visual studio było uruchamiane z uprawnieniami administratora (podwyższonymi), podczas gdy skrypt ahk był uruchamiany jako aktualnie zalogowany użytkownik.
Jeden z poniższych rozwiązał problem:
- uruchamianie zarówno vs jak i ahk jako bieżący użytkownik
- Kompilowanie skryptu i uruchamianie zarówno vs jak i skompilowanej aplikacji jako administrator
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-15 04:58:48
Chcę tylko dodać kilka punktów do rozwiązania znalezionego przez samego OP.
1) problem nie polega na tym, że AHK i VS działają z różnymi uprawnieniami - chodzi tylko o to, że skróty utworzone przez skrypt działający w trybie non-admin nie będą działać na aplikacjach działających w trybie admin , ale nie będzie problemu, jeśli jest odwrotnie.
2) nie ma potrzeby kompilowania skryptu, wystarczy ustawić autohotkey.exe do uruchomienia w trybie admin (to właśnie robię), lub alternatywnie utworzyć skrót do konkretnego skryptu i ustawić go, aby zawsze działał w trybie admin. (btw, dla przypomnienia, nie ma zwiększenia wydajności poprzez uruchomienie skompilowanej wersji skryptu AHK, ponieważ kod jest nadal interpretowany-to tylko, że teraz interpreter jest osadzony w utworzonym pliku wykonywalnym)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 18:50:23
Ta fraza w małym drukiem brzmi trafnie:
Jeśli sendmode jest używany w sekcji auto-execute (górna część skryptu), ma to wpływ na wszystkie poprawki. Jednakże, ponieważ remapowanie używa Send {Blind} i ponieważ tryb SendPlay nie obsługuje w pełni {Blind}, niektóre remapowania mogą nie działać poprawnie w trybie SendPlay (szczególnie Control, Shift, Alt i Win). Aby to obejść, unikaj SendPlay w sekcji auto-execute, gdy masz remappingi; następnie użyj polecenie SendPlay vs. Send w innych miejscach w całym skrypcie. Alternatywnie, możesz przetłumaczyć swoje remappingi na skróty klawiszowe (jak opisano poniżej), które jawnie wywołują SendEvent vs.Send.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-11 19:58:18
Najwyraźniej istnieje obejście tego problemu.
Z programu docs .htm#Installer_uiAccess.
wątek na Forum by Lexikos
Fragment:
EnableUIAccess
Modyfikuje AutoHotkey.exe pozwala skryptom wykonywać następujące czynności, nawet gdy UAC jest włączony:
Interakcja z oknami programów administracyjnych bez uruchamiania skryptu jako administrator. Użyj SendPlay. Są ograniczenia; proszę przeczytać post przed użyciem tego skryptu.
Link do pliku ahk jest zepsuty na forum, ale znalazłem go na Githubie: EnableUIAccess.ahk
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 18:48:59