当autohotkey将文本字符串插入文件时,我需要该文件的名称和路径。 AHK可以给我吗?

时间:2019-07-10 21:19:50

标签: autohotkey

我使用自动热键将文本字符串插入文本文件。 如何在新变量中存储该文件的路径和名称?

假设我使用以下代码插入日期/时间戳记:

cat << EOF >> ~/.bash_profile
# Add Visual Studio Code (code)
export PATH="\$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"
EOF

如何修改代码以存储要标记的文件的路径和名称?

像这样? :

::iii::  ; insert a date time stamp
send, ID%A_YYYY%.%A_MM%.%A_DD%.%A_Hour%.%A_Min%.%A_Sec%
return

2 个答案:

答案 0 :(得分:1)

尝试

::iii::  ; insert a date time stamp
    SendInput, ID%A_YYYY%.%A_MM%.%A_DD%.%A_Hour%.%A_Min%.%A_Sec%{Enter}
    SendInput, % GetFilePath_notepad() "`n"
    SendInput, % GetFileName_notepad() "`n"
return


GetFilePath_notepad(){
    If !WinActive("ahk_class Notepad")
    {
        MsgBox, Notepad isn't active
        return
    }
    ; https://autohotkey.com/docs/commands/ComObjGet.htm
    Path := ""
    WinGet pid, PID, A
    wmi := ComObjGet("winmgmts:")
    queryEnum := wmi.ExecQuery(""
    . "Select * from Win32_Process where ProcessId=" . pid)
    ._NewEnum()
    If queryEnum[process]
    {
        Pos := InStr(process.CommandLine, .exe,, 1) 
        Path := SubStr(process.CommandLine, Pos+6)
    }
    else
        MsgBox, Process not found!
    wmi := queryEnum := process := ""
    If (Path != "")
        return %Path%
    else
        MsgBox, Path not found!     
}

GetFileName_notepad(){
    If !WinActive("ahk_class Notepad")
    {
        MsgBox, Notepad isn't active
        return
    }
    WinGetTitle, WinTitle, A
    If (SubStr(WinTitle, -9) = " - Notepad")
        FileName := SubStr(WinTitle, 1, -10)
    If (SubStr(WinTitle, -8) = " - Editor")
        FileName := SubStr(WinTitle, 1, -9)
    If (SubStr(FileName, 1, 1) = "*")
        FileName := SubStr(FileName, 2)
    return %FileName%
}

编辑:

Insteaf

SendInput, % GetFilePath_notepad() "`n"
SendInput, % GetFileName_notepad() "`n"

您可以使用

FilePath := GetFilePath_notepad()
    SendInput, %FilePath%{Enter}
FileName := GetFileName_notepad()
    SendInput, %FileName%{Enter}

SendInput比Send更快,更可靠

答案 1 :(得分:0)

您可以使用WinGet命令来获取当前活动窗口的完整路径:
WinGet, path, ProcessPath, A

path 是用于存储命令结果的变量。
ProcessPath 是命令的参数,告诉它要提取哪些信息,在这种情况下为过程路径。
A 意味着您要获取当前活动窗口的信息。

要获取当前活动窗口的标题,请使用WinGetActiveTitle命令: WinGetActiveTitle, thetitle

StringTrimRight用于从窗口标题中删除“-记事本” 部分。


您可以使用以下代码测试您的代码:

::iii::  ; insert a date time stamp
send, ID%A_YYYY%.%A_MM%.%A_DD%.%A_Hour%.%A_Min%.%A_Sec%
WinGet, path, ProcessPath, A
WinGetActiveTitle, thetitle
StringTrimRight, thetitle, thetitle ,10
Msgbox, path=%path% `ntitle=%thetitle%
return