Page 1 of 1

Propriedades

Posted: 06 Jul 2023, 12:26
by BeneditoCarneiro
Propriedades é um programa para ver algumas propriedades de arquivos e pastas do Windows.

Code: Select all

/*
Propriedades de arquivos e pastas
Copyright 2023 Benedito Carneiro
*/
#NoEnv
#SingleInstance, Force
SendMode, Input
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%

bc := Chr(0169) " 2023 Benedito Carneiro"
Gui, default
Gui, Font, s13 cWhite, Segoe UI
Gui, Color,003366
Gui, Add, Text,, Propriedades de arquivos e pastas
Gui, Add, Button, h30 gArquivo, Escolher o arquivo
Gui, Add, Button, h30 w158 gPasta, Escolher a pasta
Gui, Add, Text,,
Gui, Add, Button, h30 w80 gSair, Sair
Gui, Add, Text,, %bc%
Gui, Show,,Propriedades
Return

Arquivo:
FileSelectFile, arquivo,,, Selecione o arquivo
if ErrorLevel
    Return
FileGetTime, modificado, %arquivo%, M
FormatTime, modificado, %modificado%, dd/MM/yyyy HH:mm
FileGetTime, criado, %arquivo%, C
FormatTime, criado, %criado%, dd/MM/yyyy HH:mm
FileGetTime, acessado, %arquivo%, A
FormatTime, acessado, %acessado%, dd/MM/yyyy HH:mm
FileGetSize, kbytes, %arquivo%, K
kbytes := ThousandsSep(kbytes)
bytes := TamanhoArquivo(arquivo)
bytes := ThousandsSep(bytes)
atributo := StringAtributos(arquivo)
saida := "Propriedades do arquivo:`n" . arquivo . "`n`n"
saida := saida . "1. Criado em: " . criado . "`n`n"
saida := saida . "2. Modificado em: " . modificado . "`n`n"
saida := saida . "3. Acessado em: " . acessado . "`n`n"
saida := saida . "4. Tamanho: " . bytes . " bytes, " . kbytes . " kB`n`n"
saida := saida . "5. Atributos: " . atributo
Resizable_GUI(saida,,330)
Return

Pasta:
FileSelectFolder, arquivo,,, Selecione a pasta
if ErrorLevel
    Return
FileGetTime, modificado, %arquivo%, M
FormatTime, modificado, %modificado%, dd/MM/yyyy HH:mm
FileGetTime, criado, %arquivo%, C
FormatTime, criado, %criado%, dd/MM/yyyy HH:mm
FileGetTime, acessado, %arquivo%, A
FormatTime, acessado, %acessado%, dd/MM/yyyy HH:mm
atributo := StringAtributos(arquivo)
bytes := TamanhoPasta(arquivo)
kbytes := bytes / 1024
bytes := ThousandsSep(bytes)
kbytes := ThousandsSep(kbytes)
saida := "Propriedades da pasta:`n" . arquivo . "`n`n"
saida := saida . "1. Criada em: " . criado . "`n`n"
saida := saida . "2. Modificada em: " . modificado . "`n`n"
saida := saida . "3. Acessada em: " . acessado . "`n`n"
saida := saida . "4. Tamanho: " . bytes . " bytes, " . kbytes . " kB`n`n"
saida := saida . "5. Atributos: " . atributo
Resizable_GUI(saida,,330)
Return

ThousandsSep(x, s=".") {
    x := RegExReplace(x,"(?<=\.\d{" 1 "}).*$")  ; arredonda para um decimal
    x := RegExReplace(x, "\.", ",")   ; troca o ponto por vírgula nos decimais
    x := RegExReplace(x, "\G\d+?(?=(\d{3})+(?:\D|$))", "$0" s)   ; separa o número em milhares com ponto
    return x
}

LimpaFimString(x){
    return RegExReplace(x, ", $", "")
}

TamanhoArquivo(nome){
    return ComObjCreate("Scripting.FileSystemObject").GetFile(nome).Size
}

TamanhoPasta(nome){
    Try {
        tamanho := ComObjCreate("Scripting.FileSystemObject").GetFolder(nome).Size
    } Catch {
        tamanho := 0
    }
    return tamanho
}

StringAtributos(arquivo){
    FileGetAttrib, atributos, %arquivo%
    atributo := ""
    atributo := InStr(atributos, "C") ? (atributo . "Comprimido, ") : atributo
    atributo := InStr(atributos, "D") ? (atributo . "Diretório, ") : atributo
    atributo := InStr(atributos, "E") ? (atributo . "Encriptado, ") : atributo
    atributo := InStr(atributos, "I") ? (atributo . "Indexado, ") : atributo
    atributo := InStr(atributos, "A") ? (atributo . "Ler e gravar, ") : atributo
    atributo := InStr(atributos, "H") ? (atributo . "Oculto, ") : atributo
    atributo := InStr(atributos, "S") ? (atributo . "Sistema, ") : atributo
    atributo := InStr(atributos, "R") ? (atributo . "Somente ler, ") : atributo
    atributo := LimpaFimString(atributo)
    return atributo
}

Resizable_GUI(saida,x=800,y=600){
    static EditWindow
    Gui,12:Destroy
    Gui,12:Default
    Gui,12:+Resize
    Gui,12:Font,s13 cBlack q5, Segoe UI
    Gui,12:Color,003366
    Gui,12:Add,Edit,w%x% h%y% -Wrap HScroll hwndEditWindow, %saida%
    Gui,12:Show
    SendInput, ^{Home}
    Return
    12GuiEscape:
    12GuiClose:
    Gui,12:Destroy
    Return
    12GuiSize:
    GuiControl,12:Move,%EditWindow%,% "w" A_GuiWidth-30 "h" A_GuiHeight-25
    Return
}

GuiEscape:
GuiClose:
Sair:
Gui,destroy
ExitApp