Я сделал скрипт для мозаичного размещения окон левой рукой в windows 10, используя раскладку клавиатуры дворака.Он работает, как и ожидалось, за исключением того, что он предотвращает попадание событий пробела в любую программу, кроме самого скрипта.Это журнал клавиатуры при запуске скрипта:
20 039 s d 0.09 Space
20 039 s u 0.08 Space
20 039 s d 0.08 Space
20 039 s u 0.08 Space
20 039 s d 0.08 Space
20 039 s u 0.09 Space
20 039 s d 0.08 Space
20 039 s u 0.09 Space
20 039 s d 31.14 Space
20 039 s u 0.11 Space
20 039 s d 0.09 Space
20 039 s u 0.11 Space
Оба пробела обнаружены правильно, но остаются подавленными.Завершение сценария вручную решает проблему.
#MaxThreads 255 ; for the purpose of troubleshooting
#e::return
#.::return
#o::return
#u::return
Space & u::
Space & .::
Space & o::
Space & e::
send {LWin Down}
spcup()
exit
spcup()
{
while GetKeyState("Space", "P") {
rite := GetKeyState("u", "P")
left := GetKeyState("o", "P")
up := GetKeyState(".", "P")
down := GetKeyState("e", "P")
if (rite=1) {
Sleep 75
Send {Right}
Sleep 75
}
else if (left=1) {
Sleep 75
Send {Left}
Sleep 75
}
else if (up=1) {
Sleep 75
Send {Up}
Sleep 75
}
else if (down=1) {
Sleep 75
Send {Down}
Sleep 75
}
else if !GetKeyState("Space", "P") {
sleep 75
Send {LWinUp}
exit
}
}
}
PS, я использовал пробел, потому что мой левый ключ Windows физически поврежден.Привязка пространства к себе, добавление строки «Space :: Space», работает частично, только событие up зарегистрировано как горячая клавиша, поэтому оно срабатывает только при отпускании пробела, выдающего это:
20 039 s d 0.25 Space
20 039 h u 0.16 Space
20 039 i d 0.00 Space
20 039 i u 0.00 Space
s=suppressed
h=hotkey
i=ignored(sent by autohotkey itself)
«Решено», вид.У префиксного ключа нет способа сохранить исходную функцию без ~, следовательно, отправка его в активное окно, что нежелательно.
isWindowFullScreen()
{
;checks if the specified window is full screen
;use WinExist of another means to get the Unique ID (HWND) of the desired window
if WinExist("A") {
WinGet, style, Style, A
WinGetPos ,,,winW,winH, A
; 0x800000 is WS_BORDER.
; 0x20000000 is WS_MINIMIZE.
; no border and not minimized
retVal := ((style & 0x20800000) or winH < A_ScreenHeight or winW < A_ScreenWidth) ? 0 : 1
Return, retVal
}
else {
return
}
}
#if isWindowFullScreen() = 0
#e::return
#.::return
#o::return
#u::return
#Space::return
Space::Space
Space & u::
Space & .::
Space & o::
Space & e::
send {LWin Down}
spcup()
exit
spcup()
{
while GetKeyState("Space", "P") {
loop {
rite := GetKeyState("u", "P")
left := GetKeyState("o", "P")
up := GetKeyState(".", "P")
down := GetKeyState("e", "P")
if (left=1) {
Sleep 75
Send {Left}
Sleep 75
}
else if (up=1) {
Sleep 75
Send {Up}
Sleep 75
}
else if (down=1) {
Sleep 75
Send {Down}
Sleep 75
}
else if (rite=1) {
Sleep 75
Send {Right}
Sleep 75
}
} until !GetKeyState("Space", "P")
Sleep 75
Send {LWinUp}
exit
}
}