Когда autohotkey вставляет текстовую строку в файл, мне нужно имя и путь к этому файлу. Может ли AHK дать мне это? - PullRequest
1 голос
/ 11 июля 2019

Я использую autohotkey для вставки текстовой строки в текстовый файл. Как я могу сохранить путь и имя этого файла в новой переменной?

Допустим, я использую этот код для вставки отметки даты / времени:

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

Как я могу изменить свой код, чтобы сохранить путь и имя файла, который я помечаю?

Как то так? :

::iii::  ; insert a date time stamp
send, ID%A_YYYY%.%A_MM%.%A_DD%.%A_Hour%.%A_Min%.%A_Sec%
path = <code for extracting path>
filename = <code for extracting filename>
return

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Попробуйте

::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%
}

EDIT:

Insteaf из

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

вы можете использовать

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

SendInput быстрее и надежнее, чем Send

0 голосов
/ 11 июля 2019

Вы можете использовать команду 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
...