Windows going crazy after typing Romanian characters using a Romanian Programmers layout while remapping Alt/Ctrl/Win with Autohotkey

一世执手 提交于 2019-12-14 03:55:56

问题


I've remapped some keys using Autohotkey, like this:

LWin::LAlt

LCtrl::LWin

LAlt::LCtrl

I'm using Windows 7 with the Romanian (Programmers) keyboard layout. If I want to type ă I hit RAlt + a, for example. It's called "Programmers" because it's a reqular US QWERTY layout with extras activated by RAlt.

However, if I run my Autohotkey script AND then I send a RAlt + a/s/t/i, the system goes bonkers. Even if I close Autohotkey it still behaves like that. I have to log off/reboot or hit magic key sequence to fix it (I still haven't figured out what sequence).

What I'm guessing happens is that Alt somehow gets stuck and every key I press is mixed up with Alt. Pressing Esc switches Windows, pressing F while in an application opens the File menu, etc.

Is this an Autohotkey bug or am I doing something wrong?

I've used SharpKeys in the past for this but due to some requirements - shared computer - I need something per user and that preferably can be turned off. Autohotkey would have been perfect for this.

Thank you.

Late edit - the solution was what 576i (first section + key mappings to replace the previous keyboard mapping I was using - I gave up Romanian Programmers)

; Remap Ctrl to Win, Win to Alt, Alt to Ctrl - credit to 579i
$*LWin::Send {LAlt Down} 
$*LWin Up::Send {LAlt Up}

$*LCtrl::Send {LWin Down}
$*LCtrl Up::Send {LWin Up}

$*LAlt::Send {LControl Down}
$*LAlt Up::Send {LControl Up}

; Keyboard mappings for Romanian letters
; First of all - GTK Windows are special and need special treatment
#IfWinActive, ahk_class gdkWindowToplevel
    >!a::SendInput {Control Down}{Shift Down}u0103{Control Up}{Shift Up}
    >!+a::SendInput {Control Down}{Shift Down}u0102{Control Up}{Shift Up}
    >!q::SendInput {Control Down}{Shift Down}u00E2{Control Up}{Shift Up}
    >!+q::SendInput {Control Down}{Shift Down}u00C2{Control Up}{Shift Up}
    >!i::SendInput {Control Down}{Shift Down}u00EE{Control Up}{Shift Up}
    >!+i::SendInput {Control Down}{Shift Down}u00CE{Control Up}{Shift Up}
    >!s::SendInput {Control Down}{Shift Down}u0219{Control Up}{Shift Up}
    >!+s::SendInput {Control Down}{Shift Down}u0218{Control Up}{Shift Up}
    >!t::SendInput {Control Down}{Shift Down}u021B{Control Up}{Shift Up}
    >!+t::SendInput {Control Down}{Shift Down}u021A{Control Up}{Shift Up}
; Then regular windows
#IfWinActive
    >!a::Send ă
    >!+a::Send Ă
    >!q::Send â
    >!+q::Send Â
    >!i::Send î
    >!+i::Send Î
    >!s::Send ș
    >!+s::Send Ș
    >!t::Send ț
    >!+t::Send Ț

[Edited to include the GTK fix; this still doesn't work for console Windows and there are some weird glitches when pasting, sometimes Ctrl is interpreted as Alt]


回答1:


If your right Alt key is an Alt-Gr key it will be intepreted as LControl & RAlt which triggers your script.

Also it looks like you got an endless loop there.

Look at this example, this should work better for you.

The $ before hotkeys prevents that the key you "Send" triggers the next hotkey. The * makes sure the key also works when pressed with other keys.

$*LWin::Send {LAlt Down}
$*LWin Up::Send {LAlt Up}

$*LCtrl::Send {LWin Down}
$*LCtrl Up::Send {LWin Up}

$*LAlt::Send {LControl Down}
$*LAlt Up::Send {LControl Up}

This remapping might still kill your Alt-Gr key if your keyboard drivers sends "LControl & RAlt" internally.

You can fix this creating a special hotkey either for Alt-Gr or - if the romanian keyboard has only a few Alt-Gr combinations, define those as hotkeys.

Example from the Autohotkey help file Hotkey page:

<^>!m::MsgBox You pressed AltGr+m.
<^<!m::MsgBox You pressed LeftControl+LeftAlt+m.


来源:https://stackoverflow.com/questions/18624933/windows-going-crazy-after-typing-romanian-characters-using-a-romanian-programmer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!