如何将文件扩展名与AutoIt脚本关联?

时间:2019-01-27 22:47:58

标签: autoit

对于在AutoIt中制作的文本编辑器,我在Regsitry(.text)中创建了一个新扩展名并将其与我的程序(TextEdit.exe)关联。但是,当我使用TextEdit.exe打开filename.text时,它不会显示该文件的标题或内容(不变)。

如何将文件扩展名(.text)与TextEdit.exe关联,以便在GUICtrlCreateEdit()中将文件名显示为标题和文件内容?

新扩展程序的注册表设置:

HKEY_CLASSES_ROOT\TextEditor.text\DefaultIcon\Standard (REG_SZ) : E:\Icon.ico HKEY_CLASSES_ROOT\TextEditor.text\Shell\ Standard (REG_SZ) : Open HKEY_CLASSES_ROOT\TextEditor.text\Shell\Open\Command\ Standard (REG_SZ) : "E:\TextEditor.exe" --started-from-file "%1"

AutoIt代码:

Global $TextEditGUI = GUICreate("TextEditor", 650, 550)
Global $TextEdit_Content = GUICtrlCreateEdit("", 0, 0, 650, 550)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case -3
      Exitloop
  EndSwitch
Wend

1 个答案:

答案 0 :(得分:0)

  

“…,以便当我打开file.text时,TextEditor将文件名显示为标题,并将内容显示到Edit中。

根据Documentation - Intro - Running Scripts - Command Line Parameters

  

特殊数组$CmdLine在脚本开始时使用传递给AutoIt脚本的命令行参数进行了初始化。

  1. \Shell\Open\Command"E:\TextEditor.exe" --started-from-file "%1"更改为"E:\TextEditor.exe" "%1"(或将地址文件名改为$cmdline[2])。
  2. 检索文件内容。
  3. 将内容写入GUI。

示例:

#include <GUIConstantsEx.au3>; $GUI_EVENT_CLOSE
#include <FileConstants.au3>;  $FO_READ, $FO_UTF8_NOBOM

Global Const $g_sGuiTitle = 'TextEditor - %s'
Global Const $g_iGuiDimX  = 650, _
             $g_iGuiDimY  = 550

Global       $g_hGui      = -1, _
             $g_hCtrlEdit = -1

Main()

Func Main()

    _GuiCreate($g_hGui, $g_hCtrlEdit)
    If $CmdLine[0] And FileExists($CmdLine[1]) Then _TextLoad($g_hGui, $g_hCtrlEdit, $CmdLine[1])

    While Not (GUIGetMsg() = $GUI_EVENT_CLOSE)

        Sleep(0)

    WEnd

    GUIDelete($g_hGui)

    Exit
EndFunc

Func _GuiCreate(ByRef $hGui, ByRef $hCtrlEdit)

    $hGui      = GUICreate(StringFormat($g_sGuiTitle, 'Untitled'), $g_iGuiDimX, $g_iGuiDimY)
    $hCtrlEdit = GUICtrlCreateEdit('', 0, 0, $g_iGuiDimX, $g_iGuiDimY)
    GUISetState(@SW_SHOW, $hGui)

EndFunc

Func _FileGetText(Const $sPathFile)
    Local       $hFile = FileOpen($sPathFile, BitOR($FO_READ, $FO_UTF8_NOBOM))
    Local Const $sText = FileRead($hFile)

    FileClose($hFile)

    Return $sText
EndFunc

Func _TextLoad(ByRef $hGui, ByRef $hCtrlEdit, Const $sPathFile)
    Local Const $sText = _FileGetText($sPathFile)

    WinSetTitle( _
        $hGui, _
        '', _
        StringFormat( _
            $g_sGuiTitle, _
            StringRight( _
                $sPathFile, _
                StringLen($sPathFile) - StringInStr($sPathFile, '\', 0, -1) _
            ) _
        ) _
    )
    GUICtrlSetData($hCtrlEdit, $sText)

EndFunc