Хотя я не могу точно сказать, почему открывается языковая панель, в этой статье показано, как отключить встроенные горячие клавиши для языковой панели:
https://winaero.com/blog/change-hotkeys-switch-keyboard-layout-windows-10/
Также могут быть небольшие проблемы с вашим кодом. Похоже, между скобками есть пробелы; команда Send отправит эти пробелы. Конечно, я не ожидал, что это вызовет проблемы, с которыми вы столкнулись.
Вот сокращенная версия вашего кода, которая может вести себя лучше:
<!d::
flag := !flag
If flag
Send , ^#{right}
Else
Send , ^#{left}
Return
Вот еще более сжатая версия с использованием троичного оператора:
<!d::
sKeyName := ( flag := !flag ) ? "right" : "left"
Send , ^#{%sKeyName%}
Return
Вот оно в одной строке:
<!d::Send , % "^#{" . (( flag := !flag ) ? "right" : "left" ) . "}"
Я не знал, что все это можно поместить в одну строку, поэтому я кое-что узнал сегодня. : D