自动热键:如何确定是否在emac或notepad3中打开了文本文件

时间:2019-07-14 13:03:29

标签: autohotkey

我需要确定一个打开的文本文件的路径和文件名,无论它是在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

1 个答案:

答案 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