Jump to content

Recommended Posts

Hi.

I'm using the FreeCommander XE file manager here, and i'v written a script, which will create an empty, new file, after choosing an extension out from the Listbox.

 

The listview code  is not mine, iv found the scripts somewhere on this forum. I have no credits in it, because it was intended to be only for my personal use.

But now, i have a lot of free time, so i remembered that i haven't posted anything on this forum, yet, so here is my first script:

It should be compiled with the Autoit v3.3.14.3 .

The compiled exe needs a folder passed as a parameter, so that it know where to create the new file.

A Listbox is opened, with a selection of available extensions.

After selecting and doubleclicking (or using the ok button), the script creates a filename (if specified in the config file) with increased numbers (up to 9999).

If the filename exist, the counter is checking the next number, until the maximum is reached.

This script uses an ini file for configuration, called "NewFile.ini" which should be in the same folder, as the compiled exe.

NewFile.au3

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <WinAPIFiles.au3>
#include <Array.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
#include <ScrollBarsConstants.au3>
    Global $test[0][2], $hFile, $cmd = "", $cmdtmp, $tmptxt, $tmpinidir, $filesetting, $MouseX, $MouseY, $UseMouseX, $UseMouseY, $Edit1
Global $aArray[1] = []
$cmdtmp = StringReplace($cmdlineraw, Chr(34), "")
    If StringLen($cmdtmp) = 2 Then
    If StringRight($cmdtmp, 1) = ":" Then
        $cmd = $cmdtmp & "\"
    EndIf
Else
    If StringRight($cmdtmp, 1) <> "\" Or StringRight($cmdtmp, 1) <> "/" Then
        $cmd = $cmdtmp & "\"
    EndIf
EndIf
    If Not FileExists($cmd) Then                    ;Check if the folder exists, display an error message if not !
    DisplayReadMe(1)
    Exit
EndIf
    If StringLen(@ScriptDir) > 3 And StringRight(@ScriptDir, 1) <> "\" Then
    $tmpinidir = @ScriptDir & "\"
Else
    $tmpinidir = @ScriptDir
EndIf
    Local Const $sFilePath = $tmpinidir & "NewFile.ini"
$filesetting = IniRead($sFilePath, "setting", "filename", "MyNewFile")
$filesetting = StringReplace($filesetting, ">", " ")
;msgbox (0,"",$filesetting)  ;Debugging

$UseMouseX = IniRead($sFilePath, "setting", "UseMouseX", "1")
$UseMouseY = IniRead($sFilePath, "setting", "UseMouseY", "0")

If FileExists($sFilePath) Then
    $aArray = IniReadSectionNames($sFilePath) ; Read the INI section names. This will return a 1 dimensional array.
EndIf

; Check if an error occurred.
If @error=0 Then
    ; Enumerate through the array displaying the section names.
    Local $count = 0
    If FileExists($sFilePath) Then
        For $i = 1 To $aArray[0]
            $tmp1 = IniRead($sFilePath, $aArray[$i], "1", "none")
            If $tmp1 <> "none" And StringLeft($tmp1, 1) = "." Then            ;Extension need to have a dot, or it will be ignored !
                $tmptxt = $tmptxt & $tmp1 & "|" & $aArray[$i] & @CRLF
                $count = $count + 1                                            ;Count how many extensions are added !
            EndIf
        Next
    EndIf
        If $count = 0 Then $tmptxt = ".au3|AutoIt 3" & @CRLF & ".txt|Text File" & @CRLF
    ;MsgBox($MB_SYSTEMMODAL,"",$tmptxt)
    _ArrayAdd($test, $tmptxt, 0, "|", @CRLF)
Else                                                            ;Reading the ini failed, create a default array for the extensions
    $tmptxt = ".au3|AutoIt 3" & @CRLF & ".txt|Text" & @CRLF
    _ArrayAdd($test, $tmptxt, 0, "|", @CRLF)
EndIf
    
;Local $test[5][2] = [['.au3', 'AutoIt'], ['.ahk', 'Auto Hotkey'], ['.txt', 'text'], ['.sdlbas', 'Sdl Basic'], ['.html', 'Webpage']]
    If $UseMouseX = 1 Then
    $MouseX = MouseGetPos(0)
Else
    $MouseX = -1
EndIf
    If $UseMouseY = 1 Then
    $MouseY = MouseGetPos(1)
Else
    $MouseY = -1
EndIf
    $Form1 = GUICreate("Create New File", 210, 247, $MouseX, $MouseY, $WS_CAPTION, $WS_EX_TOOLWINDOW)
$List = GUICtrlCreateListView("", 5, 5, 200, 200)
_GUICtrlListView_InsertColumn($List, 0, "Extension", 65)
_GUICtrlListView_InsertColumn($List, 1, "Description", 115)
_GUICtrlListView_AddArray($List, $test)
    GUICtrlCreateLabel("Example:" & $filesetting & "0000.ext", 5, 205)
