Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Переключение раскладки клавиатуры с помощью клавиш Ctrl и Shift (http://forum.oszone.net/showthread.php?t=304712)

FalseTrue 31-08-2015 11:47 2547788

Переключение раскладки клавиатуры с помощью клавиш Ctrl и Shift
 
Приветствую всех!

Подскажите, пожалуйста, как с помощью AutoIt v3.3.14.1 (использую Windows 10, x64) сделать так, чтоб по нажатию на правый Shift включалась английская раскладка клавиатуры, а по нажатию на правый Ctrl — русская. Я решил отказаться от Punto Switcher, в котором можно было легко задать такое поведение.

FalseTrue 06-09-2015 18:51 2550263

Мне подсказали вот такой код для решения моей задачи:

Код:

;~ #RequireAdmin
;~ #NoTrayIcon

#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <APISysConstants.au3>

OnAutoItExitRegister("OnAutoItExit")

$hWnd = GUICreate("")
GUIRegisterMsg($WM_HOTKEY, "WM_HOTKEY")

_WinAPI_RegisterHotKey($hWnd, 1, $MOD_SHIFT, 0)
_WinAPI_RegisterHotKey($hWnd, 2, $MOD_CONTROL, 0)

While Sleep(1000)
WEnd

Func WM_HOTKEY($hWnd, $iMsg, $wParam, $lParam)
  Switch $wParam
    Case 1
      _WinAPI_SetKeyboardLayout(WinGetHandle(""), 0x0409)
    Case 2
      _WinAPI_SetKeyboardLayout(WinGetHandle(""), 0x0419)
  EndSwitch
EndFunc

Func OnAutoItExit()
  _WinAPI_UnregisterHotKey($hWnd, 1)
  _WinAPI_UnregisterHotKey($hWnd, 2)
EndFunc

но в нём есть следующие недостатки:
  • переключение языка происходит по левому и правому Ctrl / Shift, а нужно чтоб только по правому;
  • я использую типографскую раскладку Бирмана, и как только я выполняю скрипт с вышеуказанным кодом, то в системе появляется две дополнительные раскладки (скриншот).

Ещё мне подсказали, что решить мою задачу можно проще с помощью AutoHotkey, может кто-то знает как?


Время: 10:55.

Время: 10:55.
© OSzone.net 2001-