IniRead

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

IniRead

16 Oct 2021, 20:52

I have a doubt with IniRead would have like the listbox to get the files saved by IniWrite direct from an ex folder: I saved 5 names in .ini format would have as these files go straight to the listbox for me to select one of these files from the list and log the saved settings?
listbox.png
listbox.png (101.55 KiB) Viewed 1151 times
braunbaer
Posts: 478
Joined: 22 Feb 2016, 10:49

Re: IniRead

17 Oct 2021, 07:24

bittencourt318 wrote:
16 Oct 2021, 20:52
I have a doubt with IniRead would have like the listbox to get the files saved by IniWrite direct from an ex folder: I saved 5 names in .ini format would have as these files go straight to the listbox for me to select one of these files from the list and log the saved settings?
Maybe you try to rewrite the question in a way that makes understandable what you want to achieve.
User avatar
Smile_
Posts: 856
Joined: 03 May 2020, 00:51

Re: IniRead

17 Oct 2021, 07:28

If you are going to list these files inside your listbox, you can use a loop, files with a guicontrol.
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

17 Oct 2021, 19:46

Smile_ wrote:
17 Oct 2021, 07:28
If you are going to list these files inside your listbox, you can use a loop, files with a guicontrol.
great to know you have to do! Would you have an example?
User avatar
flyingDman
Posts: 2776
Joined: 29 Sep 2013, 19:01

Re: IniRead

17 Oct 2021, 20:03

Try:

Code: Select all

Gui, Add, ListBox, vMyLV x5 y5 h100 w350
Loop, files, %a_scriptdir%\*.ahk
	GuiControl,, MyLV, %A_LoopFileFullPath%
Gui, Show
14.3 & 1.3.7
User avatar
mikeyww
Posts: 26437
Joined: 09 Sep 2014, 18:38

Re: IniRead

17 Oct 2021, 20:14

A demonstration is below. This one uses an edit control instead of a listbox.

Code: Select all

ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini")
Gui, Font, s10
Gui, Add, Button,                   , S&elect
Gui, Add, Button, x+m               , &Load
Gui, Add, Button, x+m               , &Save
Gui, Add, Edit  , xm  w600 r6 vfiles
Gosub, F3
F3::Gui, Show,, Files

ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
 Return
