🟩 もくじ
AutoHotkeyを使ったスクリプティング
- Windowsの世界では[AutoHotkeyを使ったスクリプティング]が、[ソフトウェア的なキーボード沼]の一種として存在する。
- Windows用のテンキー付き日本語キーボード〔REALFORCE/日本語 30g 静音 フルNキー〕にこそ、不要不急の余計なキー〔アサイン可能な予備ボタン〕がたくさん付いているので、[AutoHotkeyを使ったスクリプティング]で遊べる余地が大きい。
- AutoHotkeyを使ったキーマッピングの変更/キーへの独自アサインメントの一例。
- ■[無変換]は、[マウス左クリック]。
- ■[無変換+Space]は、[マウスによる選択範囲をクリップボードに読み込み、そのワードでGoogle検索]。
- ■[Caps]は[c]にしたから、[Ctrl+Caps]=[Ctrl+c]。
- ■[Ctrl+Tab]は、[すべてを選択+貼り付け]。
- ■[Ctrl+Back Space]は、[ブラウザーバック]。
- ■[Shift+Ctrl+Back Space]は、[ブラウザーフォワード]。
- ■[Windowsロゴボタン+w]は、[WZ EDITOR起動]。
- ■[Windowsロゴボタン+s]は、[サクラエディタ起動]。
- ■[Windowsロゴボタン+s〔二度押し〕]は、[ファイルAをサクラエディタで開く]。
- ■[Windowsロゴボタン+s〔長押し〕]は、[ファイルBをサクラエディタで開く]。
- ■[Scroll Lock]は、[クリップボードを使った、正規表現による文字置換〔AutoHotkey V2.1のみ〕]。
- そういう機能を、[AutoHotkey.ahk]というテキストファイルの中に、スクリプトとして書き込んでいく。
- こうしてキーボード操作だけで作業が完結する範囲が増えることによって、マウス操作が減るので効率的。
- こういう工夫の世界が面白いので、しょっちゅう[AutoHotkey.ahk]を書き換えている。これがキーボード沼。
以下のコードを[AutoHotkey.ahk]というファイル名にして、[C:\Users%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup]に置いておくことで、毎度、Windowsを立ち上げるごとに[AutoHotkey.ahk]を実効するようにしておく。
;■<a href="https://www.onlinemictest.com/ja/keyboard-test/" target="_blank" rel="nofollow">キーボードテスト – あなたのキーボードをテストしましょう</a><br>
;●●●[AHK Quick Convertor V2]を使ってコードをコンバートしてある
;■<a href="https://github.com/mmikeww/AHK-v2-script-converter?tab=readme-ov-file" target="_blank" rel="nofollow">GitHub - mmikeww/AHK-v2-script-converter: AHK v1 -> v2 script converter</a><br>
;全角/半角|vkF3 または vkF4
;変換|vk1C
;無変換|vk1D
;カタカナ/ひらがな/ローマ字|vkF2
;windows|#
;Alt|!
;Ctrl|^
;Shift|+
;左のモディファイアキーを使用(NT系専用)|<
;右のモディファイアキーを使用(NT系専用)|>
;●●●Windowsキー + w キーを同時押ししてWZ Editor 10を起動する
#UseHook ;UseHookをOnにした状態で使用
#w::
{
key := "w"
ErrorLevel := !KeyWait(key, "T0.3")
If(ErrorLevel){ ;長押しした場合
Run("C:\Program Files (x86)\sakura\sakura.exe C:\Users\" A_UserName "\Documents\note-archive.html")
ErrorLevel := !KeyWait(key)
return
}
ErrorLevel := !KeyWait(key, "D, T0.2")
If(!ErrorLevel){ ;2度押しした場合
Run("C:\Program Files (x86)\sakura\sakura.exe C:\Users\" A_UserName "\Documents\bookmarkstoday.html")
ErrorLevel := !KeyWait(key)
return
}else{ ;短押しした場合
Run("C:\Program Files\WZ EDITOR 10\wzeditor.exe")
ErrorLevel := !KeyWait(key)
return
}
}
;●●●Windowsキー + s キーを同時押ししてサクラエディターを起動する
#UseHook ;UseHookをOnにした状態で使用
#s::
{
key := "s"
ErrorLevel := !KeyWait(key, "T0.3")
If(ErrorLevel){ ;長押しした場合
Run("C:\Program Files (x86)\sakura\sakura.exe C:\Users\" A_UserName "\Documents\note-archive.html")
ErrorLevel := !KeyWait(key)
return
}
ErrorLevel := !KeyWait(key, "D, T0.2")
If(!ErrorLevel){ ;2度押しした場合
Run("C:\Program Files (x86)\sakura\sakura.exe C:\Users\" A_UserName "\Documents\bookmarkstoday.html")
ErrorLevel := !KeyWait(key)
return
}else{ ;短押しした場合
Run("C:\Program Files (x86)\sakura\sakura.exe")
ErrorLevel := !KeyWait(key)
return
}
}
^Tab::
{
if (KeyWait("c", "D T0.5") = 0) ; cキーが0.5秒以内に押されないのを待つ
{
; cキーが押された場合
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
Send "{Enter}" ; [Enter]
}
else
{
; cキーが押されなかった場合
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
}
}
^+Tab::
{
if (KeyWait("c", "D T0.5") = 0) ; cキーが0.5秒以内に押されないのを待つ
{
; cキーが押された場合
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
}
else
{
; cキーが押されなかった場合
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
}
}
;●●●[Shift]+[Tab]で全選択貼り付け
+Tab::
{
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
}
;●●●[Ctrl]+[無変換]で全選択貼り付け
^vk1D::
{
Send "^a" ; すべてを選択
Send "^v" ; クリップボードの内容を貼り付ける
}
;●●●[Alt]+[無変換vk1D]でハイライト箇所のワードでGoogle検索
!vk1D::
{
Send("^c")
Sleep(450)
ClipboardText := A_Clipboard
if (ClipboardText != "")
{
Run("https://www.google.com/search?q=" ClipboardText)
}
return
}
;●●●[無変換vk1D]+[Space]でハイライト箇所のワードでGoogle検索
vk1D & Space::
{
Send("^c")
Sleep(450)
ClipboardText := A_Clipboard
if (ClipboardText != "")
{
Run("https://www.google.com/search?q=" ClipboardText)
}
return
}
vk1D::
{
MouseClick("left", , , , , "down")
KeyWait("vk1D")
MouseClick("left", , , , , "up")
return
}
;●●●[Ctrl]+[Back Space]で[ブラウザ戻る]
^Backspace::
{
Send("{Browser_Back}")
return
}
;●●●[Shift]+[Ctrl]+[Back Space]で[ブラウザ進む]
+^Backspace::
{
Send("{Browser_Forward}")
return
}
;●●●ScrollLock 音声リーダー[音声および動画ファイルの自動文字起こし]の余計な空白などを除去し整える
;●●●http://www7a.biglobe.ne.jp/~khh/ss/ss012.html
;●●●http://ahkwiki.net/RegEx
ScrollLock::
{
A_Clipboard := ""
Send("^a")
Send("^x")
Errorlevel := !ClipWait(1)
if (ErrorLevel != 0)
{
return
}
a01 := A_Clipboard
a01 := RegExReplace(a01, "。 +", "。") ;句点の後ろの半角スペースを除去
a01 := RegExReplace(a01, "^ +(.*?)$", "$1") ;行頭の半角スペースを除去
a01 := RegExReplace(a01, "([^ -~\r\n\t])\.", "$1。") ;全角文字の後ろにあるピリオドは句点に置換
a01 := RegExReplace(a01, "([!-~])。", "$1.") ;半角文字の後ろにある句点はピリオドに置換
a01 := RegExReplace(a01, "([^ -~\r\n\t])([0123456789]+)(\r\n)。", "$1。") ;行末にある全角文字の後ろの半角数字〔参照元〕を除去して次行の句点と合体。
;a01 := RegExReplace(a01, "(\r\n)+。", "。") ;行頭にある句点は前行に合体
a01 := RegExReplace(a01, "(\r\n)+\.", "。") ;行頭にあるピリオドは前行に合体して句点に変換
a01 := RegExReplace(a01, "。", "。`r`n") ;句点の後ろで改行する
a01 := RegExReplace(a01, "([!-~]) +([^ -~\r\n\t])", "$1$2") ;([!-~])=半角
a01 := RegExReplace(a01, "([^ -~\r\n\t]) +([!-~])", "$1$2") ;([^ -~\r\n\t])=全角
a01 := RegExReplace(a01, "([^ -~\r\n\t]) +([^ -~\r\n\t])", "$1$2")
a01 := RegExReplace(a01, "〜", "~")
a01 := RegExReplace(a01, "\(", "(")
a01 := RegExReplace(a01, "\)", ")")
a01 := RegExReplace(a01, "\[", "[")
a01 := RegExReplace(a01, "\]", "]")
a01 := RegExReplace(a01, "( +|)([」)〉》〕】}]’”〟])", "$2")
a01 := RegExReplace(a01, "([」)〉》〕】}]’”〟])( +|)", "$1")
a01 := RegExReplace(a01, "( +|)([「(〈《〔【{[‘“〝])", "$2")
a01 := RegExReplace(a01, "([「(〈《〔【{[‘“〝])( +|)", "$1")
a01 := RegExReplace(a01, "((.*?))", "〔$1〕")
a01 := RegExReplace(a01, "「(.*?)」", "[$1]")
a01 := RegExReplace(a01, "( +|):", ":")
a01 := RegExReplace(a01, ":( +|)", ":")
a01 := RegExReplace(a01, "( +|):", ":")
a01 := RegExReplace(a01, ":( +|)", ":")
a01 := RegExReplace(a01, "\!", "! ")
a01 := RegExReplace(a01, "\?", "? ")
a01 := RegExReplace(a01, "!", "! ")
a01 := RegExReplace(a01, "?", "? ")
a01 := RegExReplace(a01, "! +", "! ")
a01 := RegExReplace(a01, "? +", "? ")
a01 := RegExReplace(a01, "! ", "! `r`n")
a01 := RegExReplace(a01, "? ", "? `r`n")
a01 := RegExReplace(a01, "\. +", ". `r`n")
a01 := RegExReplace(a01, "(\r\n)+", "`r`n")
a01 := RegExReplace(a01, "(\r\n) +", "$1")
a01 := RegExReplace(a01, "? (\r\n)", "、")
a01 := RegExReplace(a01, "名刺", "名詞")
a01 := RegExReplace(a01, "現停止|限定し", "限定詞")
a01 := RegExReplace(a01, "大抵", "たいてい")
a01 := RegExReplace(a01, "([ぁ-ん])伴([わいうえおっ])", "$1ともな$2")
a01 := RegExReplace(a01, "オークの", "多くの")
a01 := RegExReplace(a01, "([ぁ-ん])関([し])", "$1かん$2")
a01 := RegExReplace(a01, "([ぁ-ん])持([たちつてとっ])", "$1も$2")
a01 := RegExReplace(a01, "([ぁ-ん])呼([ばびぶべぼ])", "$1よ$2")
a01 := RegExReplace(a01, "([ぁ-ん])時([一-龠〃々〆〇])", "$1▼じ▲$2") ;【1】待避
a01 := RegExReplace(a01, "([ぁ-ん])時", "$1とき") ;【2】置換
a01 := RegExReplace(a01, "([ぁ-ん])▼じ▲([一-龠〃々〆〇])", "$1時$2") ;【3】待避回収
a01 := RegExReplace(a01, "([ぁ-ん])際([一-龠〃々〆〇])", "$1▼さい▲$2") ;【1】待避
a01 := RegExReplace(a01, "([ぁ-ん])際", "$1さい") ;【2】置換
a01 := RegExReplace(a01, "([ぁ-ん])▼さい▲([一-龠〃々〆〇])", "$1際$2") ;【3】待避回収
a01 := RegExReplace(a01, "文系", "文型") ;特殊な語句間違い
A_Clipboard := a01
Send("^v")
Send("^a")
Send("^c")
Errorlevel := !ClipWait(1)
if (ErrorLevel != 0)
{
return
}
}
;●●●PrintScreen LaTeXでコンパイルする
PrintScreen::
{
Send("{Alt down}{Ctrl down}{,}{Ctrl up}{Alt up}")
return
}
;●●●vk1C 変換キー=クリップボードを毎日がエブリデイファイルに追記する
vk1C::
{
Send("{Ctrl down}{Alt down}{t}{Alt up}{Ctrl up}")
Sleep(1800)
Send("{R}")
Sleep(200)
Send ("{Ctrl down}{PgDn}{Ctrl up}{Home}")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("●●●")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("{Ctrl down}{PgDn}{Ctrl up}{End}")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("{F2}")
}
;●●●Pauseキー=クリップボードを毎日がエブリデイファイルに追記する
Pause::
{
Send("{Ctrl down}{Alt down}{t}{Alt up}{Ctrl up}")
Sleep(1800)
Send("{R}")
Sleep(200)
Send ("{Ctrl down}{PgDn}{Ctrl up}{Home}")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("●●●")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("{Ctrl down}{PgDn}{Ctrl up}{End}")
Sleep(200)
Send ("{Enter}")
Sleep(200)
Send ("{F2}")
}
;●●●vkF2 ひらがな/カタカナキー=ドラッグしてハイライトされた文字列を引用する
vkF2::
{
Send("{Ctrl down}{.}{Ctrl up}")
Sleep(450)
Send("{Q}{Q}")
Sleep(450)
Send("{Ctrl down}{a}{c}{Ctrl up}")
Sleep(800)
Send("{Enter}")
Sleep(800)
Send("{Enter}")
return
}
;●●●AppsKeyの押し方で動作を変える。
;■<a href="https://pouhon.net/ahk-keywait/2848/" target="_blank" rel="nofollow">[AutoHotKey]1つのキーで3つの機能!長押しや2度押しに機能を割り当てる</a><br>
;■<a href="https://ameblo.jp/hinatahugu29/entry-12842214165.html" target="_blank" rel="nofollow">【AutoHotKey】今のキーボードに合わせたカスタマイズに向けて【情報収集】 | ふぐのようす</a><br>
#UseHook ;UseHookをOnにした状態で使用
AppsKey::
{
key := "AppsKey"
ErrorLevel := !KeyWait(key, "T0.3")
If(ErrorLevel){ ;長押しした場合:MIFES
Run('C:\Program Files\MIFES11\MIW.exe')
ErrorLevel := !KeyWait(key)
return
}
ErrorLevel := !KeyWait(key, "D, T0.2")
If(!ErrorLevel){ ;2度押しした場合
Send("{Ctrl down}{.}{Ctrl up}") ; Firefox ShortcutKey2U
Sleep(500) ; 待て
Send("{G}{N}") ; ShortcutKey2URLに登
ErrorLevel := !KeyWait(key)
return
}else{ ;短押しした場合
Send("{Ctrl down}{.}{Ctrl up}") ; Firefox ShortcutKey2U
Sleep(500) ; 待て
Send("{G}{G}") ; ShortcutKey2URLに登
Sleep(500) ; 待て
Send("{Ctrl down}{a}{c}{Ctrl up}{Enter}")
ErrorLevel := !KeyWait(key)
return
}
}
;●●●
^Up::
{
MouseMove(0, -10, 0, "R")
return
}
;●●●
^!Up::
{
MouseMove(0, -50, 0, "R")
return
}
;●●●
^Down::
{
MouseMove(0, 10, 0, "R")
return
}
;●●●
^!Down::
{
MouseMove(0, 50, 0, "R")
return
}
;●●●
^Left::
{
MouseMove(-10, 0, 0, "R")
return
}
;●●●
^!Left::
{
MouseMove(-50, 0, 0, "R")
return
}
;●●●
^Right::
{
MouseMove(10, 0, 0, "R")
return
}
;●●●
^!Right::
{
MouseMove(50, 0, 0, "R")
return
}
動画編集ソフトとAutoHotkey
- AutoHotkey.ahkのショートカットをスタートアップに登録しておき、Windows起動時にAutoHotkey.ahkを実行するので、ふだんは意識することなく、キーマッピング変更後の環境で、毎日PCが使える。
- ただし、本当のキーボード沼は、DaVinci Resolve Speed Editorの導入かもしれない。
- DaVinci Resolveでは、Pythonスクリプトを使えば、カット編集の自動化やバッチ処理が可能になるようである。
- DaVinci Resolveの制御をFFmpegで行なうこともできるようだ。
- なお、PerplexityにAutoHotkeyのスクリプティングを依頼すると、V2.1を指定しても、V1.0のスクリプトを返してくるので、[AHK-v2-script-converter|GitHubにある]で置換する必要がある。
- Google検索でヒットする[AutoHotkeyのスクリプト例]は、ほぼすべてがV1.0のスクリプト。
- [AHK-v2-script-converter]は必須だし、V2.1の細かい仕様をPerplexityなどに調べさせるのも必須。
- 長いマニュアルを読まなくても済むだけ、Perplexityでラクをさせてもらっている。
- Windowsの世界は、ユーザが多いだけに、いろいろと細かいところが発達している。
- 機械学習モデルを走らせる場合、CPUよりもGPUが働くようだ。
- ローカルで機械学習モデルを走らせることが、今後は増えていくことだろう。
- このとき、macOS環境よりも、Windows環境やLinux環境のほうが、グラフィックカードを取り替えて、演算能力を増強しやすい。
- その一方で、写真・動画・印刷・出版の世界では、macOS機が事実上の標準であるらしく、色彩に関係する仕事に携わるには、macOS機がないと困るようだ。
- 写真・動画の色彩を正確に調整するには、[Mac mini+EIZOのカラーマネジメントモニター]が必要かもしれない。
- 多くの人が、本当にやりたいことを自由にできるようになるためには、Windows機とmacOS機を両方とも買わなければならないのが、現状だろうと思う。
- スクリプト言語によるDaVinci Resolveのカット編集は可能か?