我需要确定一个打开的文本文件的路径和文件名,无论它是在Notepad3还是在Emacs中打开的。
对于两个编辑器,路径和文件名都显示在已打开文件的窗口标题中。因此,我可以使用AHK函数WinGetTitle
提取窗口标题,然后使用函数SubStr
从窗口标题提取路径和文件名。
但是,两个编辑器在路径和文件名在窗口标题中的显示方式不同。在Notepad3中,标题格式为[文件名] [路径],而在Emacs(我的配置)中,标题格式为[路径] [文件名]。
我希望我的代码可用,而不管打开文本文件的两个编辑器中的哪个。我想我必须使用某种if语句。
我的伪代码如下:
::uuu::
; find the window title of the opened txt file
WinGetTitle, windowTitle, A
; determine if text file is opened in Notepad3 or in Emacs
appName = <some function>
; construct file name and file path from window title
if appName = notepad3
fileName := SubStr(windowTitle,3,24)
filePath := SubStr(windowTitle,29,-12)
elseif appName = emacs
fileName := SubStr(windowTitle,-23)
filePath := SubStr(windowTitle,1,-24)
end
; send input to file
SendInput, %windowTitle% {enter}
SendInput, %fileName% {enter}
SendInput, %filePath% {enter}
return
1)可以使用什么AHK函数来确定appName
?
2)如果可以确定appName
,应如何以正确的AHK语法制作代码中的if-statement
?
答案 0 :(得分:1)
我想我想出了一种解决自己的问题的方法:
::uuu::
; find the window title of the opened txt file
WinGetTitle, windowTitle, A
; find the process or app used to open the text file
WinGet, process, ProcessName, A
; construct file name and file path from window title
if (process = "Notepad3.exe")
{
fileName := SubStr(windowTitle,3,24)
filePath := SubStr(windowTitle,29,-12)
}
else if (process = "emacs.exe")
{
fileName := SubStr(windowTitle,-23)
filePath := SubStr(windowTitle,1,-24)
}
; send input to file
SendInput, %windowTitle% {enter}
SendInput, %fileName% {enter}
SendInput, %filePath% {enter}
SendInput, %process% {enter}
return