Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для FalseTrue

Новый участник


Сообщения: 46
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
;~ #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, может кто-то знает как?

Отправлено: 18:51, 06-09-2015 | #2