Jump to content

Recommended Posts

Posted (edited)

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

Posted (edited)

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). 

#include <StructureConstants.au3>
#include <Array.au3>
#include <Clipboard.au3>
#include <FontConstants.au3>
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <ScrollBarsConstants.au3>
#include <String.au3>
#include <WinAPIHObj.au3>
#include <WinAPIInternals.au3>
#include <WindowsConstants.au3>
#NoTrayIcon


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

$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"
;ConsoleWrite ($sFilePath & @CRLF)

$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
    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

    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("?", 108, 224, 23, 22)
GUICtrlSetTip(-1, "Help Text")
$Button5 = GUICtrlCreateButton("CFG", 130, 224, 33, 22)
GUICtrlSetTip(-1, "Close and Configure")
$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 $Button5
            ExitLoop
        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

GUIDelete($Form1)
ConfigWindow()

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


Func ConfigWindow()
    #Region ### START Koda GUI section ### Form=C:\!basic\AutoIt3\NewFileIniEd\Form1.kxf
    Global $IniEdGui = GUICreate("Config", 178, 184, -1, -1, BitOR($WS_CAPTION, $DS_MODALFRAME))
    Global $iniEdDefName = GUICtrlCreateInput("", 79, 24, 98, 21)
    GUICtrlSetTip(-1, "Set the default filename")
    $label = GUICtrlCreateLabel("Default Name", 5, 28, 69, 17)
    Global $CheckboxMX = GUICtrlCreateCheckbox("MouseX", 3, 3, 55, 17)
    GUICtrlSetTip(-1, "Open the Window at the MouseX coorditates")
    Global $CheckboxMY = GUICtrlCreateCheckbox("MouseY", 64, 3, 62, 17)
    GUICtrlSetTip(-1, "Open the Window at the MouseY coorditates")
    Global $configed = GUICtrlCreateEdit("", 3, 50, 174, 114)
    GUICtrlSetFont($configed, 10, $FW_BOLD, $GUI_FONTNORMAL, "ARIAL")
    GUICtrlSetTip(-1, "Use:" & @CRLF & "Name;Extension" & @CRLF & "Extension without ." & @CRLF & "Name should be unique and no [] chars")
    $ButtonSave = GUICtrlCreateButton("Save", 3, 165, 40, 18)
    GUICtrlSetTip(-1, "Save the extensions + Default name")
    $ButtonQuit = GUICtrlCreateButton("Quit", 137, 165, 40, 18)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    CFGRead()

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $ButtonQuit
                ExitLoop
            Case $ButtonSave
                CFGWrite()
            Case $CheckboxMX
                If _IsChecked($CheckboxMX) = 1 Then
                    IniWrite($sFilePath, "setting", "UseMouseX", "1")
                Else
                    IniWrite($sFilePath, "setting", "UseMouseX", "0")
                EndIf
            Case $CheckboxMY
                If _IsChecked($CheckboxMY) = 1 Then
                    IniWrite($sFilePath, "setting", "UseMouseY", "1")
                Else
                    IniWrite($sFilePath, "setting", "UseMouseY", "0")
                EndIf
        EndSwitch
    WEnd
    GUIDelete($IniEdGui)
EndFunc   ;==>ConfigWindow

Func CFGRead()
    Local $y = 0
    Local $tmp1 = "", $tmp2 = "", $tmp3
    Local $aTmp = IniReadSectionNames($sFilePath)
    If @error = 0 Then
        For $x = 1 To $aTmp[0]
            If $aTmp[$x] <> "setting" Then
                $y = $y + 1
                $tmp1 = $aTmp[$x]
                $tmp2 = StringReplace(IniRead($sFilePath, $aTmp[$x], "1", ""), ".", "")
                If StringLen($tmp2) > 0 Then
                    $tmp3 = $tmp3 & $tmp1 & ";" & $tmp2 & @CRLF
                EndIf
            EndIf
        Next
        GUICtrlSetData($configed, $tmp3)
    EndIf
    If IniRead($sFilePath, "setting", "UseMouseX", "0") = 1 Then _CheckUncheck($CheckboxMX, 1)
    If IniRead($sFilePath, "setting", "UseMouseY", "0") = 1 Then _CheckUncheck($CheckboxMY, 1)

    GUICtrlSetData($iniEdDefName, IniRead($sFilePath, "setting", "filename", ""))
EndFunc   ;==>CFGRead

Func CFGWrite()
    Local $tmp, $tmp1, $tmp2, $tmpx, $filesetting
    Local $aTmp = IniReadSectionNames($sFilePath)

    If @error = 0 Then
        For $x = 1 To $aTmp[0]
            If $aTmp[$x] <> "setting" Then
                IniDelete($sFilePath, $aTmp[$x])
            EndIf
        Next
    EndIf

    $filesetting = StringRemoveMulti(GUICtrlRead($iniEdDefName), "<:./\[]*?=")
    IniWrite($sFilePath, "setting", "filename", StringReplace($filesetting, " ", ">"))

    $tmp = StringRemoveMulti(GUICtrlRead($configed), "<>:./\[]*?=")

    GUICtrlSetData($configed, $tmp)

    $aTmp = StringSplit($tmp, @CRLF, 3)

    For $x = 0 To UBound($aTmp) - 1
        $tmp = $aTmp[$x]
        $tmpx = StringInStr($tmp, ";")
        If $tmpx > 0 Then
            $tmp1 = StringMid($tmp, 1, $tmpx - 1)
            $tmp2 = StringMid($tmp, $tmpx + 1)
            If StringLen($tmp1) > 0 And StringLen($tmp2) > 0 Then IniWrite($sFilePath, $tmp1, "1", "." & $tmp2)
        EndIf
    Next

EndFunc   ;==>CFGWrite

Func StringRemoveMulti($txt, $rep)
    ;Replace each single char in $rep from $txt
    ;eg $txt="MyFileName:Which\Should/not*contain invalid chars" $rep=":/\*"  Returns: "MyFileNameWhichShouldnotcontain invalid chars"
    Local $x
    For $x = 1 To StringLen($rep)
        $txt = StringReplace($txt, StringMid($rep, $x, 1), "")
    Next
    Return $txt
EndFunc   ;==>StringReplaceMulti

Func _CheckUncheck($id, $nr)
    If $nr = 0 Then
        GUICtrlSetState($id, $GUI_UNCHECKED)
    Else
        GUICtrlSetState($id, $GUI_CHECKED)
    EndIf
EndFunc   ;==>_CheckUncheck

Func _IsChecked($idControlID)
    ;Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED     ;Returns true or false (oneliner)
    ;The lines below convert true and false to numbers - 1 and 0
    Local $x = BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
    If $x = True Then Return 1
    Return 0
EndFunc   ;==>_IsChecked

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
Update: Added a configuration window.

Some of my script sourcecode

  • 2 years later...
Posted

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,
 

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

  • 1 month later...
Posted (edited)

Updated the code in the 2nd post. 

It has now the configuration window. 

You can now change the default filename, turn on mouse x/y coordinate window spawn and add/arrange extensions in a edit box.

 

Edited by Dan_555

Some of my script sourcecode

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
×
×
  • Create New...