web-dev-qa-db-ja.com

CtrlをAltに再マップし、Alt + TabとCtrl + Tabを維持します

CtrlとAltを入れ替えるためにautohotkeyを使用しています

LAlt::LCtrl
LCtrl::LAlt 

これはうまく機能しますが、それに加えて、Alt + TabとCtrl + Tabを元の場所に保持したいと思います。

私はすでに多くの異なるコードスニペットを試しましたが、これまでのところ実際にうまく機能したものはありません。

完全に機能するソリューションに最も近いのは、Alt + Tabのみで、Shift + Alt + Tabはありません https://stackoverflow.com/questions/18454895/using-auto-hotkey-to -swap-ctrl-alt-and-implement-ctrl-tab

2
herkulano

了解しました。動作します。

それは正しい方向でしたが、コードにはいくつかの問題がありました。特に、LShiftがfalseであるかどうかはチェックされていなかったため、最初のステートメントは常にtrueでした。

Ctrl + Tabのサポートも追加しました。

*tab:: 
{   
    if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LControl up}{LAlt down}{tab}
        KeyWait, tab  
    } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P")) {     
        Send {LControl up}{LShift down}{LAlt down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LAlt up}{LCtrl down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P")) {  
        Send {LAlt up}{LShift down}{LCtrl down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LWin down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P")) {  
        Send {LShift down}{LWin down}{tab}
        KeyWait, tab
    } else {   
        send {tab}
    }      
    return
}

~LAlt Up::
{   
    send {LAlt up}
    return
}

~LCtrl Up::
{   
    send {LCtrl up}
    return
}

LAlt::LCtrl 
LCtrl::LAlt
5
herkulano

私はあなたがリンクした回答で提供されたコードの例からのみ作業しているので、以下のコードをまとめました。 「Shift + Alt + Tab」でどのアクションが実行されるかわかりません。システムで応答がないため、これが目的の効果を発揮するかどうかをテストする必要があります。

*tab::
{   if (GetKeyState("LAlt", "P"))  
{   Send {LControl up}{Alt down}{tab}
    KeyWait, tab  
}else if (GetKeyState("LAlt", "P")) AND (GetKeyState("LShift", "P"))  
{ Send {LControl up}{LShift down}{Alt down}{tab}
    KeyWait, tab  
}else   
{   send {tab}
}      
return
}          
~LAlt Up::
{   send {lAlt up}
return
}
LAlt::LCtrl 
LCtrl::LAlt  
1
David Metcalfe

私にとって、@ herkulanoバージョンはWindows10では信頼できません。時々それは異なるキーを実行し、私は働くことができません。

代わりに、C-M--のような組み合わせでEmacsでも機能するこれを使用します。

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
; The .ahk text file needed to be saved with UTF8-BOM encoding rather than UTF8
; https://stackoverflow.com/questions/15635635/how-do-i-use-unicode-in-autohotkey
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

global sendLAltUpOnLCtrlUp := 0

;; https://superuser.com/questions/984343/remap-ctrl-to-alt-and-keep-alttab-and-ctrltab/1332713#1332713
;; https://autohotkey.com/board/topic/96465-switch-alt-and-ctrl-retain-alt-tab/
;; Let LCtrl sends LWin, LWin sends LAlt and LAlt sends LCtrl using SharpKeys and then
*tab:: 
{
    if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P") = false) {
        sendLAltUpOnLCtrlUp := 1
        Send {LCtrl up}{LAlt down}{tab}
        KeyWait, tab  
    } else
    if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P")) {
        sendLAltUpOnLCtrlUp := 1
        Send {LCtrl up}{LShift down}{LAlt down}{tab}
        KeyWait, tab
    } 
    else {   
        send {tab}
    }      
    return
}

~LCtrl up::
{   
    if(sendLAltUpOnLCtrlUp == 1) {
      sendLAltUpOnLCtrlUp := 0
      send {LAlt up}
    } else {
      send {LCtrl up}
    }
    return
}

~LAlt up::
{   
    send {LAlt up}
    return
}

;; Example how to insert polish diactrics with `RAlt + Shift + A` etc.
;; https://pl.m.wikipedia.org/wiki/Alfabet_polski
>!+a::Send {U+0104}
>!a::Send {U+0105}
1
rofrol

これを別の.ahkに入れてください:

SendMode Input 
*LAlt::
    send {LCtrl down}
    Keywait, Lalt
    send {LCtrl up}
return
*LCtrl::
    send {Lalt down}
    Keywait, LCtrl
    send {Lalt up}
return

そしてこれは別の.ahkで:

SendMode Input 

LAlt & Tab::
    send {Lalt down}{Tab}
return 

+esc::Exitapp

次に、両方のスクリプトを実行します(最初のスクリプトを最初に実行します)。

0
Mikhail V

@rofrolのバージョンは本当に気に入りましたが、Ctrl(+ Shift)+ Tabが押されたときにAlt(+ Shift)+ Tabの送信のみを処理しました。

Alt(+ Shift)+ Tabが押されたときの逆のCtrl(+ Shift)+ Tabも必要でした。

さらに、コーディング中に常に使用する単純なShift + Tab機能が壊れたため、それを修正するための条件を追加しました。

global sendLAltUpOnLCtrlUp := 0
global sendLCtrlUpOnLAltUp := 0

*tab::
{
  if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P"))
  {
    sendLAltUpOnLCtrlUp := 1
    Send {LCtrl up}{LShift down}{LAlt down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LCtrl", "P"))
  {
    sendLAltUpOnLCtrlUp := 1
    Send {LCtrl up}{LAlt down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P"))
  {
    sendLCtrlUpOnLAltUp := 1
    Send {LAlt up}{LShift down}{LCtrl down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LAlt", "P"))
  {
    sendLCtrlUpOnLAltUp := 1
    Send {LAlt up}{LCtrl down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LShift", "P"))
  {
    Send {LShift down}{tab}
    KeyWait, tab
  }
  else
  {
    send {tab}
  }
  return
}

~LCtrl up::
{
  if(sendLAltUpOnLCtrlUp == 1)
  {
    sendLAltUpOnLCtrlUp := 0
    send {LAlt up}
  }
  else
  {
    send {LCtrl up}
  }
  return
}

~LAlt up::
{
  if(sendLCtrlUpOnLAltUp == 1)
  {
    sendLCtrlUpOnLAltUp := 0
    send {LCtrl up}
  }
  else
  {
    send {LAlt up}
  }
  return
}
0
nearlyNarwhal