Что нового

Отключить Caps lock для окна программы

dvnch

Новичок
Сообщения
1
Репутация
0
Доброго времени суток! Стоит задача отключить капслок для окна определенной программы.
Данная программа представляет собой win клиент для удаленного доступа к серверу Xpra, который в свою очередь представляет из себя что-то вроде *nix реализации RemoteApp.
В данном клиенте есть баг, заключающийся в том, что при включенном капслоке, на русской раскладке, отваливаются все комбинации клавиш "CTRL+C CTRL+V CTRL+Z и т.д.". И я решил попробовать отключить принудительно данную клавишу для данного окна.
Видео демонстрация окна программы и процесса подключения к ней, по ссылке на гдиск: https://drive.google.com/file/d/15UrPx6pzi1o7WdVneivQGKYTtZoVDUro/view

P.S. есть топик с реализацией похожего скрипта https://autoit-script.ru/threads/caps-lock-on-off-pishi-vsegda-zaglavnymi.24958/ . Но сложность заключается в том, что окно клиента Xpra просто передает удаленную картинку, и сам процесс исполняется на стороне сервера.


с глубочайшим Уважением.
 

All2khoff

Продвинутый
Сообщения
396
Репутация
72
пара вариантов.
1
Код:
#include <WinAPISys.au3>

While 1
    ; Проверяем, активно ли окно программы
    If WinActive("Ammy Admin") Then
        ; Проверяем, включен ли CapsLock
        If _WinAPI_GetKeyState(0x14) Then
            ; Выключаем CapsLock
            Send("{CAPSLOCK off}")
        EndIf
    EndIf
    Sleep(100)
WEnd

2
Код:
Global $sWindowTitle = "AmmyAdmin"
While True
    ; Проверяем, активно ли окно программы
    If WinActive($sWindowTitle) Then
        ; Проверяем, включен ли CapsLock
        If _IsCapsLockOn() Then
            ; Выключаем Caps Lock
            Send("{CAPSLOCK}")
        EndIf
    EndIf
    Sleep(100)
WEnd

; Функция для определения состояния Caps Lock
Func _IsCapsLockOn()
    Return BitAND(DllCall("user32.dll", "int", "GetKeyState", "int", 20)[0], 1) = 1
EndFunc
 
Верх