2018年05月13日

AutoHotKeyで無変換+SHIFT+**を実装する



AutoHotKey はいろいろなキーボードの動作を変更できて非常に便利なツールです。
普段使っているのは、キーアサインの再定義なのですが、一点問題が…

 特殊キー+SHIFT+(何かのキー)

が定義できません。

■無変換+(何かのキー)


たとえば、無変換+N キーで、DEL キーの代わりをさせたとします。

キー定義はこんなふうになります。

  vk1Dsc07B & n:: Send, {Blind}{Del} ; DEL

これ自体は問題なく動きますが、せっかくなので、「SHIFT キーが同時の押されていたら "行末まで削除" にしたい」と思っても、

  vk1Dsc07B & +n::

の定義は受け付けてくれません(+は SHIFT の修飾子)。

■3キーのコンビネーション


結局やりたいことは2つのキーのコンビネーションではなく、3つのキーのコンビネーションなわけです。

で、このときの対策は、実行プログラム中でこれを判断してやればできるようになります。

私が実装しているのは

 無変換 +n :DEL(1文字後方削除)
 無変換 +m :BS(1文字前方削除)
 無変換+SHIFT+n :行末まで削除
 無変換+SHIFT+m :行頭まで削除

です。

実際のコーディングは以下のようになります。

◇――――――――――――――――――――――――――
vk1Dsc07B & m::                             ; 行末まで削除(改行記号除く)
    GetKeyState, sss, Shift
    if sss = D
    {
        Send, {Blind}+{End}         ; 行末まで
        Send, {Blind}+{Left}                ; 改行記号除く[*1]
        Send, {Blind}{DEL}          ; 行末まで削除(改行記号除く)
    }
    else
        Send, {Blind}{Del}          ; DEL
    return
vk1Dsc07B & n::
    GetKeyState, sss, Shift
    if sss = D
        Send, {Blind}+{Home}{DEL}       ; 行頭まで削除
    else
        Send, {Blind}{BS}           ; BS
    return
――――――――――――――――――――――――――◇


まあ、なにをやっているかは、無変換+キー が押されたら、その中で SHIFT キーが押されているかどうかを判断して、動作を変えているだけです。

[*1] 部分で1文字左側に戻しているのは、多くの編集画面では、SHIFT+END とやると改行まで選択されてしまうので、そのまま削除を実行すると、次の行と連結しちゃうからです。

もし、改行まで選択されないようなアプリがあれば、そのアプリを WinGetTitle で除外してやります。

私愛用の Sakura エディタがそうなので、

◇――――――――――――――――――――――――――
vk1Dsc07B & m::                             ; 行末まで削除(改行記号除く)
    GetKeyState, sss, Shift
    if sss = D
    {
        Send, {Blind}+{End}         ; 行末まで
        WinGetTitle, ttt, A
        if InStr(ttt, "- sakura") = 0
            Send, {Blind}+{Left}            ; 改行記号除く
        Send, {Blind}{DEL}          ; 行末まで削除(改行記号除く)
    }
    else
        Send, {Blind}{Del}            ; DEL
    return
――――――――――――――――――――――――――◇


実体はこんなふうにして使ってます。

アプリ側で、「SHIFT+DEL で行末まで削除」みたいに設定できるものは、何も考えなくてもいいですけどね。

もう少しスマートにできるといいのですけど…。




◆このテーマのおすすめ図書


10年後の仕事図鑑

「仕事ができるやつ」になる最短の道

仕事が速いのにミスしない人は、何をしているのか?

自分の仕事をつくる

アイデアのつくり方を「仕組み化」する

■同じテーマの記事

ポストイットでキーボードの掃除をする

ちょっとしたスキマ時間にキーボードのお掃除をするとタイプしやすくなるかも知れません。ちょっと反応が悪くなったときなど、あんがいゴミが詰まってキーが押しにくく鳴っているだけの場合もあります。ポストイットにはのりが付いている仕事をしていれば、多分机の中には大量のポストイットがありますよね。大きいのから小さいのまで。私は以前の記事のように、ポストイット(「付箋」と呼んだほうがワタシ的にはしっくり来るが)を大量に使うので、大判のものから小型のものまで、かなりいろ..

ステルスバッチファイル―作業を邪魔しないようなバッチファイルを作る方法

作業を簡単に、すばやくやるようにするには、今どきの言葉なら RPA。以前は普通に Windows オートパイロットとかバッチ処理とか読んでましたが。コンサルタントさん、いろいろ儲けの手口を考えますね。まあ、PC なんてもともと、自動化というかプログラムのカタマリなので、いまさらそれを、自動化とかロボットとか言われても、ソフト屋には、「何をいまさら…」みたいなところはありますが。自動処理プログラムが鬱陶しい過去記事でもいろいろ触れてますが、自動的になにかの..

新しくはじめる

新しいことなにか新しいことをはじめるときには、新しいことをやれる時間を作らないといけません。自分の知る限り、時間を作り出すためには3つしか方法はありません。−−−−−−−−−−−−−−−−−−−−−−−−−−−−1.やめる−今やっていることを「やらない」ようにする2.へらす−今やっていることの頻度を減らす3.かえる−やり方を変えてもっと効率的にする−−−−−−−−−−−−−−−−−−−−−−−−−−−−いつも、私は何かを新たにやろう..

スタートアップアプリを遅延起動させる

PC の再起動をすると、つぎに使える状態になるまでに結構な時間がかかります。これは、PC を使い続けているとドンドン悪化します。特に Windows はこれがひどくて、さらに、ちょっとしたお試しでアプリを入れるたびにさらに悪くっていくような気が…。Windows で基本機能だけ最初に立ち上げるWindowsには StartUp というフォルダがあって、ここにファイルを登録しておくと、Windows 起動時に勝手にアプリを立ち上げてくれます。特に常駐してな..

エクスプローラで日本語ファイル名にジャンプする方法を作ってみる

エクスプローラを表示しているときに、ファイル名の先頭文字をタイプするとフォーカスがそのファイルにジャンプします。ただし文字が日本語だと妙な動きをしたりしてあまり使い勝手がよくありません。これをちょっと AutoHotKey で改造してやると格段に使い勝手が良くなりましたのでご紹介。ファイルにいきなりジャンプする方法最初にご存じない方のために、このファイルのジャンプ機能について説明しておきます。エクスプローラを開いた状態で、そのフォルダに以下のようなファイ..

OneNoteで特定のページにジャンプする方法

日誌や Web で調べたことなどを Microsoft OneNote にいつも保存しています。最初は Evernote でやっていたのですが、会社で使うのは Microsoft Office なので、やっぱりマイクロソフトの製品のほうが相性が良いのと、Evernote は無償版だといろいろ制限ができちゃったので、全面的に OneNote になりました。ただ、OneNote ではページはそれぞれ独立で、入り口ページとかが作れません。作れないのであれば、それができるよう..

posted by 管理人 at 08:31| Comment(0) | 心理技術 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。