files =
For each, file in StrSplit(list, "`n") {
 If (each = 1)
  dir := file
 Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return

ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return

ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return

GuiEscape:
Gui, Hide
Return
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

13 Nov 2021, 22:41

mikeyww wrote:
17 Oct 2021, 20:14
A demonstration is below. This one uses an edit control instead of a listbox.

Code: Select all

ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini")
Gui, Font, s10
Gui, Add, Button,                   , S&elect
Gui, Add, Button, x+m               , &Load
Gui, Add, Button, x+m               , &Save
Gui, Add, Edit  , xm  w600 r6 vfiles
Gosub, F3
F3::Gui, Show,, Files

ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
 Return
files =
For each, file in StrSplit(list, "`n") {
 If (each = 1)
  dir := file
 Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return

ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return

ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return

GuiEscape:
Gui, Hide
Return
print save.png
print save.png (47.29 KiB) Viewed 905 times

thank you very much guys but I continue with the problem because the name does not appear in ListView it opens and a new tab

Code: Select all

CRIAR_TELA_2:

ini := StrReplace(A_ScriptDir, ".ahk", ".ini")
Gui, Font, s10
Gui, 2: Add, Button,                   , S&elect
Gui, 2: Add, Button, x+m               , &Load
Gui, 2: Add, Button, x+m               , &Save
Gui, 2: Add, ListView  , xm  w600 r6 vfiles
Gosub, FILES
FILES:
Gui, 2: Show,, Files

ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
 Return
files = 
For each, file in StrSplit(list, "`n") {
 If (each = 1)
  dir := file
 Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return

ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return

ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

13 Nov 2021, 22:44

bittencourt318 wrote:
13 Nov 2021, 22:41
mikeyww wrote:
17 Oct 2021, 20:14
A demonstration is below. This one uses an edit control instead of a listbox.

Code: Select all

ini := StrReplace(A_ScriptFullPath, ".ahk", ".ini")
Gui, Font, s10
Gui, Add, Button,                   , S&elect
Gui, Add, Button, x+m               , &Load
Gui, Add, Button, x+m               , &Save
Gui, Add, Edit  , xm  w600 r6 vfiles
Gosub, F3
F3::Gui, Show,, Files

ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
 Return
files =
For each, file in StrSplit(list, "`n") {
 If (each = 1)
  dir := file
 Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return

ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return

ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return

GuiEscape:
Gui, Hide
Return

print save.png


thank you very much guys but I continue with the problem because the name does not appear in ListView it opens and a new tab

Code: Select all

CRIAR_TELA_2:

ini := StrReplace(A_ScriptDir, ".ahk", ".ini")
Gui, Font, s10
Gui, 2: Add, Button,                   , S&elect
Gui, 2: Add, Button, x+m               , &Load
Gui, 2: Add, Button, x+m               , &Save
Gui, 2: Add, ListView  , xm  w600 r6 vfiles
Gosub, FILES
FILES:
Gui, 2: Show,, Files

ButtonSelect:
FileSelectFile, list, M1,, Select files
If ErrorLevel
 Return
files = 
For each, file in StrSplit(list, "`n") {
 If (each = 1)
  dir := file
 Else files .= "|" dir "\" file
}
files := SubStr(files, 2)
Gosub, Load
Return

ButtonLoad:
IniRead, files, %ini%, Main, files
Load:
GuiControl,, files, % files = "ERROR" ? "" : StrReplace(files, "|", "`n")
Return

ButtonSave:
Gui, Submit, NoHide
IniWrite, % StrReplace(files, "`n", "|"), %ini%, Main, files
MsgBox, 64, Success, Done!, 1
Return
it was the least so I needed i don't know if i could express myself well
print save.png
print save.png (50.96 KiB) Viewed 901 times
User avatar
mikeyww
Posts: 26437
Joined: 09 Sep 2014, 18:38

Re: IniRead

13 Nov 2021, 22:48

Before you change the demo, see if it works as it is written. You will then know how your additions are breaking the script.

"Load" changes the edit control to match the file selection. You can change how it works so that the file selection is appended instead.
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

14 Nov 2021, 10:05

mikeyww wrote:
13 Nov 2021, 22:48
Before you change the demo, see if it works as it is written. You will then know how your additions are breaking the script.

"Load" changes the edit control to match the file selection. You can change how it works so that the file selection is appended instead.
I tried the one of mister flyingDman and also does not appear the files opens the blank secondary screen tried by the way c:.... and it also didn't work
printsave2.png
printsave2.png (81.74 KiB) Viewed 771 times
User avatar
flyingDman
Posts: 2776
Joined: 29 Sep 2013, 19:01

Re: IniRead

14 Nov 2021, 10:42

My 4 lines of code work perfectly. Just run it as-is without trying to incorporate it in your script.
14.3 & 1.3.7
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

14 Nov 2021, 10:53

flyingDman wrote:
14 Nov 2021, 10:42
My 4 lines of code work perfectly. Just run it as-is without trying to incorporate it in your script.

this yes I did tests using msgbox and it worked but the problem is in appearing the name in listview for some reason i don't know it's not picking up the file names in the msgbox is appearing all names but in listview not
User avatar
flyingDman
Posts: 2776
Joined: 29 Sep 2013, 19:01

Re: IniRead

14 Nov 2021, 11:49

Listview or listbox? Two very different things!
14.3 & 1.3.7
bittencourt318
Posts: 85
Joined: 16 Apr 2020, 10:57

Re: IniRead

14 Nov 2021, 12:01

flyingDman wrote:
14 Nov 2021, 11:49
Listview or listbox? Two very different things!




I found this similar to what I wanted but to open a tab to search wanted me to open directly the folder specifies something very simple for me to be able to learn and manipulate little by little

Code: Select all

; Permita que o usuário maximize ou arraste e redimensione a janela:
Gui +Resize

; Crie alguns botões:
Gui, Add, Button, Default gButtonLoadFolder, Load a folder
Gui, Add, Button, x+20 gButtonClear, Clear List


;Crie o ListView e suas colunas via Gui Add:
Gui, Add, ListView, xm r20 w700 vMyListView gMyListView, Name|In Folder|Size (KB)|Type
LV_ModifyCol(3, "Integer")  ; Para classificação, indique que a coluna Tamanho é um número inteiro.

; Crie o ListView e suas colunas via Gui Add:
ImageListID1 := IL_Create(10)
ImageListID2 := IL_Create(10, 10, true)  ; Uma lista de ícones grandes para combinar com os pequenos.

; Anexe as ImageLists ao ListView para que posteriormente possa exibir os ícones:
LV_SetImageList(ImageListID1)
LV_SetImageList(ImageListID2)

; Crie um menu pop-up para ser usado como menu de contexto:
Menu, MyContextMenu, Add, Open, ContextOpenFile
Menu, MyContextMenu, Add, Properties, ContextProperties
Menu, MyContextMenu, Add, Clear from ListView, ContextClearRows
Menu, MyContextMenu, Default, Open  ;Transforme "Abrir" em uma fonte em negrito para indicar que o clique duplo faz a mesma coisa.

; Exiba a janela e volte. O sistema operacional notificará o script sempre que o usuário
; executa uma ação elegível:
Gui, Show
return


ButtonLoadFolder:
Gui +OwnDialogs  ; Força o usuário a dispensar a seguinte caixa de diálogo antes de usar a janela principal.
FileSelectFolder, Folder,, 3, Select a folder to read:
if not Folder  ; The user canceled the dialog.
    return

; Verifique se o último caractere do nome da pasta é uma barra invertida, o que acontece com o root
; diretórios como C: \. Se estiver, remova-o para evitar uma barra invertida dupla posteriormente.
LastChar := SubStr(Folder, 0)
if (LastChar = "\")
    Folder := SubStr(Folder, 1, -1) ; O usuário cancelou a caixa de diálogo.

; Calcule o tamanho do buffer necessário para a estrutura SHFILEINFO.
sfi_size := A_PtrSize + 8 + (A_IsUnicode ? 680 : 340)
VarSetCapacity(sfi, sfi_size)

; Reúna uma lista de nomes de arquivo da pasta selecionada e anexe-os ao ListView:
GuiControl, -Redraw, MyListView  ; Melhore o desempenho desativando o redesenho durante o carregamento.
Loop %Folder%\*.*
{
    FileName := A_LoopFileFullPath  ; Deve salvá-lo em uma variável gravável para uso abaixo.

    ; Crie um ID de extensão exclusivo para evitar caracteres ilegais em nomes de variáveis,
    ; como travessões. Este método de ID exclusivo também funciona melhor porque encontrar um item
    ; na matriz não requer loop de pesquisa.
    SplitPath, FileName,,, FileExt  ; Obtenha a extensão do arquivo.
    if FileExt in EXE,ICO,ANI,CUR
    {
        ExtID := FileExt  ;ID especial como um espaço reservado.
        IconNumber := 0  ; Sinalize-o como não encontrado para que cada um desses tipos tenha um ícone exclusivo.
    }
    else  ; Alguma outra extensão / tipo de arquivo, então calcule seu ID exclusivo.
    {
        ExtID := 0  ; Inicialize para lidar com extensões mais curtas do que outras.
        Loop 7     ; Limite a extensão a 7 caracteres para que se encaixe em um valor de 64 bits.
        {
            ExtChar := SubStr(FileExt, A_Index, 1)
            if not ExtChar  ; Não há mais personagens.
                break
            ; Derive um ID único atribuindo uma posição de bit diferente para cada caractere:
            ExtID := ExtID | (Asc(ExtChar) << (8 * (A_Index - 1)))
        }
        ; Verifique se esta extensão de arquivo já possui um ícone nas ImageLists. Se isso acontecer,
        ; várias chamadas podem ser evitadas e o desempenho de carregamento é muito melhorado,
        ; especialmente para uma pasta contendo centenas de arquivos:
        IconNumber := IconArray%ExtID%
    }
    if not IconNumber  ; Ainda não existe nenhum ícone para esta extensão, então carregue-o.
    {
        ; Obtenha o ícone pequeno de alta qualidade associado a esta extensão de arquivo:
        if not DllCall("Shell32\SHGetFileInfo" . (A_IsUnicode ? "W":"A"), "Str", FileName
            , "UInt", 0, "Ptr", &sfi, "UInt", sfi_size, "UInt", 0x101)  ; 0x101 is SHGFI_ICON+SHGFI_SMALLICON
            IconNumber := 9999999  ; Defina-o fora dos limites para exibir um ícone em branco.
        else ; Ícone carregado com sucesso.
        {
            ; Extraia o membro hIcon da estrutura:
            hIcon := NumGet(sfi, 0)
            ; Adicione o HICON diretamente às listas de ícones pequenos e grandes.
            ; Abaixo usa +1 para converter o índice retornado de zero para um:
            IconNumber := DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID1, "Int", -1, "Ptr", hIcon) + 1
            DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID2, "Int", -1, "Ptr", hIcon)
            ; Agora que foi copiado para as ImageLists, o original deve ser destruído:
            DllCall("DestroyIcon", "Ptr", hIcon)
            ; Armazene o ícone em cache para economizar memória e melhorar o desempenho de carregamento:
            IconArray%ExtID% := IconNumber
        }
    }

    ; Crie a nova linha no ListView e atribua a ela o número do ícone determinado acima:
    LV_Add("Icon" . IconNumber, A_LoopFileName, A_LoopFileDir, A_LoopFileSizeKB, FileExt)
}
GuiControl, +Redraw, MyListView  ; Reative o redesenho (foi desativado acima).
LV_ModifyCol()  ; Dimensione automaticamente cada coluna para ajustar seu conteúdo.
LV_ModifyCol(3, 60) ; Deixe a coluna Tamanho um pouco mais larga para revelar seu cabeçalho.
return


ButtonClear:
LV_Delete()  ; mas mantenha o cache do ícone intacto para simplificar.
return



MyListView:
if (A_GuiEvent = "DoubleClick")  ; Existem muitos outros valores possíveis que o script pode verificar.
{
    LV_GetText(FileName, A_EventInfo, 1) ; Obtenha o texto do primeiro campo.
    LV_GetText(FileDir, A_EventInfo, 2)  ; Obtenha o texto do segundo campo.
    Run %FileDir%\%FileName%,, UseErrorLevel
    if ErrorLevel
        MsgBox Could not open "%FileDir%\%FileName%".
}
return

GuiContextMenu:  ; Lançado em resposta a um clique com o botão direito ou pressionamento da tecla Apps.
if (A_GuiControl != "MyListView") ; Exiba o menu apenas para cliques dentro do ListView.
    return
; Mostre o menu nas coordenadas fornecidas, A_GuiX e A_GuiY. Estes devem ser usados
; porque eles fornecem as coordenadas corretas mesmo se o usuário pressionou a tecla Apps:
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

ContextOpenFile:  ; O usuário selecionou "Abrir" no menu de contexto.
ContextProperties:  ; O usuário selecionou "Propriedades" no menu de contexto
; Para simplificar, opere apenas na linha em foco, em vez de todas as linhas selecionadas:
FocusedRowNumber := LV_GetNext(0, "F")  ; Encontre a linha em foco.
if not FocusedRowNumber  ; Nenhuma linha está focada.
    return
LV_GetText(FileName, FocusedRowNumber, 1) ; Obtenha o texto do primeiro campo.
LV_GetText(FileDir, FocusedRowNumber, 2)  ; Obtenha o texto do segundo campo.
if InStr(A_ThisMenuItem, "Open")  ; O usuário selecionou "Abrir" no menu de contexto.
    Run %FileDir%\%FileName%,, UseErrorLevel
else  ; O usuário selecionou "Propriedades" no menu de contexto.
    Run Properties "%FileDir%\%FileName%",, UseErrorLevel
if ErrorLevel
    MsgBox Could not perform requested action on "%FileDir%\%FileName%".
return

ContextClearRows:  ; O usuário selecionou "Limpar" no menu de contexto.
RowNumber := 0  ; Isso faz com que a primeira iteração comece a pesquisa no topo.
Loop
{
    ; Já que a exclusão de uma linha reduz o RowNumber de todas as outras linhas abaixo dela,
    ; subtraia 1 para que a pesquisa inclua o mesmo número de linha que estava anteriormente
    ; encontrado (no caso de linhas adjacentes serem selecionadas):
    RowNumber := LV_GetNext(RowNumber - 1)
    if not RowNumber  ; O valor acima retornou zero, portanto, não há mais linhas selecionadas.
        break
    LV_Delete(RowNumber)  ; Limpe a linha do ListView.
}
return

GuiSize:  ; Expanda ou diminua o ListView em resposta ao redimensionamento da janela do usuário.
if (A_EventInfo = 1)  ; A janela foi minimizada. Nenhuma ação necessária.
    return
; Caso contrário, a janela foi redimensionada ou maximizada. Redimensione o ListView para corresponder.
GuiControl, Move, MyListView, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 40)
return

GuiClose:  ; Quando a janela for fechada, saia do script automaticamente:
ExitApp

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: morkovka18, ntepa and 174 guests