$Button1 = GUICtrlCreateButton("Ok", 16, 224, 45, 22)
$Button3 = GUICtrlCreateButton("ReadMe", 80, 224, 55, 22)
$Button2 = GUICtrlCreateButton("Cancel", 150, 224, 45, 22)
$cDummy = GUICtrlCreateDummy()
GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    While 1
    $nMsg = GUIGetMsg()
        Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit
        Case $Button3
            DisplayReadMe(0)
        Case $Button1, $cDummy
            Local $tmptxt = StringSplit(_GUICtrlListView_GetItemTextString($List), "|")[1]
            If StringLen($tmptxt) > 0 Then
                Local $fnr = 0, $tmpfile = ""
                While $fnr < 10000
                    $tmpfile = $cmd & $filesetting & _StringRepeat("0", 4 - StringLen($fnr)) & $fnr & $tmptxt
                    ;MsgBox(0,"",$tmpfile) ; for debugging
                    If Not (FileExists($tmpfile)) Then
                        $hFile = _WinAPI_CreateFile($tmpfile, 0)
                        _WinAPI_CloseHandle($hFile)
                        Exit
                    EndIf
                    $fnr = $fnr + 1
                WEnd
            EndIf
    EndSwitch
WEnd
    ;================================================================================
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $List
    If Not IsHWnd($List) Then $hWndListView = GUICtrlGetHandle($List)
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                    Case $NM_DBLCLK
                    ; Fire the dummy if the ListView is double clicked
                    GUICtrlSendToDummy($cDummy)
                EndSwitch
    EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
    Func DisplayReadMe($err)
    Local $Form1 = GUICreate("Read Me", 550, 400, 10, 10, BitOR($WS_CAPTION, $WS_THICKFRAME ,$WS_MAXIMIZEBOX))
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 549, 399)
    GUICtrlSetData(-1, "")
    GUISetState(@SW_SHOW)
    If $err=1 then
        local $txttmp01="Error: Path does not exist"
        local $txttmp02="Commandline call was: "
        AddText ($txttmp01)
        Addtext ($txttmp02 & $cmd & @CRLF & @CRLF)
    EndIf
    AddText("Instructions:" & @CRLF)
    AddText("Displays a selection of available extensions and then creates a new file at the Path's location." & @CRLF & @CRLF & "Usage: NewFile Path")
    AddText("Example: NewFile c:\myfolder\" & @CRLF)
    AddText("Result: A file with a name 'MyFile0000.ext' will be created at the Path's location.")
    AddText("If the filename exists, the number counter will increase, until it finds a free number, up to 9999." & @CRLF)
    AddText("Uses a configuration file in the .exe folder named NewFile.ini !" & @CRLF)
    AddText("Example of a config file:" & @CRLF)
    AddText("[setting]" & @CRLF & "filename=MyFile>")
    AddText("UseMouseX=0                ;0 or 1 - position the dialog at the mouse x coordinate - usefull for multi monitor settings !")
    AddText("UseMouseY=0                ;0 or 1 - Set this and UseMouseX to spawn the dialog at the mouse coordinates !" & @CRLF)
    AddText(";Use > in filename as a space char ! (only needed if you want the space char at the beginning or at the end : in between filename and the number)" & @CRLF)
    AddText(";Format for this ini file is:" & @CRLF & ";Name              e.g [Auto It]")
    AddText(";extension       e.g 1=.au3" & @CRLF & "; p.s. only 1 extension per section ! the number must be 1" & @CRLF)
    AddText("[AutoIt3]" & @CRLF & "1=.au3" & @CRLF & @CRLF & "[Text]" & @CRLF & "1=.txt")
        _GUICtrlEdit_SetSel($Edit1, 0, 0)
    _GUICtrlEdit_Scroll($Edit1, $SB_SCROLLCARET)
    If $err=1 Then
        _GUICtrlEdit_SetSel($Edit1, 0, StringLen($txttmp01 & $txttmp02 & $cmd)+5)
    EndIf
        While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                GUIDelete($Form1)
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>DisplayReadMe
Func AddText($edittxt)
    _GUICtrlEdit_AppendText($Edit1, $edittxt & @CRLF)
EndFunc   ;==>AddText

 

 NewFile.ini

[setting]
filename=MyNewFile_
UseMouseX=0                ;0 or 1 - position the dialog at the mouse x coordinate - usefull for multi monitor settings !
UseMouseY=0                ;0 or 1 - Set this and UseMouseX to spawn the dialog at the mouse coordinates !
    ;Use > in filename as a space char ! (only needed if you want the space char at the beginning or at the end : in between filename and the number)
    ;Format for this ini file is:
;Name              e.g [Auto It]
;extension       e.g 1=.au3
; p.s. only 1 extension per section ! the number must be 1
    [AutoIt3]
1=.au3
    [Auto Hotkey]
1=.ahk
    [Text]
1=.txt
    [Sdl Basic]
1=.sdlbas
    [Webpage]
1=.html
    [Basic]
1=.bas
    [Pascal]
1=.pas
    [Rich Text (RTF)]
1=.rtf
    [Word Document]
1=.doc
    [Hex File]
1=.hex
Edited by Dan_555
Possible bug fixing ...

Some of my script sourcecode

Link to post
Share on other sites

Hi, here is an updated version of the script. Now it can, optionally, make the new file and to copy the clipboard content into it.

To copy Clipboard text, select an extension, then click on "Save Clip Text" button, instead of ok. 

Save Clip Text is only available if the clipboard is holding text formated data,  and if the extension is selected.

Ok button is only clickable, if an extension is selected. (hint. you can double click on the extension, to create an empty file). 

#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <WinAPIFiles.au3>
#include <Array.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
#include <GuiButton.au3>
#include <ScrollBarsConstants.au3>
#include <Clipboard.au3>
#include <FileConstants.au3>

Global $test[0][2], $hFile, $cmd = "", $cmdtmp, $tmptxt, $tmpinidir, $filesetting, $MouseX, $MouseY, $UseMouseX, $UseMouseY, $Edit1, $fInput
Global $aArray[1] = [], $sData = "", $lastused = 0

$cmdtmp = StringReplace($cmdlineraw, Chr(34), "")

If StringLen($cmdtmp) = 2 Then
    If StringRight($cmdtmp, 1) = ":" Then
        $cmd = $cmdtmp & "\"
    EndIf
Else
    If StringRight($cmdtmp, 1) <> "\" Or StringRight($cmdtmp, 1) <> "/" Then
        $cmd = $cmdtmp & "\"
    EndIf
EndIf


If StringLen(@ScriptDir) > 3 And StringRight(@ScriptDir, 1) <> "\" Then
    $tmpinidir = @ScriptDir & "\"
Else
    $tmpinidir = @ScriptDir
EndIf

If StringLen($cmd) > 0 Then
    If Not FileExists($cmd) Then                ;Check if the folder exists, display an error message if not !
        DisplayReadMe(1)
        Exit
    EndIf
Else
    $cmd = $tmpinidir
EndIf

Local Const $sFilePath = $tmpinidir & "NewFile.ini"
$filesetting = IniRead($sFilePath, "setting", "filename", "MyNewFile")
$filesetting = StringReplace($filesetting, ">", " ")
;msgbox (0,"",$filesetting)  ;Debugging


$UseMouseX = IniRead($sFilePath, "setting", "UseMouseX", "1")
$UseMouseY = IniRead($sFilePath, "setting", "UseMouseY", "0")

If FileExists($sFilePath) Then
    $aArray = IniReadSectionNames($sFilePath) ; Read the INI section names. This will return a 1 dimensional array.
EndIf
; Check if an error occurred.
If @error=0 Then
    ; Enumerate through the array displaying the section names.
    Local $count = 0
    If FileExists($sFilePath) Then
        For $i = 1 To $aArray[0]
            $tmp1 = IniRead($sFilePath, $aArray[$i], "1", "none")
            If $tmp1 <> "none" And StringLeft($tmp1, 1) = "." Then            ;Extension need to have a dot, or it will be ignored !
                $tmptxt = $tmptxt & $tmp1 & "|" & $aArray[$i] & @CRLF
                $count = $count + 1                                            ;Count how many extensions are added !
            EndIf
        Next
    EndIf

    If $count = 0 Then $tmptxt = ".au3|AutoIt 3" & @CRLF & ".txt|Text File" & @CRLF
    ;MsgBox($MB_SYSTEMMODAL,"",$tmptxt)
    _ArrayAdd($test, $tmptxt, 0, "|", @CRLF)
Else                                                            ;Reading the ini failed, create a default array for the extensions
    $tmptxt = ".au3|AutoIt 3" & @CRLF & ".txt|Text" & @CRLF
    _ArrayAdd($test, $tmptxt, 0, "|", @CRLF)
EndIf


;Local $test[5][2] = [['.au3', 'AutoIt'], ['.ahk', 'Auto Hotkey'], ['.txt', 'text'], ['.sdlbas', 'Sdl Basic'], ['.html', 'Webpage']]

If $UseMouseX = 1 Then
    $MouseX = MouseGetPos(0)
Else
    $MouseX = -1
EndIf

If $UseMouseY = 1 Then
    $MouseY = MouseGetPos(1)
Else
    $MouseY = -1
EndIf

$Form1 = GUICreate("Create New File", 210, 247, $MouseX, $MouseY, $WS_CAPTION, $WS_EX_APPWINDOW)
$List = GUICtrlCreateListView("", 5, 5, 200, 199)


;GUICtrlCreateLabel("Example:" & $filesetting & "0000.ext", 5, 205)
$fInput = GUICtrlCreateInput($filesetting, 5, 206, 201, 18)
$Button1 = GUICtrlCreateButton("Ok", 3, 224, 30, 22)
$Button4 = GUICtrlCreateButton("Save Clip Text", 33, 224, 75, 22)
$Button3 = GUICtrlCreateButton("ReadMe", 108, 224, 55, 22)
$Button2 = GUICtrlCreateButton("Cancel", 163, 224, 45, 22)
$cDummy = GUICtrlCreateDummy()
GUISetState(@SW_SHOW)

_GUICtrlListView_BeginUpdate($List)
_GUICtrlListView_InsertColumn($List, 0, "Extension", 65)
_GUICtrlListView_InsertColumn($List, 1, "Description", 115)
_GUICtrlListView_AddArray($List, $test)
$lastused = IniRead($sFilePath, "setting", "lastused", "0")

If $lastused > _GUICtrlListView_GetItemCount($List) Then $lastused = 0

_GUICtrlListView_SetItemSelected($List, Int($lastused),True,True)
_GUICtrlListView_EndUpdate($List)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")


Local $aFormats[3] = [2, $CF_TEXT, $CF_OEMTEXT]
While 1
    $nMsg = GUIGetMsg()
    Local $tmptxt = StringSplit(_GUICtrlListView_GetItemTextString($List), "|")[1]
    If @error = 1 Then $tmptxt = ""

    If StringLen($tmptxt) > 0 Then
        _GUICtrlButton_Enable($Button1, 1)
        If _ClipBoard_GetPriorityFormat($aFormats) > 0 Then
            _GUICtrlButton_Enable($Button4, 1)
        Else
            _GUICtrlButton_Enable($Button4, 0)
        EndIf
    Else
        _GUICtrlButton_Enable($Button4, 0)
        _GUICtrlButton_Enable($Button1, 0)
    EndIf

    For $x = 0 To _GUICtrlListView_GetItemCount($List)
        If _GUICtrlListView_GetItemSelected($List, $x) = True Then
            $lastused = $x
            ExitLoop 1
        EndIf
    Next

    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit
        Case $Button3
            DisplayReadMe(0)
        Case $Button1, $cDummy
            If StringLen($tmptxt) > 0 Then
                $tmpfile = GetFreeFileName()
                If $tmpfile <> "" Then
                    $hFile = _WinAPI_CreateFile($tmpfile, 0)
                    _WinAPI_CloseHandle($hFile)
                    IniWrite($sFilePath, "setting", "lastused", $lastused)
                    Exit                                ;End the program
                EndIf
            EndIf
        Case $Button4
            If StringLen($tmptxt) > 0 Then
                $tmpfile = GetFreeFileName()
                ConsoleWrite($tmpfile)
                If $tmpfile <> "" Then
                    $hFile = FileOpen($tmpfile, 17)
                    Local $sData = ClipGet()
                    For $x = 1 To StringLen($sData)
                        Local $tmpwtxt = StringMid($sData, $x, 1)
                        FileWrite($hFile, StringToBinary($tmpwtxt))
                        FileSetPos($hFile, $x, 0)
                    Next
                    FileClose($hFile)
                    IniWrite($sFilePath, "setting", "lastused", $lastused)
                    Exit                                ;End the program
                EndIf
            EndIf

    EndSwitch
WEnd

Func GetFreeFileName()
    Local $fnr = 0, $tmpfile = "", $tmpfile1 = ""
    Local $tmpread = GUICtrlRead($fInput), $fc = 0
    If $tmpread <> $filesetting And StringLen($tmpread) > 0 Then
        $filesetting = $tmpread
        Local $invalidfnamechars=':*/\?"<>'
        for $x=1 to StringLen($invalidfnamechars)
            $filesetting = StringReplace($filesetting, StringMid($invalidfnamechars,$x,1), "")
        Next
        $fc = 1
    EndIf

    If $fc = 1 Then
        $tmpfile1 = $cmd & $filesetting & $tmptxt
        If FileExists($cmd & $filesetting & $tmptxt) Then $fc = 0
    EndIf

    If $fc = 0 Then
        While $fnr < 10000
            $tmpfile = $cmd & $filesetting & _StringRepeat("0", 4 - StringLen($fnr)) & $fnr & $tmptxt
            ;MsgBox(0,"",$tmpfile) ; for debugging
            If Not (FileExists($tmpfile)) Then
                $tmpfile1 = $tmpfile
                ExitLoop
            EndIf
            $fnr = $fnr + 1
        WEnd
    EndIf
    Return $tmpfile1
EndFunc   ;==>GetFreeFileName

;================================================================================
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $List
    If Not IsHWnd($List) Then $hWndListView = GUICtrlGetHandle($List)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode

                Case $NM_DBLCLK
                    ; Fire the dummy if the ListView is double clicked
                    GUICtrlSendToDummy($cDummy)

            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func DisplayReadMe($err)
    Local $Form1 = GUICreate("Read Me", 550, 400, 10, 10, BitOR($WS_CAPTION, $WS_THICKFRAME, $WS_MAXIMIZEBOX))
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 549, 399)
    GUICtrlSetData(-1, "")
    GUISetState(@SW_SHOW)
    If $err = 1 Then
        Local $txttmp01 = "Error: Path does not exist"
        Local $txttmp02 = "Commandline call was: "
        AddText($txttmp01)
        AddText($txttmp02 & $cmd & @CRLF & @CRLF)
    EndIf
    AddText("Instructions:" & @CRLF)
    AddText("Displays a selection of available extensions and then creates a new file at the Path's location." & @CRLF & @CRLF & "Usage: NewFile Path")
    AddText("Example: NewFile c:\myfolder\" & @CRLF)
    AddText("Result: A file with a name 'MyFile0000.ext' will be created at the Path's location.")
    AddText("If the filename exists, the number counter will increase, until it finds a free number, up to 9999." & @CRLF)
    AddText("You can change the filename in the input field. If the filename does not exists, it will be saved." & @CRLF)
    AddText("If the filename from the input field exists, the numbers (0000-9999) will be added." & @CRLF)
    AddText("Use Save Clip button to copy the Clipboard text content into the file !" & @CRLF)
    AddText("OK + save clip buttons are clickable, only when an extension is selected. Save Clip needs (additionally) to have text data in the clipboard." & @CRLF)
    AddText("Uses a configuration file in the .exe folder named NewFile.ini !" & @CRLF)
    AddText("Example of a config file:" & @CRLF)
    AddText("[setting]" & @CRLF & "filename=MyFile>")
    AddText("UseMouseX=0                ;0 or 1 - position the dialog at the mouse x coordinate - usefull for multi monitor settings !")
    AddText("UseMouseY=0                ;0 or 1 - Set this and UseMouseX to spawn the dialog at the mouse coordinates !" & @CRLF)
    AddText(";Use > in filename as a space char ! (only needed if you want the space char at the beginning or at the end : in between filename and the number)" & @CRLF)
    AddText(";Format for this ini file is:" & @CRLF & ";Name             e.g [Auto It]")
    AddText(";extension       e.g 1=.au3" & @CRLF & "; p.s. only 1 extension per section ! the number must be 1" & @CRLF)
    AddText("[AutoIt3]" & @CRLF & "1=.au3" & @CRLF & @CRLF & "[Text]" & @CRLF & "1=.txt")

    _GUICtrlEdit_SetSel($Edit1, 0, 0)
    _GUICtrlEdit_Scroll($Edit1, $SB_SCROLLCARET)
    If $err = 1 Then
        _GUICtrlEdit_SetSel($Edit1, 0, StringLen($txttmp01 & $txttmp02 & $cmd) + 5)
    EndIf

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                GUIDelete($Form1)
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>DisplayReadMe

Func AddText($edittxt)
    _GUICtrlEdit_AppendText($Edit1, $edittxt & @CRLF)
EndFunc   ;==>AddText

Edit: 9.4.2020 - Fixed the bug (the 3 null bytes at the end of the file do not appear now.)  

Edit:26.02.2023 - Replaced the Label with input box, now you can enter a custom filename and Newfile will save it under that name if it does not exist, or add numbers if the file exists.

 

Edited by Dan_555
bugfix

Some of my script sourcecode

Link to post
Share on other sites
  • 2 years later...

You can optimize ini files to easily add and modify ini files without rewriting code:

[Ext_Conf]
count= 10

[Ext_1]
Ext= au3
Title= AutoIt Script

[Ext_2]
Ext= ahk
Title= Auto Hotkey

[Ext_3]
Ext= txt
Title= Text

[Ext_4]
Ext= sdlbas
Title= Sdl Basic

[Ext_5]
Ext= html
Title= Webpage

[Ext_6]
Ext= bas
Title= Basic

[Ext_7]
Ext= pas
Title= Pascal

[Ext_8]
Ext= rtf
Title= Rich Text (RTF)

[Ext_9]
Ext= doc
Title= Word Document

[Ext_10]
Ext= hex
Title= Hex File

 

Regards,
 

Link to post
Share on other sites
Posted (edited)

Uhm,
currently the script can read unlimited extensions (within  the ini file limitations ... ). 
you just have to add some to the ini file, there is no need to change anything in the script.

Edit: While looking at the sourcecode i have noticed that i have inserted some code which could bypass the error checking.
this is now fixed (see post #1 + 2).

Edited by Dan_555

Some of my script sourcecode

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By RAMzor
      Hello, 
      I'm trying to implement Virtual ListView in my project. I have been based on example from @LarsJ.
      The script loads data from csv file instead of array as in original example and perform some parsing.
      Sometimes, when running a script, it adds garbage to the end of the correct data.
      The data is loaded correctly into the global array (double-clicking on a row with garbage displays it correct in the console), but is not displayed correctly.
      What am I missing or doing wrong?
      #include <GUIConstants.au3> #include <WindowsConstants.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <GuiStatusBar.au3> #include <FileConstants.au3> #include <GuiListBox.au3> #include <SendMessage.au3> #include <EditConstants.au3> Opt("MustDeclareVars", 1) Global $hWnd, $idLV, $hLV, $aItems[1][1] Global $gWinXMin = 1130, $gWinYMin = 615 Global Const $TopMost = 262144 ; Set MsgBox top-most attribute Example() Func Example() Local $Ver = "Virtual LV" ; Create GUI $hWnd = GUICreate("iTS - Test Sequencer [Ver " & $Ver & "]", $gWinXMin, $gWinYMin, -1, -1, BitOR($WS_SIZEBOX, $WS_SYSMENU, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX)) ; Create ListView Reduces flicker Checkboxes Tooltip Icons Local $iLvStyle = BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_CHECKBOXES, $LVS_EX_INFOTIP);, $LVS_EX_SUBITEMIMAGES) $idLV = GUICtrlCreateListView("", 8, 50, 915, 477, $LVS_OWNERDATA, $iLvStyle) $hLV = GUICtrlGetHandle($idLV) ; Virtual listview ; --- ListView Add columns --- _GUICtrlListView_AddColumn($hLV, "# ID", 45) ; 0 _GUICtrlListView_AddColumn($hLV, "Group", 120) ; 1 _GUICtrlListView_AddColumn($hLV, "Name", 335) ; 2 _GUICtrlListView_AddColumn($hLV, "Min", 50) ; 3 _GUICtrlListView_AddColumn($hLV, "Max", 50) ; 4 _GUICtrlListView_AddColumn($hLV, "Result", 50) ; 5 _GUICtrlListView_AddColumn($hLV, "Status", 50) ; 6 _GUICtrlListView_AddColumn($hLV, "Description", 179) ; 7 ; Checkboxes _GUICtrlListView_SetCallBackMask($hLV, 32) ; 32 - The application stores the image list index of the current state image ; Load icon images ;~ Local $hImage = _GUIImageList_Create() ;~ _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hLV, 0xFF0000, 16, 16)) ; Index = 0 ;~ _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hLV, 0x00FF00, 16, 16)) ; Index = 1 ;~ _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hLV, 0x0000FF, 16, 16)) ; Index = 2 ;~ _GUICtrlListView_SetImageList($hLV, $hImage, 1) ; --- StatusBar --- Local $aStatusBarParts[5] = [220, 160, 160, 140, -1] Global $StatusBar = _GUICtrlStatusBar_Create($hWnd, $aStatusBarParts) ; $SBARS_SIZEGRIP ; --- DEBUG --- Local $Debug_1 = GUICtrlCreateButton("Check Random", 928, 383, 91, 25) ; 152 Local $Debug_2 = GUICtrlCreateButton("Load From Array", 1024, 383, 91, 25) ; 152 Local $Debug_3 = GUICtrlCreateButton("Load 15 Rows", 928, 412, 91, 25) Local $Debug_4 = GUICtrlCreateButton("Load 500 Rows", 1024, 412, 91, 25) Local $DebugLabel_1 = GUICtrlCreateLabel("DEBAG", 928, 444, 36, 17) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_GETMINMAXINFO, "MY_WM_GETMINMAXINFO") ; Restrict minimaze window below specified size [$gWinXMin, $gWinYMin] GUISetState(@SW_SHOW) ; ============================================================================================= ; --- Load Test --- Local $sTestCsvFile = @ScriptDir & "\Test CSV 15.csv" _ListView_Load($sTestCsvFile, $aItems, True) ; Load Autosized ; ============================================================================================= ; Message loop While 1 Switch GUIGetMsg() Case $Debug_1 ConsoleWrite(UBound($aItems, 1) & @CRLF) ConsoleWrite(UBound($aItems, 2) & @CRLF) For $i = 0 To UBound($aItems, 1) - 1 $aItems[$i][10] = 8192 ; Checked Next ConsoleWrite("- $i " & $i & @CRLF) GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $i, 0 ) ;~ $aItems[$i][10] = 4096 ; Unchecked ;~ $aItems[$k+$j][10] = 8192 ; Checked Case $Debug_2 Local $iRows = 250 Dim $aItems[$iRows+1][12] For $iRow = 0 To $iRows - 1 $aItems[$iRow][0] = $iRow + 1 $aItems[$iRow][1] = "AAA-" & Random(1000000, 9999999, 1) $aItems[$iRow][2] = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" $aItems[$iRow][3] = "CCC-" & Random(1000000, 9999999, 1) $aItems[$iRow][4] = "DDD-" & Random(1000000, 9999999, 1) $aItems[$iRow][10] = 4096 ; Unchecked Next GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iRow, 0 ) _GUICtrlStatusBar_SetText($StatusBar, $iRow & " Rows Loaded", 1) Case $Debug_3 GUICtrlSetData($Debug_3, "Load 15") $sTestCsvFile = @ScriptDir & "\Test CSV 15.csv" _ListView_Load($sTestCsvFile, $aItems, True) ; Load Autosized Case $Debug_4 GUICtrlSetData($Debug_4, "Load 500") $sTestCsvFile = @ScriptDir & "\Test CSV 500.csv" _ListView_Load($sTestCsvFile, $aItems, True) ; Load Autosized Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc ;==>Example ; ; ; Return Test Count Func _ListView_Load($sTestCsvFile, ByRef $aItems, $AutoSize = True) Local $iRow = 0, $iNumLen, $aData, $aName, $GroupName, $TestName, $TestIdx, $MinVal, $MaxVal, $iStatus;, $aName Local $sTestIniFile = StringRegExpReplace($sTestCsvFile, '\.[^.]*$', '.tcf') ; INI File ;~ _SendMessage($hLV, $LVM_DELETEALLITEMS) ; Delete All Local $aCsv = FileReadToArray($sTestCsvFile) ; 9.289ms If @error Then Return MsgBox($TopMost+16, "_ListView_Load()", "! CSV File Reading ERROR") Local $LinesCount = @extended Dim $aItems[$LinesCount][12] $iNumLen = StringLen($LinesCount) For $i = 1 To $LinesCount-1 ; If StringLeft($aCsv[$i], 5) = "TEST_" Then $aData = StringSplit($aCsv[$i], ",") If $aData[0] >= 5 Then $iRow += 1 $aData[1] = StringReplace($aData[1], "TEST_", "", 1) $aData[1] = StringReplace(StringReplace($aData[1], "__", "|", 1), "_", " ", 1) $aName = StringSplit($aData[1], "|", 3) If @error Then $GroupName = "" $TestName = $aName[0] Else $GroupName = $aName[0] $TestName = StringReplace($aName[1], "_", " ") ; (all '_' replaced with ' ') EndIf $TestIdx = StringStripWS($aData[2], 7) $MinVal = StringStripWS($aData[3], 7) $MaxVal = StringStripWS( $aData[4], 7) $aItems[$iRow - 1][0] = StringFormat("%0" & $iNumLen & "i ", $iRow) $aItems[$iRow - 1][1] = $GroupName $aItems[$iRow - 1][2] = $TestName $aItems[$iRow - 1][3] = $MinVal $aItems[$iRow - 1][4] = $MaxVal $aItems[$iRow - 1][10] = 4096 ; 4096-Unchecked, 8192-Checked EndIf Else ContinueLoop EndIf Next _GUICtrlListView_BeginUpdate($hLV) GUICtrlSendMsg($idLV, $LVM_SETITEMCOUNT, $iRow, 0) ; Update data [$aItems] to ListView _GUICtrlListView_SetColumnWidth($hLV, 0, -1) If $AutoSize Then For $i = 1 To 2 _GUICtrlListView_SetColumnWidth($hLV, $i, $LVSCW_AUTOSIZE) Next EndIf _GUICtrlListView_EndUpdate($hLV) _GUICtrlStatusBar_SetText($StatusBar, $iRow & " Rows Loaded", 1) Return $iRow EndFunc ;==>_ListView_Load Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) Local Static $tText = DllStructCreate("wchar[50]") Local Static $pText = DllStructGetPtr($tText) Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hLV Switch $iCode Case $LVN_GETDISPINFOW Local $tNMLVDISPINFO = DllStructCreate($tagNMLVDISPINFO, $lParam) Local $iItem = DllStructGetData($tNMLVDISPINFO, "Item") Local $iSubItem = DllStructGetData($tNMLVDISPINFO, "SubItem") Local $iMask = DllStructGetData($tNMLVDISPINFO, "Mask") ; Text If BitAND($iMask, $LVIF_TEXT) Then Local $sText = $aItems[$iItem][$iSubItem] DllStructSetData($tText, 1, $sText) DllStructSetData($tNMLVDISPINFO, "Text", $pText) DllStructSetData($tNMLVDISPINFO, "TextMax", StringLen($sText)) EndIf ; Checkbox in first column If BitAND($iMask, $LVIF_STATE) And $iSubItem = 0 Then DllStructSetData($tNMLVDISPINFO, "State", $aItems[$iItem][10]) EndIf ; Icon in first column ; Use proper $iSubItem value for other columns If BitAND($iMask, $LVIF_IMAGE) And $iSubItem = 6 Then ; Status Column Icon DllStructSetData($tNMLVDISPINFO, "Image", $aItems[$iItem][11]) EndIf Case $NM_CUSTOMDRAW Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam) Local $dwDrawStage = DllStructGetData($tNMLVCUSTOMDRAW, "dwDrawStage") Local $dwItemSpec = DllStructGetData($tNMLVCUSTOMDRAW, "dwItemSpec") Switch $dwDrawStage ; Holds a value that specifies the drawing stage Case $CDDS_PREPAINT ; Before the paint cycle begins Return $CDRF_NOTIFYITEMDRAW ; Notify the parent window of any item-related drawing operations Case $CDDS_ITEMPREPAINT ; Before painting an item If Mod($dwItemSpec, 2) = 1 Then DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF) Else DllStructSetData($tNMLVCUSTOMDRAW, "ClrTextBk", 0xEBF7FF) ; BGR EndIf Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors EndSwitch Case $NM_CLICK Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) Local $iItem = DllStructGetData($tInfo, "Index") Local $iSubItem = DllStructGetData($tInfo, "SubItem") If $iSubItem = 0 Then If $aItems[$iItem][10] = 4096 Then $aItems[$iItem][10] = 8192 ; Checked Else $aItems[$iItem][10] = 4096 ; Unchecked EndIf _GUICtrlListView_RedrawItems($hLV, $iItem, $iItem) EndIf Case $NM_DBLCLK ; User double-clicks an item with the left mouse button (No return value) Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) Local $iItem = DllStructGetData($tInfo, "Index") Local $iSubItem = DllStructGetData($tInfo, "SubItem") ConsoleWrite("--> DBLCLK Row : " & $iItem + 1 & @CRLF) ConsoleWrite("--> Name : " & $aItems[$iItem][$iSubItem] & @CRLF) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam ;~ ConsoleWrite("ListView Width " & ControlGetPos($hWnd, "", $idLV)[2] & @CRLF) _GUICtrlStatusBar_Resize($StatusBar) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func MY_WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam) Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int",$lParam) DllStructSetData($minmaxinfo, 7, $gWinXMin); min X (+15) DllStructSetData($minmaxinfo, 8, $gWinYMin); min Y (+15) Return 0 EndFunc
      Test CSV 15.csv Test CSV 500.csv Virt_LV_Garbage.au3
    • By RAMzor
      Hello all,
      I have an ListView with checkboxes and about 300 - 400 items. Entire list is loaded (from ini) every time and I need to store and load "checked scenario" by name. 
      Store list of checked indexless is a bad idea because in the case of sorting the list - scenario will no longer be correct.
      What is the best way to store list of various scenarios of checked items?
      Base code and database ini are attached 
      Example_LV_Store_Scenario.au3 Example.ini
    • By ahha
      Under program control is there an easy way to move a slider (thumb) to the top or bottom?
      I am aware of Melba23's GUIScrollbars_Ex UDF (https://www.autoitscript.com/forum/topic/113723-scrollbars-made-easy-bugfix-version-2-may-21/) but I believe it's overkill for my simple needs.
      In a listview with a vertical scrollbar when the window is active one can hit Ctrl+Home to move the scrollbar slider (thumb) to the top and Ctrl+End to the bottom.
      One can also right click the slider and choose Scroll Here, Top, Bottom, Page UP, Page Down, Scroll Up, and Scroll Down.
      I must be doing something basically wrong but am stuck.  Move the thumb to the middle before clicking the Top button to test the code below (Bottom is not coded).  I've commented out other trys.  try #3 is a strange fail.
      Any comments on what I'm missing greatly appreciated as I'm stuck
      #AutoIt3Wrapper_run_debug_mode=Y #include <Debug.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> AutoItSetOption("MustDeclareVars", 1) ;v1b - cut out extraneous code Example() Exit Func Example() Local $i, $j, $x, $hGUI, $idListView, $bTop, $bBottom $hGUI = GUICreate("Scrollbar Question", 300, 400) ;get handle in case we need it later $idListView = GUICtrlCreateListView("Col 0", 10, 10, 280, 300) $bTop = GUICtrlCreateButton("Top", 10, 350, 60, 25) $bBottom = GUICtrlCreateButton("Bottom", 120, 350, 60, 25) ;Pause("$hGUI = '" & $hGUI &"'"& @CRLF & "$idListView = '" & $idListView &"'") For $i = 1 to 100 _GUICtrlListView_AddItem($idListView, $i) Next GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $bTop ;drag thumb to middle of scrollbar before clicking Top button ;try #1 - FAILS Opt("WinTitleMatchMode", 2) ;2 = Match any substring in the title $x = WinActivate("Scrollbar Question") ;not $idListview but main GUI $hGUI - neither working If $x <> $hGUI Then Pause("WinActivate FAILED") Send("^{HOME}") ;Ctrl+home ;try#2 - FAILS ;~ $x = WinActivate($hGUI) ;try Main GUI ;~ If $x <> $hGUI Then Pause("WinActivate FAILED") ;~ Send("^{HOME}") ;Ctrl+home ;try#3 - strange FAILS ;~ $x = WinActivate($idListview) ;try $idListview ;~ If $x <> $idListview Then Pause("WinActivate FAILED") ;strange it works BUT if I comment out this line it fails ;~ ;Sleep(1000) ;it's not a time delay issue ;~ Send("^{HOME}") ;Ctrl+home ;try#4 - same strange fail as #3 ;~ $x = WinActivate($idListview) ;try $idListview ;~ If $x <> $idListview Then Pause("WinActivate FAILED") ;~ Send("{UP 100}") ;try#5 - what the heck is going on? same strange fail as #3 ;$x = WinActivate($idListview) ;try $idListview ;~ $x = WinActivate($hGUI) ;try Main GUI ;~ If $x <> $idListview Then Pause("WinActivate FAILED") ;~ MouseWheel($MOUSE_WHEEL_UP, 100) ;_GUIScrollBars_ScrollWindow($hGUI, 0, 100) ;NO - moves the ListView window in the $hGUI ;_GUIScrollBars_ScrollWindow($idListview, 0, 100) ;does not seem to work ;_GUIScrollBars_SetScrollInfoPos($hGUI, $SB_VERT, 30) ;does not work ;_GUIScrollBars_SetScrollInfoPos($idListview, $SB_VERT, 30) ;does not work ;I'm doing something very basic wrong. I need help. Pause("Scrollbar thumb should be at Top") Case $bBottom Pause("In: Case $bBottom") Pause("Scroll bar should be at BOttom") EndSwitch WEnd GUIDelete($idListView) EndFunc ;Func Example() Func Pause($text="") MsgBox(262144, "DEBUG", "Paused: " & $text) EndFunc  
    • By ahha
      Newbie to _GUICtrlListView_RegisterSortCallBack and can't get it to sort properly on date in format MM/DD/YYYY.
      Example code below.  Q - How do I get the date to sort properly?
      ;#AutoIt3Wrapper_run_debug_mode=Y #include <GUIConstantsEx.au3> #include <GuiListView.au3> Global $g_id_ListView Example() Exit Func Example() Local $idRow1, $idRow2, $idRow3 GUICreate("ListView Sort Question", 300, 200) $g_id_ListView = GUICtrlCreateListView("Row#|Name|Date", 10, 10, 280, 180) $id_Row1 = GUICtrlCreateListViewItem("#1|Alice|01/15/2022", $g_id_ListView) $id_Row2 = GUICtrlCreateListViewItem("#2|Bob|02/22/2021", $g_id_ListView) $id_Row3 = GUICtrlCreateListViewItem("#3|Carol|03/13/2021", $g_id_ListView) $id_Row10 = GUICtrlCreateListViewItem("#10|Dave|10/09/2021", $g_id_ListView) $id_Row11 = GUICtrlCreateListViewItem("#11|Eve|11/21/2021", $g_id_ListView) GUISetState(@SW_SHOW) ;$vCompareType = 0 ;not ok as Row# sort #1, #10, and want #1, #2, ;$vCompareType = 1 ;not ok as Row# sort #1, #10, and want #1, #2, $vCompareType = 2 ;Row# okay but Date messed up _GUICtrlListView_RegisterSortCallBack($g_id_ListView, $vCompareType) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $g_id_ListView ;MsgBox(0,"","col="&GUICtrlGetState($g_id_ListView)) _GUICtrlListView_SortItems($g_id_ListView, GUICtrlGetState($g_id_ListView)) EndSwitch WEnd _GUICtrlListView_UnRegisterSortCallBack($g_id_ListView) GUIDelete($g_id_ListView) EndFunc ;Func Example()  
    • By UEZ
      This project has been discontinued!
       
      Here a small tool I wrote to update my Sysinternal tools collection without the need to download always the whole package or visiting the site to check for updates. I know that there are several tools available (also some tools written in AutoIt) but here another one for the collection. It was good exercise for me to code it.
       
       
        
       
       
      Some files from the live web site cannot be downloaded although they are visible!
       
      Here the download link of the source code only: AutoIt Sysinternal Tools Synchronizer v0.99.6 build 2020-09-23 beta.7z  (1557 downloads previously)
      -=> Requires AutoIt version 3.3.13.20 or higher / tested on Win8.1 real machine and some VMs: Win7 / Vista / Win10
       
      Compiled exe only: @MediaFire
       
      Just select the Sysinternal Tools folder or create one and press the synchronize button to download the selected items. Click on AutoIt label (near to left upper corner) to open menu.
       
      Special thanks to LarsJ, Melba23 and mesale0077 for their help. 
       
      I've still some ideas to implement which are more gimmick related, so it is not finished yet...
      If you want to add your language please check out #Region Language. Thanks. 
       
      Please report any bug or if you have any suggestions.
       
      The language of the tool tip from each of the executable in the left list view were automatically created using Google translator and weren't checked for correctness.
       
      Br,
      UEZ
×
×
  • Create New...