ノリックのIT生産性向上、ライフハック、プロマネのお仕事備忘録

IT系の仕事の事とか役立つツールとかプロジェクトマネジメントの事とかを記載していきます。

AutoHotKey 新しいPC登録時の備忘

最新のAutoHotKey( v1.1.30.01 )にしたら動かなくなったのでその備忘

動かないスクリプト内容

スクリプト起動時に以下の箇所でエラーになった。 どうも、半角・全角と無変換キーが認識できなくなってしまった。

;半角・全角でIME ON ##################################################
vkF4sc029::IME_SET(1)
vkF3sc029::IME_SET(1)
Return

;無変換でIME OFF ##################################################
vk1Dsc07B::IME_SET(0)
Return

PC環境

旧PC Windows10 Pro 1803
新PC Windows10 Pro 1809

最初はOSのバージョン違いの影響と思ったが違った。 最新のAutoHotKeyの新しいバージョンでキー名が変わってしまったようだ。以下のように修正したら正常に動作した。

;半角・全角でIME ON ##################################################
vkF3::IME_SET(1)
vkF4::IME_SET(1)
Return

;無変換でIME OFF ##################################################
vk1D::IME_SET(0)
Return

その他に挙動が変わったものがないか確認

F1無効化

Escキーを押すつもりがF1を押してしまってヘルプが起動するのを防止 → OK
F1:: return

日付入力

エクセルのショートカットCtrl + ; で日付を入力できるのがすごく便利なので採用 → OK
;エクセル以外でもCntr+Shift + ;で日付入力

^+;::
FormatTime,TimeString,,yyyy/MM/dd
Send,%TimeString%
Return

メールに返信するときに引用マークを付ける。

会社で使っているOutlookだと設定がなかったので。また他にも汎用的に使えればなと。→OK

;コピーした内容に>を先頭に追加する。
^+>::
add = >
strbk = %clipboard%
str = %clipboard%
Loop, Parse, str, `n
{
    if str_row =
        str_row = %add%%A_LoopField%
    else
        str_row = %str_row%`n%add%%A_LoopField%
    
}
clipboard = %str_row%
Send,^v
Sleep 60
clipboard = %strbk%
str = 
strbk = 
str_row =
Return

エクスプローラでファイル名、フルパスの取得

普段はAs/Rを使っているがうっかりエクスプローラーでフォルダを開いたときにもファイル名の取得をする為。→OK

;Ctrl+Shift+F でフルパスの取得、Ctrl+Shift+S でファイル名の取得
#IfWinActive , ahk_class CabinetWClass
^+F::
clipboard := Explorer_GetSelected()
return

^+S::
clipboard := Explorer_GetPath()
return
    ;       path := Explorer_GetPath()
    ;       all := Explorer_GetAll()
    ;       sel := Explorer_GetSelected()
        ;   MsgBox % path
        ;   MsgBox % all
        ;   MsgBox % sel
        return


Explorer_GetPath(hwnd="")
{
    if !(window := Explorer_GetWindow(hwnd))
        return ErrorLevel := "ERROR"
    if (window="desktop")
        return A_Desktop
    path := window.LocationURL
    path := RegExReplace(path, "ftp://.*@","ftp://")
    StringReplace, path, path, file:///
    StringReplace, path, path, /, \, All

    ; thanks to polyethene
    Loop
        If RegExMatch(path, "i)(?<=%)[\da-f]{1,2}", hex)
            StringReplace, path, path, `%%hex%, % Chr("0x" . hex), All
        Else Break
    return path
}

Explorer_GetAll(hwnd="")
{
    return Explorer_Get(hwnd)
}

Explorer_GetSelected(hwnd="")
{
    return Explorer_Get(hwnd,true)
}

Explorer_GetWindow(hwnd="")
{
    ; thanks to jethrow for some pointers here
    WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
    WinGetClass class, ahk_id %hwnd%

    if (process!="explorer.exe")
        return
    if (class ~= "(Cabinet|Explore)WClass")
    {
        for window in ComObjCreate("Shell.Application").Windows
            ; Some window objects do not have the hwnd property and throw an
            ; exception below.
            ; try
            ; if (window.hwnd!="")
            ; foo = window.Name
            ; IfInString, foo, Windows Explorer
            ; {
                ; MsgBox abcde
            if (window.hwnd==hwnd)
                return window
            ; }
    }
    else if (class ~= "Progman|WorkerW")
        return "desktop" ; desktop found
}

Explorer_Get(hwnd="",selection=false)
{
    if !(window := Explorer_GetWindow(hwnd))
        return ErrorLevel := "ERROR"
    if (window="desktop")
    {
        ControlGet, hwWindow, HWND,, SysListView321, ahk_class Progman
        if !hwWindow ; #D mode
            ControlGet, hwWindow, HWND,, SysListView321, A
        ControlGet, files, List, % ( selection ? "Selected":"") "Col1",,ahk_id %hwWindow%
        base := SubStr(A_Desktop,0,1)=="\" ? SubStr(A_Desktop,1,-1) : A_Desktop
        Loop, Parse, files, `n, `r
        {
            path := base "\" A_LoopField
            IfExist %path% ; ignore special icons like Computer (at least for now)
                ret .= path "`n"
        }
    }
    else
    {
        if selection
            collection := window.document.SelectedItems
        else
            collection := window.document.Folder.Items
        for item in collection
            ret .= item.path "`n"
    }
    return Trim(ret,"`n")
}

以上