キーのリマッピング

少し修正したので貼っておこー

バグ修正

  • アクティブ画面を移動したときに画面サイズが数ピクセル分小さく表示されるバグを修正。
    Windows11の場合のみ、固定値(7px)分だけ画面サイズを拡大した。画面サイズをマウスで変更できるように1pxだけ余白を残している。
    なお、デスクトップのテーマ等によっては意図した通り補正できない可能性がある。
  • Ctrl + 矢印キーのモディファイア「*」を削除。
    Ctrl + Win + 左右キーが無効化されていたので「*」を削除した。
  • アクティブ画面の移動/リサイズに失敗した場合の動作を修正。
    スクリプトが異常終了しないように修正した。

機能追加

  • Ctrl + iキー :上キー
  • Ctrl + kキー :下キー
  • Ctrl + jキー :左キー
  • Ctrl + lキー :右キー
  • Ctrl + uキー :Homeキー
  • Ctrl + oキー :Endキー
  • Alt + qキー :アクティブ画面左上寄せ
  • Alt + aキー :アクティブ画面左下寄せ
  • Alt + wキー :アクティブ画面右上寄せ
  • Alt + sキー :アクティブ画面右下寄せ

作ったもの

keyremap_20240610.zip

「キーのリマッピング」のソースファイル

https://ahkscript.github.io/ja/docs/v2/misc/Remap.htm

#SingleInstance Force

; ----------------------------------------
; helper function
; ----------------------------------------

; OS情報取得
GetWinOSVersion()
{
	osVersion := StrSplit(A_OSVersion, ".")
	major := osVersion[1]
	minor := osVersion[2]
	build := osVersion[3]
	If (major == "10")
		If (minor == "0")
			If (build >= "20000")
				Return 11
	Return 10
}

; ディスプレイ情報取得
getDisplayInfo(&x, &y, &width, &height)
{
	MonitorGetWorkArea(1, &Left, &Top, &Right, &Bottom)
	x := Left
	y := Top
	width := Right - Left
	height := Bottom - Top
}

; 画面位置取得
getWindowPosition(windowPosition, &x, &y, &width, &height)
{
	; ディスプレイ情報取得
	getDisplayInfo(&x, &y, &width, &height)

	; 画面サイズ補正
	; 画面の左,右,下に隙間が空くので補正する。
	; ウインドスタイル「WS_SYSMENU」が設定されていない画面は補正なし。(例:VSCode)
	edge := 0
	if (GetWinOSVersion() == 11) {
		style := WinGetStyle("A")
		if (style & 0x00080000) { ; WS_SYSMENU
			edge := 7 ; px
		}
	}

	; 画面位置計算
	if (windowPosition == 1) {
		x := x - edge
		y := y
		width := width / 2 + edge * 2
		height := height + edge
	}
	if (windowPosition == 2) {
		x := width * 0.1
		y := y
		width := width * 0.8 + edge * 2
		height := height + edge
	}
	if (windowPosition == 3) {
		x := width / 2 - edge
		y := y
		width := width / 2 + edge * 2
		height := height + edge
	}
	if (windowPosition == "q") {
		x := x - edge
		y := y
		width := width / 2 + edge * 2
		height := height / 2 + edge
	}
	if (windowPosition == "a") {
		x := x - edge
		y := height / 2 + y
		width := width / 2 + edge * 2
		height := height / 2 + edge
	}
	if (windowPosition == "w") {
		x := width / 2 - edge
		y := y
		width := width / 2 + edge * 2
		height := height / 2 + edge
	}
	if (windowPosition == "s") {
		x := width / 2 - edge
		y := height / 2 + y
		width := width / 2 + edge * 2
		height := height / 2 + edge
	}
	OutputDebug("x=" x " y=" y " width=" width " height=" height)
}

; 画面位置設定
setWindowPosition(windowPosition) {
	getWindowPosition(windowPosition, &x, &y, &width, &height)
	try {
		hwnd := WinGetID("A")
		WinMove(x, y, width, height, hwnd)
	}
}

; ----------------------------------------
; main
; ----------------------------------------

; 矢印キー × 5
^Up::Send "{UP 5}"
^Down::Send "{Down 5}"
^Left::Send "{Left 5}"
^Right::Send "{Right 5}"

; 上下左右
^*i::Send "{UP}"
^*k::Send "{Down}"
^*j::Send "{Left}"
^*l::Send "{Right}"
^*u::Send "{Home}"
^*o::Send "{End}"

; 削除
^*h::Send "{BS}"

; 画面移動(左/中央/右)
!1::setWindowPosition("1")
!2::setWindowPosition("2")
!3::setWindowPosition("3")

; 画面移動(左上/左下/右上/右下)
!q::setWindowPosition("q")
!a::setWindowPosition("a")
!w::setWindowPosition("w")
!s::setWindowPosition("s")

; 音量調整
^F10::Send "{VOLUME_MUTE}"
^F11::Send "{VOLUME_DOWN}"
^F12::Send "{VOLUME_UP}"

Ctrl + 矢印キー:矢印キー5回連打
Ctrl + iキー :上キー*
Ctrl + kキー :下キー*
Ctrl + jキー :左キー*
Ctrl + lキー :右キー*
Ctrl + uキー :Homeキー*
Ctrl + oキー :Endキー*
Ctrl + hキー :BackSpace
Alt + 1キー :アクティブ画面左寄せ
Alt + 2キー :アクティブ画面中央寄せ
Alt + 3キー :アクティブ画面右寄せ
Alt + qキー :アクティブ画面左上寄せ*
Alt + aキー :アクティブ画面左下寄せ*
Alt + wキー :アクティブ画面右上寄せ*
Alt + sキー :アクティブ画面右下寄せ*
Ctrl + F10 :音量ミュート
Ctrl + F11 :音量Down
Ctrl + F12 :音量UP

*:機能追加

既知の問題点

モニター1台の環境を前提としているため、別途修正するかもしれない。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です