タグ: keyremap

  • キーのリマッピング

    自分用に修正したので貼っておこー

    機能追加

    Winキー:Shiftキーと同じ処理を割り当てました。Alt+Qなどを複数回押下するときにAlt+Win+Qで画面サイズの変更の方向を逆転します。左手の親指でAlt+Winを押下することを想定しています。

    2ストローク:Alt+Q、A、W、Sキーで画面高さを変更した後、Alt+1、3キーで画面幅を変更できるよう修正しました。Alt+Q、A、W、Sキーで高さ、Alt+1、3で幅を変更してください。

    補足

    2ストロークキーのタイムアウト処理や2キー目のクリア処理等が必要ですが未実装です。前回のキー操作を内部で保持しているため、初回のキー操作では意図した方向に画面サイズが変更されない場合があります。その場合は、Alt+2キーで画面位置を初期化後、再度操作してください。(Alt+2キーは2ストローク未対応です)

    機能変更(仕様変更)

    修正前:2024/07/21公開
    Alt + q,a,w,sキーの押下後にAlt + 矢印キーで画面移動を追加(実用的な機能ではない)

    修正後:本投稿公開日
    Alt + q,a,w,s,e,d,1,3キーの押下後にAlt + 矢印キーで画面サイズを変更(実用的な機能への伏線?)

    右手は添えるだけで左手だけで完結したいけどAlt+Q、A、W、Sキーで高さ、Alt+1、3で幅を変更するのは分かりづらい使いづらい。だからと言ってマウスの上にいる右手をいちいちキーボートの矢印キーまで移動して画面サイズを変更するのか?そんなことをするなら素直にマウスで画面サイズを変更するよな。常考。

    画面サイズの変更間隔を10%から5%に修正しました。

    ; 画面サイズ定義1
    LEFT_WIDTH := [0.5, 0.6, 0.7, 0.3, 0.4]
    CENTER_WIDTH := [0.5, 0.6, 0.7, 0.3, 0.4]
    RIGHT_WIDTH := [0.5, 0.6, 0.7, 0.3, 0.4]
    UPPER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.3, 0.4]
    LOWER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.3, 0.4]
    ; 画面サイズ定義2
    LEFT_WIDTH := [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 0.25, 0.3, 0.35, 0.4, 0.45]
    CENTER_WIDTH := [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 0.25, 0.3, 0.35, 0.4, 0.45]
    RIGHT_WIDTH := [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 0.25, 0.3, 0.35, 0.4, 0.45]
    UPPER_HEIGHT := [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 0.25, 0.3, 0.35, 0.4, 0.45]
    LOWER_HEIGHT := [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 0.25, 0.3, 0.35, 0.4, 0.45]

    10%間隔の定義も残していますのでお好みで修正してください。

    スクリプトの処理が上から下に流れます。画面サイズ定義1の値を画面サイズ定義2の値で上書きしています。25行目~29行目の先頭にセミコロンを付けるか行ごと削除すると19行目~23行目の処理が有効になり従来の10%間隔の定義となります。

    スクリプト実行中にスクリプトファイルを修正した場合、タスクトレイから「Reload Script」を実行してください。

    作ったもの

    https://github.com/kozawa-tokyo/keyremap
    keyremap_20250322.zip

    その他

    コードをリファクタリングしました。不具合対応の処理を移動したりコメントの修正など行っています。

    今回変更していないファイルもすべて圧縮しました。使用しているDLLも最新(Windows 11 binary, works with 24H2, 26100.2605)版をバンドルしています。Windows 10などの旧環境で問題が発生する場合は以下のサイトからDLLをダウンロードして差し替えてください。

    ; ----------------------------------------
    ; DLL関連関数
    ; VirtualDesktopAccessor.dll
    ; Copyright (c) 2015-2023 Jari Otto Oskari Pennanen
    ; https://github.com/Ciantic/VirtualDesktopAccessor
    ; https://opensource.org/license/mit
    ; ----------------------------------------

    フォルダ構成を変更しました。dllフォルダを追加しています。

    C:\tool\keyremap*
    │ KeyRemap.ahk
    ├─dll
    │ VirtualDesktopAccessor.dll
    └─images
       ├─dark
       │   1.png
       │   2.png
       │   3.png
       │   4.png
       │   5.png
       │   6.png
       │   R.png
       └─light
          1.png
          2.png
          3.png
          4.png
          5.png
          6.png
          R.png

    *:任意のフォルダで使用できます。

    また、過去の投稿に「keyremap」タグを付けて参照できるようにしました。大きく3つの機能があります。

    • キーのリマップ
    • アクティブ画面の移動
    • 仮想デスクトップの移動

    使用方法の詳細については、過去の投稿を参照してください。

    https://kozawa.tokyo/blog/?tag=keyremap

    応援・寄付のお願い

    Amazonギフトカード
    欲しいものリスト

    メールアドレス「develop.kozawa@gmail.com」です。
    🍻より良いフリーソフトのためにー 

  • キーのリマッピング

    もう「Microsoft PowerToys」の「FancyZones」でいいかもしれないけど、自分用に修正したので貼っておこー

    バグ修正

    • Alt+Qキーでの画面移動時に高さの指定に誤りがありましたので修正しました。

    機能変更

    Alt+Q、Alt+A、Alt+W、Alt+Sキー:画面幅を固定値(スクリーン幅/2)としていた処理を修正しました。
    →Alt+1キーまたはAlt+3キーで画面幅を変更した後、Alt+Q、Alt+A、Alt+W、Alt+Sキーで高さを変更してください。

    機能追加

    Alt+F12:アクティブ画面の位置・サイズを埋め込んだスクリプト文字列をメッセージボックスで表示します。

    !F12:: {
        WinGetPos &x, &y, &width, &height, WinGetID("A")
        message := Format('WinMove({1}, {2}, {3}, {4}, WinGetID("A"))', x, y, width, height)
        A_Clipboard := message
        MsgBox(message,, "OK")
    }

    →クリップボードに「WinMove(0, 0, 960, 516, WinGetID(“A”))」のようなスクリプト文字列がコピーされます。固定位置に画面を移動させたい場合に任意のホットキーに割り当ててください。

    例:Alt+4、Alt+5、Alt+6

    ; 画面位置設定例
    !*4:: WinMove(0, 0, 960, 516, WinGetID("A"))
    !*5:: WinMove(500, 250, 960, 600, WinGetID("A"))
    !*6:: WinMove(960, 516, 960, 516, WinGetID("A"))

    スクリプト修正後はスクリプトのリロードが必要です。

    作ったもの

    keyremap_20250122.zip

  • Ctrl押しっぱなし問題

    バグ修正

    • Ctrlキーの押下が解除されない

    この件、AutohotKey界隈ではよく知られた現象らしく、Ctrlキー以外にも修飾キー全般で押しっぱなしになる不具合が発生する模様。

    ググると沢山情報が出てくる。

    • AutoHotkey:キー押しっぱなし病・ホットキーすり抜け病対策の研究
    • AutoHotkeyの押しっぱなし問題
    • 快適キーボード操作のためのキーカスタマイズ 〜AutoHotKeyのキー押しっぱなし問題とScrollLockの非推奨~
    • 【AutoHotkey】キーが押しっぱなしになる現象の対策メモ(2024年6月最新版)
    • AutoHotkeyでShiftの単押しと修飾キーとしての押しっぱなしを別のキーマップにする
    • AutoHotkeyを始めるなら最初にこれを書いておこう

    ・・・

    機能修正

    SendMode "Event"
    
    ; 不具合対処
    ; 稀に修飾キーが押下した状態のままになる現象が発生する。
    ; ホットキー終了時に必ずCtrl/Altキーを上げる。
    sendWrap(key)
    {
        try
            Send key
        finally
            Send "{Ctrl Up}"
    }
    setWindowPositionWrap(windowPosition, monitorNum*)
    {
        try
            if (monitorNum.Length > 0)
                setWindowPosition(windowPosition, monitorNum[1])
            else
                setWindowPosition(windowPosition)
        finally
            Send "{Alt Up}"
    }
    ^!r:: {
        Send "{Ctrl Down}"
        Send "{Ctrl Up}"
        Send "{Alt Down}"
        Send "{Alt Up}"
        Reload
    }

    現象がまったく出なくなるような対処方法はないようだけど、SendをSendEventに変更したら発生頻度が下がったとの情報があったので「SendMode “Event”」の1行を追加した。

    また、send/setWindowPosition関数をWrapしてホットキーの終了時に無条件でCtrl/AltのUpイベントを発行するように修正した。無条件でUpイベントが発生することによる副作用が懸念されるけれど押しっぱなしになるよりは良いかと思われる。

    暫定対処で追加したCtrl+Alt+Rキーの処理は残してAltキーの対処も追加しておいた。

    これでも再発するならsleepを入れたり、修飾キーをF13~F14キーに割り当てたり、別の方法で試行錯誤しながら修正していくことになる。

    しばらく様子見です。

    作ったもの

    keyremap_20241222.zip

  • キーのリマッピング

    自分用に修正したので貼っておこー  

    バグ修正

    • Ctrlキーの押下が解除されない

    エレコムのキーボードに変えてからCtrlキーを使ったホットキーでタイポした場合に上記の不具合が顕在化する場合がある。

    再現方法不明。発生頻度は高くない。RealforceやHHKBでは発生しないので安いキーボードのスイッチが原因と思われる。

    チャタリングが発生する

    AutoHotkeyを最新バージョンに入れ替えても改善されず。

    Downloads

    機能追加

    スクリプトでの対処はできないので現象発生時のリカバリー用に以下のホットキーを追加した。

    ^!r:: {
        Send "{Ctrl down}"
        Sleep 100
        Send "{Ctrl up}"
        Sleep 100
        Reload
    }

    Ctrl+Alt+Rキー:ソフトウェア的にCtrlキーを押下してスクリプトをリロードする。

    作ったもの

    keyremap_20241215.zip

  • キーのリマッピング

    自分用に修正したので貼っておこー

    バグ修正

    • Firefox対応
      Firefoxのウインドウを移動した場合、ディスプレイの右側/下側で画面のサイズを変更ができなかったのでウインドウ枠を固定「7px」から可変値に修正した。

    機能変更

    • タスクビューのソースからタスクトレイアイコン周りのソースだけ切り出してマージした。仮想デスクトップ間でのウインドウ移動は意図しない動作が多発してしまうので使用中止。。「VirtualDesktopAccessor.dll」を「KeyRemap.ahk」と同じフォルダに格納するとタスクトレイのアイコンが「R」から「数字」になる。(任意)
    • ホットキーのモディファイア「*」を削除した。
    • 画面サイズの定義をスクリプトの最後に移動した。

    その他

    作ったもの

    keyremap_20240922.zip

  • ダークモード

    素人で悪いか。

    タスクビュー

    機能追加

    • ダークモードの判定を追加
    • ダークモード用のタスクトレイアイコンを追加

    作ったもの

    taskview_ext_20240721.zip

    キーのリマッピング

    機能追加

    • ダークモードの判定を追加
    • タスクトレイアイコンを変更

    仕様変更

    • Windows 11以外は動作確認していないため、OSの判定処理は削除。
    • Alt + 数字キー押下後、初回のAlt + 矢印キーで画面サイズが変更されなかったので修正。
      • Alt + 1押下後、Alt + Leftキー
      • Alt + 2押下後、Alt + Up/Downキー
      • Alt + 3押下後、Alt + Rightキー

    Alt + 矢印キー押下後のAlt + 数字キーも同様。

    機能追加

    • Alt + q,a,w,sキーの押下後にAlt + 矢印キーで画面移動を追加(実用的な機能ではない)

    作ったもの

    keyremap_20240721.zip

    余談

    AutoHotkeyのデフォルトのアイコンが「H」アイコンなので、KeyRemapのアイコンを「R」にしました。

    以下をコメントアウトすると表示されます。

    ; 仮想デスクトップ移動
    #Include "*i C:\tool\taskview\taskview_ext.ahk"

    「R」シールに似ていますが、私は蓮舫さんの支持者ではありません。負けたら黙ろうなー どあほうが・・・w

    https://www.google.com/search?q=蓮舫%20R&tbm=isch

  • キーのリマッピング

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

    仕様変更

    • 「ROTATION_LENGTH」のユーザー定義を削除して各配列長でローテーションするように変更
    • 初期値の変更

    機能追加

    • 画面移動のホットキー再押下時にShiftキーで戻る
    • Alt + 矢印キーでの画面移動を追加(Alt + 1,2,3と同様)

    作ったもの

    keyremap_20240630.zip

  • Maker’s Mark

    https://kozawa.tokyo/?p=1353

    タスクビュー、バグってるやん。新規に起動したときにデフォルトアイコンが表示される。スクリプトをリロードして動作確認した場合は問題なかったのに、新規で起動された場合はデフォルトのアイコンが…w これは酷い。だめだこりゃー

    バグ修正したので貼っておく。

    taskview_ext_20240623.zip

    キーのリマッピングの方は、「Alt」+「1」キーと「Alt}+「3」キーの2回目の押下で動作が違う。画面が大きくなる動作で統一した方がいいのか悪いのか、この辺りは好みの問題かもしれないけど、自分で作成すると細かいところまで自由に直せるのはいいよねえ。作りながら直しながら使えるものができるといいなぁとは思う。明日直せるかな。

    画面の移動まわりの処理を修正したので貼っておく。

    keyremap_20240623.zip

    機能追加

    ; Home/End
    !Left:: Send "{Home}"
    !Right:: Send "{End}"
    !+Left:: Send "+{Home}"
    !+Right:: Send "+{End}"
    
    ; 画面移動(上/下)
    !e:: setWindowPosition("e")
    !d:: setWindowPosition("d")
    • 上記のホットキーを追加
    • すべての画面移動についてホットキーの再押下で画面サイズを変更
    • 画面サイズの変更でユーザー定義を可能にした↓

    ユーザー定義

    初期値ではホットキーを3回押下すると元のサイズに戻ります。

    ; 画面移動ホットキーの再押下(1サイクル)
    ; 1以上の整数を指定する
    ROTATION_LENGTH := 3
    
    ; 以下の配列の先頭から「ROTATION_LENGTH」個まで使用している
    ; 再押下ごとの画面サイズを百分率で指定する
    ; Alt + [1]
    LEFT_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [2]
    CENTER_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [3]
    RIGHT_WIDTH := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [qwe]
    UPPER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    ; Alt + [asd]
    LOWER_HEIGHT := [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

    スクリプトを編集した場合は、スクリプトの再起動が必要です。

    例1:

    ホットキーの再押下で画面サイズを変更したくない場合

    ROTATION_LENGTH := 1

    1を指定すると配列の1つ目の値だけが使用されます。0.5 = 50% の大きさで画面の幅や高さが設定されます。

    例2:

    少しずつ画面サイズを大きくする場合

    ROTATION_LENGTH := 6

    ホットキーを6回押下すると元のサイズに戻ります。

    例3:

    少しずつ画面サイズを大きくする場合2

    ; ----------------------------------------
    ; User define
    ; ----------------------------------------
    
    ;
    ; ・・・ もともとのやつ ・・・
    ;
    
    ROTATION_LENGTH := 12
    LEFT_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    CENTER_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    RIGHT_WIDTH := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    UPPER_HEIGHT := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    LOWER_HEIGHT := [0.4, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
    
    ; ----------------------------------------
    ; define
    ; ----------------------------------------

    配列の要素数や要素の値は可変です。ROTATION_LENGTHで指定した要素数だけ値を定義してください。

    変数は再代入して上書きできますので上記のようにもとものコードの下に変更した内容を追記できます。もともとのコードはコピペ時のテンプレとして使用してください。

  • Maker’s Mark

    今日はこれ。おいしーーーー! 

    メモ書き。

    タスクビュー、バグってるやん。新規に起動したときにデフォルトアイコンが表示される。スクリプトをリロードして動作確認した場合は問題なかったのに、新規で起動された場合はデフォルトのアイコンが…w これは酷い。だめだこりゃー

    キーのリマッピングの方は、「Alt」+「1」キーと「Alt}+「3」キーの2回目の押下で動作が違う。画面が大きくなる動作で統一した方がいいのか悪いのか、この辺りは好みの問題かもしれないけど、自分で作成すると細かいところまで自由に直せるのはいいよねえ。作りながら直しながら使えるものができるといいなぁとは思う。明日直せるかな。

    あとは不定期のblogの投稿よりは、1か所にまとめて記事があった方がいいよな。AutohotKey V2をインストールしてくださいみたいなところからちゃんと整理して使えるようにしたいけどしばらくはこのままかもしれない。

    パブリックドメイン

    本サイトで公開する情報は、すべてパブリックドメインに供与いたします。自由に改変していただいて構いません。著作権も含めてすべての権利を放棄いたします。

    的なことよりURLのドメインどうするかの方が悩ましい。

    https://kozawa.tokyo

    https://猫猫猫.tokyo

    実名ドメインに戻す?サブドメインとして混ぜる?

    https://猫猫猫.kozawa.tokyo

    猫猫猫さん、著名人でいたんだよなぁ。ドメイン取得前に気づくべきだった… どうしようかな。

  • タスクビュー

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

    機能追加

    • タスクトレイのアイコンに現在の仮想デスクトップの番号を表示
    • タスクトレイのアイコンのメニューからデスクトップを移動

    作ったもの

    taskview_ext_20240620.zip

    「タスクビュー」のソースファイル

    #Requires AutoHotkey v2.0+
    #SingleInstance Force
    
    ; ----------------------------------------
    ; define
    ; ----------------------------------------
    
    PREV := "Prev"
    NEXT := "Next"
    OK := True
    NG := False
    BASE_DIR := "C:\tool\taskview\"
    VDA_PATH := BASE_DIR . "VirtualDesktopAccessor.dll"
    TRAYICON_PATH := BASE_DIR . "images\"
    hVirtualDesktopAccessor := DllCall("LoadLibrary", "Str", VDA_PATH, "Ptr")
    GetDesktopCountProc := DllCall("GetProcAddress", "Ptr", hVirtualDesktopAccessor, "AStr", "GetDesktopCount", "Ptr")
    GoToDesktopNumberProc := DllCall("GetProcAddress", "Ptr", hVirtualDesktopAccessor, "AStr", "GoToDesktopNumber", "Ptr")
    GetCurrentDesktopNumberProc := DllCall("GetProcAddress", "Ptr", hVirtualDesktopAccessor, "AStr", "GetCurrentDesktopNumber", "Ptr")
    MoveWindowToDesktopNumberProc := DllCall("GetProcAddress", "Ptr", hVirtualDesktopAccessor, "AStr", "MoveWindowToDesktopNumber", "Ptr")
    
    ; ----------------------------------------
    ; helper function
    ; ----------------------------------------
    
    GetDesktopCount() {
        count := DllCall(GetDesktopCountProc, "Int")
        return count
    }
    
    GoToDesktopNumber(number) {
        if (number > GetDesktopCount())
            return
        ; Win + 左右キーのアニメーションに操作感を合わせるため、
        ; 移動前後に0.5秒の待ち時間を設定している(機能的には不要)
        Sleep 500
        DllCall(GoToDesktopNumberProc, "Int", number - 1)
        Sleep 500
    }
    
    GetCurrentDesktopNumber() {
        number := DllCall(GetCurrentDesktopNumberProc, "Int")
        number++ ; デスクトップ番号を1オリジンで指定するため + 1
        return number
    }
    
    MoveWindowToDesktopNumber(number) {
        WinWaitActive WinExist("A")
        retry := 0
        Loop
            try {
                activeHwnd := WinGetID("A")
                number-- ; dllには0オリジンで渡すため - 1
                DllCall(MoveWindowToDesktopNumberProc, "Ptr", activeHwnd, "Int", number, "Int")
                result := OK
                break
            } catch {
                Sleep 250
                result := NG
                retry++
            }
        until retry == 10
    
        return result
    }
    
    moveWindow(desktop) {
        current := GetCurrentDesktopNumber()
        max := GetDesktopCount()
        if (desktop == PREV) {
            if (current == 1) {
                result := MoveWindowToDesktopNumber(max)
            } else {
                result := MoveWindowToDesktopNumber(current - 1)
            }
        } else if (desktop == NEXT) {
            if (current == max) {
                result := MoveWindowToDesktopNumber(1)
            } else {
                result := MoveWindowToDesktopNumber(current + 1)
            }
        } else {
            result := MoveWindowToDesktopNumber(desktop)
        }
        return result
    }
    
    moveDesktop(desktop) {
        current := GetCurrentDesktopNumber()
        max := GetDesktopCount()
        if (desktop == PREV) {
            if (current == 1) {
                GoToDesktopNumber(max)
            } else {
                Send "^#{Left}"
            }
            KeyWait "Left"
        } else if (desktop == NEXT) {
            if (current == max) {
                GoToDesktopNumber(1)
            } else {
                Send "^#{Right}"
            }
            KeyWait "Right"
        } else {
            GoToDesktopNumber(desktop)
        }
    }
    
    moveWindowMoveDesktop(desktop) {
        result := moveWindow(desktop)
        if (result == OK)
            moveDesktop(desktop)
    }
    
    ; ----------------------------------------
    ; tasktray
    ; ----------------------------------------
    
    ; メニュー追加
    A_TrayMenu.Add()
    num := 1
    Loop GetDesktopCount() {
        A_TrayMenu.Add("desktop " . num, MenuHandler)
        num++
    }
    MenuHandler(itemName, itemPos, myMenu) {
        itemCount := DllCall("GetMenuItemCount", "ptr", A_TrayMenu.Handle)
        startNum := itemCount - GetDesktopCount()
        newNum := itemPos - startNum
        moveDesktop(newNum)
    }
    
    ; タスクトレイ更新
    iconNum := 1
    Loop {
        currNum := GetCurrentDesktopNumber()
        if (iconNum != currNum) {
            try {
                ; アイコン
                TraySetIcon(TRAYICON_PATH . currNum . ".png")
                ; メニュー
                num := 1
                Loop GetDesktopCount() {
                    A_TrayMenu.Uncheck("desktop " . num)
                    num++
                }
                A_TrayMenu.Check("desktop " . currNum)
            }
            iconNum := currNum
        }
        Sleep 1000
    }
    
    ; ----------------------------------------
    ; main
    ; ----------------------------------------
    
    ; アクティブ画面移動
    ^+Left:: moveWindow(PREV)
    ^+Right:: moveWindow(NEXT)
    ^+F1:: moveWindow(1)
    ^+F2:: moveWindow(2)
    ^+F3:: moveWindow(3)
    ^+F4:: moveWindow(4)
    ^+F5:: moveWindow(5)
    ^+F6:: moveWindow(6)
    
    ; デスクトップ移動
    ^#Left:: moveDesktop(PREV)
    ^#Right:: moveDesktop(NEXT)
    ^#F1:: moveDesktop(1)
    ^#F2:: moveDesktop(2)
    ^#F3:: moveDesktop(3)
    ^#F4:: moveDesktop(4)
    ^#F5:: moveDesktop(5)
    ^#F6:: moveDesktop(6)
    
    ; アクティブ画面/デスクトップ移動
    ^#+Left:: moveWindowMoveDesktop(PREV)
    ^#+Right:: moveWindowMoveDesktop(NEXT)
    ^#+F1:: moveWindowMoveDesktop(1)
    ^#+F2:: moveWindowMoveDesktop(2)
    ^#+F3:: moveWindowMoveDesktop(3)
    ^#+F4:: moveWindowMoveDesktop(4)
    ^#+F5:: moveWindowMoveDesktop(5)
    ^#+F6:: moveWindowMoveDesktop(6)