Jump to content

Leaderboard


Popular Content

Showing most liked content since 05/21/2018 in all areas

  1. 2 points
    Bem... Segundo o Google Translator, DUMMY é um adjetivo que significa: simulado simulated, dummy, mock, sham, assumed, feigned falso false, untrue, bogus, phony, wrong, dummy postiço false, dummy Mas e no AutoIt, pra que serve? Se você usar um GuiCtrlCreateButton, ele retorno o id do elemento, e você vê um botão na GUI (Graphic User Interface ou apenas janela). Se você usar um GuiCtrlCreateLabel, ele retorno o id do elemento, e você vê um label na GUI. E assim por diante... Se você usar um GuiCtrlCreateDummy, ele retorno o id do elemento, e você não vê nada na GUI. Como assim? Ele cria e não retorna nada? Sim! Isso mesmo! É um controle fake, falso. Ah, mas e isso tem utilidade? Pior que tem... Vou mostrar aqui 1 exemplo: Você quer fazer uma GUI, mas nessa GUI tem várias "telas", por exemplo: tela de login tela de cadastro tela de logout Cada tela tem seus elementos (buttons, edit, radio, combobox, etc)... São muitas telas, e cada tela tem seus elementos, pronto, virou um salseiro! Uma confusão! Como fazer para @GUI_SHOW e @GUI_HIDE nesses controles? É nessa questão que venho mostrar esse exemplo. Ocultar o que não precisa, e exibir o que precisa. Outra alternativa simples, seria usar um GuiCtrlCreateTab... Mas fica para outro tópico, vou me ater no Dummy(). A ideia é simples. Antes de começar a criar os comandos da tela da primeira "tela de login", você cria um Dummy antes: #Region Tela de login Global $dummy1 = GuiCtrlCreateDummy() GuiCtrlCreateLabel("Nome de usuário", x1, y1, w1, h1) GuiCtrlCreateInput("digite seu nome de usuario", x2, y2, w2, h2) GuiCtrlCreateLabel("Senha", x3, y3, w3, h3) GuiCtrlCreateInput("digite sua senha", x4, y4, w4, h4) Global $dummy2 = GuiCtrlCreateDummy() #EndeRegion Tela de login E assim... Eu desenho todas as telas que eu preciso: Tela de login, Tela de cadastro, Tela de logout, etc... O segredo é, um Dummy antes do primeiro controle, e um Dummy depois do último controle para cada tela ou sessão. E preciso de um jeito, de manipular cada sessão, isto é, fazer que quando eu quiser a sessão "Tela de login", ele exiba todos os elementos da "Tela de login", e oculte todos os outros elementos que não fazer parte da "Tela de login". Por isso um Dummy antes, e um Dummy depois! O Dummy nada mais é, do que um número qualquer... E qualquer que seja o próximo controle que você criar, ele terá um número a mais do que o Dummy, nesta tela. E o próximo controle, terá um número a mais do que o anterior, até você colocar o Dummy no fim. Então todos os controles da sessão "Tela de login", estarão entre um Dummy (número inicial) e outro Dummy (número final). Agora, já é possível sair ocultando e exibindo os controles. ;~ #AutoIt3Wrapper_AU3Check_Parameters= -q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ;~ #Tidy_Parameters=/sf #include-once #include <Array.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <EditConstants.au3> OnAutoItExitRegister("OnExit") Opt("GUIOnEventMode", 1) Opt("GUIEventOptions", 1) Opt("MustDeclareVars", 1) Global $sLoremIpsum = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum." Global $aGuiSize[2] = [800, 600] Global $sGuiTitle = "GuiTitle" Global $hGui $hGui = GUICreate($sGuiTitle, $aGuiSize[0], $aGuiSize[1]) GUISetOnEvent($GUI_EVENT_CLOSE, "Quit") GUISetFont(11, 400, 0, "DOSLike", $hGui) #Region VIEWS Global $VIEW = 1 Global $aVIEWS[][4] = [[0, "login"], [0, "account"], [0, "exit"]] Global $pos[4] = [10, 10, 100, 25] For $ii = 0 To UBound($aVIEWS, 1) - 1 $aVIEWS[$ii][0] = GUICtrlCreateRadio($aVIEWS[$ii][1], $pos[0] + $ii * $pos[2], $pos[1], $pos[2], $pos[3]) GUICtrlSetOnEvent($aVIEWS[$ii][0], "View_Click") Next GUICtrlCreateGroup("", -99, -99, 1, 1) #EndRegion VIEWS #Region Tela0 $aVIEWS[0][2] = GUICtrlCreateDummy() Global $hLabel_Tela0_Texto = GUICtrlCreateLabel("Tela de login", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN)) GUICtrlSetBkColor($hLabel_Tela0_Texto, 0xccbbaa) Global $hLabel_Tela0_Usuario = GUICtrlCreateLabel("usuario", 10, 83, 80, 25, $ES_RIGHT) Global $hInput_Tela0_Usuario = GUICtrlCreateInput("", 100, 83, 200, 25) Global $hLabel_Tela0_Senha = GUICtrlCreateLabel("senha", 10, 113, 80, 25, $ES_RIGHT) Global $hInput_Tela0_Senha = GUICtrlCreateInput("", 100, 113, 200, 25) Global $hButton_Tela0_TryLogin = GUICtrlCreateButton("Login", 100, 140, 80, 25) $aVIEWS[0][3] = GUICtrlCreateDummy() #EndRegion Tela0 #Region Tela1 $aVIEWS[1][2] = GUICtrlCreateDummy() Global $hLabel_Tela1_Texto = GUICtrlCreateLabel("Tela de cadastro", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN)) GUICtrlSetBkColor($hLabel_Tela1_Texto, 0x889922) Global $hLabel_Tela1_Nome = GUICtrlCreateLabel("Nome completo", 10, 83, 160, 25, $ES_RIGHT) Global $hInput_Tela1_Nome = GUICtrlCreateInput("", 180, 80, 200, 25) Global $hLabel_Tela1_Usuario = GUICtrlCreateLabel("Nome de usuário", 10, 113, 160, 25, $ES_RIGHT) Global $hInput_Tela1_Usuario = GUICtrlCreateInput("", 180, 110, 200, 25) Global $hLabel_Tela1_Senha = GUICtrlCreateLabel("Senha", 10, 143, 160, 25, $ES_RIGHT) Global $hInput_Tela1_Senha = GUICtrlCreateInput("", 180, 140, 200, 25) $aVIEWS[1][3] = GUICtrlCreateDummy() #EndRegion Tela1 #Region Tela2 $aVIEWS[2][2] = GUICtrlCreateDummy() Global $hLabel_Tela2_Texto = GUICtrlCreateLabel("Tela de logout", 10, 50, 780, 25, BitOR($SS_CENTER, $SS_SUNKEN)) GUICtrlSetBkColor($hLabel_Tela2_Texto, 0xff0011) Global $hLabel_Tela2_Texto = GUICtrlCreateEdit($sLoremIpsum, 10, 83, 780, 400, $ES_MULTILINE) $aVIEWS[2][3] = GUICtrlCreateDummy() #EndRegion Tela2 GUISetState(@SW_SHOW, $hGui) View_Click($VIEW) While Sleep(25) WEnd Func OnExit() GUISetState($hGui, @SW_HIDE) GUIDelete($hGui) EndFunc ;==>OnExit Func Quit() Exit EndFunc ;==>Quit Func View_Click($input = -1) $VIEW = IsDeclared("input") ? $input : @GUI_CtrlId - $aVIEWS[0][0] GUICtrlSetState($aVIEWS[$VIEW][0], $GUI_CHECKED) For $ii = 0 To UBound($aVIEWS, 1) - 1 For $jj = $aVIEWS[$ii][2] + 1 To $aVIEWS[$ii][3] - 1 GUICtrlSetState($jj, $ii = $VIEW ? $GUI_SHOW : $GUI_HIDE) Next Next EndFunc ;==>View_Click Como disse... eis o segredo: Global $aVIEWS[][4] = [ _ [0, "login", "Dummy 0 inicio", "Dummy 0 fim"], _ [0, "account", "Dummy 1 inicio", "Dummy 1 fim"], _ [0, "exit", "Dummy 2 inicio", "Dummy 2 fim"] _ ] coluna 0 $aVIEWS, recebe o handle do CheckBox da tela coluna 1 $aVIEWS, recebe o nome do CheckBox da tela coluna 2 $aVIEWS, recebe o Dummy inicial coluna 3 $aVIEWS, recebe o Dummy final E a cada vez que você chama a função View_Click, ele sabe qual a tela que é pra mostrar, exibindo a tela solicitada, e ocultado tudo o que não é solicitado. Agora para pirar um pouco, os controles não são deletados da tela, eles apenas são ocultados e exibidos! Outra coisa, nem todo o controle pode responder bem aqui... Todos os controles básicos funcionam bem, quero dizer: GuiCtrlCreateButton, GuiCtrlCreateLabe, etc.. Os controles plus não respondem bem: _GuiCtrlCreateButton, _GuiCtrlCreateEdit, etc... Em tempo... Se você precisa executar uma função toda a vez que entrar em uma tela, adicine uma coluna no $aVIEWS, contendo o nome da função que deseja chamar: Func View_Click($input = -1) $VIEW = IsDeclared("input") ? $input : @GUI_CtrlId - $aVIEWS[0][0] GUICtrlSetState($aVIEWS[$VIEW][0], $GUI_CHECKED) CALL($aVIEWS[$VIEW][5]) For $ii = 0 To UBound($aVIEWS, 1) - 1 For $jj = $aVIEWS[$ii][2] + 1 To $aVIEWS[$ii][3] - 1 GUICtrlSetState($jj, $ii = $VIEW ? $GUI_SHOW : $GUI_HIDE) Next Next EndFunc ;==>View_Click Então, toda a vez que você mudar de tela, ele chama a função programada, graças à: CALL($aVIEWS[$VIEW][5]) Você pode fazer a execução de saída de tela... Adicione mais uma coluna, rss... Acredito que mostro aqui um exemplo prático do uso do GuiCtrlCreteDummy, e para pequenos projetos e devido à sua simplicidade se adapta muito bem. É isso! 8D
  2. 2 points
    Bom dia, Compartilho uma pequena função que auxilia muito o debug... Ao invés de usar o ConsoleWrite, use o Print. Versão melhorada: https://github.com/chechelaky/AutoIt/blob/master/Print/Print.au3 Local $arr[][4] = [ _         ["0a", "0b", "0c", "0d"], _         ["1a", "1b", "1c", "1d"], _         ["2a", "2b", "2c", "2d"], _         ["3a", "3b", "3c", "3d"], _         ["4a", "4b", "4c", "4d"], _         ["5a", "5b", "5c", "5d"], _         ["6a", "6b", "6c", "6d"], _         ["7a", "7b", "7c", "7d"], _         ["8a", "8b", "8c", "8d"], _         ["9a", "9b", "9c", "9d"], _         ["10a", "10b", "10c", "10d"], _         ["11a", "11b", "11c", "11d"] _         ] Saída: --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop +--0+--1+--2+--3+ 0 | 0a| 0b| 0c| 0d| 1 | 1a| 1b| 1c| 1d| 2 | 2a| 2b| 2c| 2d| 3 | 3a| 3b| 3c| 3d| 4 | 4a| 4b| 4c| 4d| 5 | 5a| 5b| 5c| 5d| 6 | 6a| 6b| 6c| 6d| 7 | 7a| 7b| 7c| 7d| 8 | 8a| 8b| 8c| 8d| 9 | 9a| 9b| 9c| 9d| 10 |10a|10b|10c|10d| 11 |11a|11b|11c|11d| +---+---+---+---+ +>14:09:07 AutoIt3.exe ended.rc:0 Local $arr[] = ["um", "dois", 3, 4, 5, 6, 7, 8, 9, 10, 22] Saída: --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop +----+ 0 | um| 1 |dois| 2 | 3| 3 | 4| 4 | 5| 5 | 6| 6 | 7| 7 | 8| 8 | 9| 9 | 10| 10 | 22| +----+ +>14:15:59 AutoIt3.exe ended.rc:0
  3. 2 points
    É porque na linha 89 você adiciona um valor sequencial sempre que é adicionado um novo elemento na tabela. " $id= $id + 1" e sempre que você adiciona um novo item, ele segue a referencia da variável $id, até aí tudo bem, mas na hora de deletar um item da tabela você simplesmente exclui um item selecionado sem remover o valor da variável e mesmo removendo o valor da variável, o item selecionado pode ser que não seja sequencial como está na variavel $id. Exemplo (linha 89): você adiciona 1 item novo $id=1 $id=2 $id=3 $id=4 Aí você resolve deletar o item 2, a variavel $id continuará somando o valor 1 . Ao invés de usar a variável $id eu coloquei o _GUICtrlListView_GetItemCount para ler quantas linhas tinham na ListView e adicionar +1 de acordo com a quantidade, então se você deletar uma linha, a função que eu citei ali vai ter um valor exato de itens na lista. #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> #include <StringConstants.au3> #include <Array.au3> #include <GuiListBox.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 612, 480, 192, 154) $MenuItem1 = GUICtrlCreateMenu("&Arquivo") $MenuItem2 = GUICtrlCreateMenuItem("Salvar Ctrl+S", $MenuItem1, $SS_CENTER) $MenuItem4 = GUICtrlCreateMenuItem("Carregar Ctrl+O", $MenuItem1, $SS_CENTER) $MenuItem3 = GUICtrlCreateMenuItem("Salvar Como Shitft+Ctrl+S", $MenuItem1, $SS_CENTER) $Group1 = GUICtrlCreateGroup("", 21, 8, 569, 97, $SS_CENTER) $Input1 = GUICtrlCreateInput("ID COR", 122, 32, 97, 21, $SS_CENTER) $Input2 = GUICtrlCreateInput("REGIÃO", 138, 64, 249, 21, $SS_CENTER) $Input3 = GUICtrlCreateInput("Label", 264, 30, 121, 21, $SS_CENTER) $Label1 = GUICtrlCreateLabel("Label", 232, 32, 30, 17, $SS_CENTER) $Button1 = GUICtrlCreateButton("Capturar Cor", 42, 30, 75, 25, $SS_CENTER) $Button2 = GUICtrlCreateButton("Capturar Região", 42, 62, 91, 25, $SS_CENTER) $Button3 = GUICtrlCreateButton("ADD", 442, 24, 113, 33) $Button5 = GUICtrlCreateButton("Delet", 442, 64, 113, 33) $Group2 = GUICtrlCreateGroup("Editar ID selecionado", 8, 384, 601, 57, $SS_CENTER) $Input7 = GUICtrlCreateInput("ID", 10, 402, 40,21, $SS_CENTER) $Input4 = GUICtrlCreateInput("COR", 51, 402, 121, 21, $SS_CENTER) $Input5 = GUICtrlCreateInput("REGIÃO", 173, 402, 249, 21, $SS_CENTER) $Input6 = GUICtrlCreateInput("LABEL", 423, 402, 121, 21, $SS_CENTER) $Button4 = GUICtrlCreateButton("\/", 544, 400, 30, 25, $SS_CENTER) $Button6 = GUICtrlCreateButton("/\", 574, 400, 30, 25, $SS_CENTER) ; Add column ;~ Global $id = Int(0) $List1 = GUICtrlCreateListView("",5, 120, 601, 253, $SS_CENTER) _GUICtrlListView_AddColumn($List1, "ID",40) _GUICtrlListView_AddColumn($List1, "COR",100) _GUICtrlListView_AddColumn($List1, "COORDENADA",305) _GUICtrlListView_AddColumn($List1, "LABEL",150) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $MenuItem2 MsgBox($MB_SYSTEMMODAL, "ctrl + s", "Nothing Here",1) Case $MenuItem3 MsgBox($MB_SYSTEMMODAL, "shift+ctrl s", "Nothing Here",1) Case $MenuItem4 MsgBox($MB_SYSTEMMODAL, "ctrl + o", "Nothing Here",1) Case $Button1 MsgBox($MB_SYSTEMMODAL, "Capturar cor", "Aperte espaço para capturar a cor") GUICtrlSetData($Input1,MouseColor()) Case $Button2 MsgBox($MB_SYSTEMMODAL, "capturar região", "Aperte espaço para capturar a posição inicial") local $mouse = MouseGetPos() $x_init = $mouse[0] $y_init = $mouse[1] MsgBox($MB_SYSTEMMODAL, "capturar região", "Aperte espaço para capturar a posição final") local $mouse = MouseGetPos() $x_end = $mouse[0] $y_end = $mouse[1] GUICtrlSetData($Input2,$x_init&','&$y_init&' ; '&$x_end&','&$y_end) Case $Button3 _GUICtrlListView_AddItem($List1, _GUICtrlListView_GetItemCount ( $List1 )+1, 1) ; id _GUICtrlListView_AddSubItem($List1, _GUICtrlListView_GetItemCount ( $List1 )-1, GUICtrlRead($Input1), 1, 1) ;cor _GUICtrlListView_AddSubItem($List1, _GUICtrlListView_GetItemCount ( $List1 )-1, GUICtrlRead($Input2), 2, 1) ;coordenada _GUICtrlListView_AddSubItem($List1, _GUICtrlListView_GetItemCount ( $List1 )-1, GUICtrlRead($Input3), 3, 1) ;label ;~ $id= $id + 1 Case $Button4 $Item = _GUICtrlListView_GetSelectedIndices($List1) $Sid = _GUICtrlListView_GetItem($List1, Number($Item),0) $Scor = _GUICtrlListView_GetItem($List1, Number($Item),1) $Scord = _GUICtrlListView_GetItem($List1, Number($Item),2) $Slabel = _GUICtrlListView_GetItem($List1, Number($Item),3) ; get info GUICtrlSetData($Input7,$Sid[3]) GUICtrlSetData($Input4,$Scor[3]) GUICtrlSetData($Input5,$Scord[3]) GUICtrlSetData($Input6,$Slabel[3]) Case $Button5 _GUICtrlListView_DeleteItemsSelected($List1) Case $Button6 ; give back inf if GUICtrlRead($Input7) <> "ID" Then _GUICtrlListView_SetItem($List1, GUICtrlRead($Input4), GUICtrlRead($Input7),1) ;cor _GUICtrlListView_SetItem($List1, GUICtrlRead($Input5), GUICtrlRead($Input7),2) ;coordenada _GUICtrlListView_SetItem($List1, GUICtrlRead($Input6), GUICtrlRead($Input7),3) ;coordenada EndIf EndSwitch WEnd Func MouseColor() local $mouse = MouseGetPos() Return Hex(PixelGetColor($mouse[0],$mouse[1]), 6) EndFunc
  4. 2 points
    Olha vou te dar um exemplo, mais pode ser que você tenha que ajustar para seu proposito.. ; mutleey ; 12/06/2018 ; de uma olhada nas opçoes do ffmpeg (ffmpeg -help) $vidIN = "meu_video.mp4" ; video entrada $imgOUT = "frame.jpg" ; frame saida $outRES = "1024x768" ; resolução da imagem $vidTIME = "00:01:14" ; posição do video reproduzido HH:MM:SS ShellExecute("ffmpeg.exe", '-ss ' & $vidTIME & ' -i ' & $vidIN & ' -t 1 -s '& $outRES & ' -f image2 ' & $imgOUT, @ScriptDir, "open", @SW_HIDE) ffmpeg Download obs: isso é só uma ideia, existe outros softwares que podem extrair frames, basta testar e ajustar..
  5. 1 point
    Olha um exemplo do _IsPressed. Talvez te ajude #include <Misc.au3> #include <MsgBoxConstants.au3> Local $hDLL = DllOpen("user32.dll"), $pressed = False While 1 Select Case _IsPressed("1B", $hDLL) ExitLoop Case _IsPressed("10", $hDLL) if Not $pressed Then ConsoleWrite("Shift pressionado!" & @CRLF) $pressed = True case Else $pressed = False EndSelect WEnd DllClose($hDLL)
  6. 1 point
    #include <MsgBoxConstants.au3> HotKeySet("a", "ShowMessage") While Sleep(100) Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Func ShowMessage() HotKeySet("a") ;Remove a Hotkey durante a execução da função MsgBox($MB_SYSTEMMODAL, "", "Testando.") ;Executa qualquer coisa Sleep(1000) HotKeySet("a", "ShowMessage") ;Adiciona novamente a hotkey EndFunc
  7. 1 point
    Foi sim e eu bem achando que eram os pulsos rápidos que estavam travando o programa e na verdade era o reboot do relé que travava o teclado e por isto ficava indicando que estava pressionado o tempo todo.
  8. 1 point
    Ahhh entendi.... (bost* nenhuma kkkk)
  9. 1 point
    Enfim resolvi o problema e não vai acreditar o que era, faltava o diodo IN4007 prá evitar reboot no relé e não tinha visto pois a placa do teclado e o relé ficam dentro de uma caixinha preta pensei que fosse o programa porque o noteiro que está nela é um BV20 que manda pulsos bem mais rápido que o BL700 e por mandar mais rápido os reboots são quase juntos por isto acontecia nele e não acontecia com o BL700.
  10. 1 point
    Legal Belini. Não me toquei da linguagem, estou tão acostumado com inglês que as vezes tenho que me policiar quando indico algo. Obrigado pela lembrança. E que bom que vc achou um outro site/app, que aliás parece muito bom. Comentei do Lotto Sorcerer, pois quando brinquei com análise combinatória uns tempos atrás, eu utilizei ele como base para conferência dos meus scripts. E achei bem legal o que ele fazia, porém era ainda na versão 6. Já está na 9.2. Deve ter mudado um monte! Muttley, eu acredito que ninguém conheça toda a potencialidade de nenhuma linguagem, até porque são muitos comandos e funções. E no AutoIt então? Sem falar nas trocentas funções de terceiros que existem aqui (fora outros locais): https://www.autoitscript.com/wiki/User_Defined_Functions
  11. 1 point
    @manimal achei complicado este derador que vc indicou e também não tem opção de linguagem nele prá colocar em português aí pesquisando encontrei um site que faz o que eu quero mas na versão gartuita gera no máximo 99 combinações prá gerar mais que isto tem que ser assinante veja: https://www.mestredaloteria.com/megasena/gerador.php
  12. 1 point
    _ArrayPermute, _ArrayCombinations... cada vez me surpreendo mais com autoit, quando acho que sei 0,5% da linguagem vcs veem com mais funções. kkkkkk
  13. 1 point
    Olá Everton. Como assim "definida formalmente"? O nome da linguagem é AutoIt, simples assim.
  14. 1 point
    Olá Manimal, poxa uma pena mesmo.. uma compilação efetiva com AutoIT seria o ideial, resolveria a questão da velocidade e dos decompiladores, mais infelizmente com certeza isso não irá acontecer.
  15. 1 point
    Manimal faço das suas palavras as minhas! o AutoIT hoje em dia é sem duvida uma excepcional ferramenta seja pra automação, criação de pequenos e complexos programas.. mas o que na minha opinião poderia ser melhorado é a velocidade te interpretação do código, ou a utilização de Multithreading que já resolveria esta questão também..
  16. 1 point
    Olá Odaylton. Realmente o AutoIt Debugger é muito interessante. Os conceitos de projeto, trabalhar com vários fontes, um debugger integrado à IDE fazem parte da maioria dos ambientes de programação de linguagens mais conhecidas por aí. O fato de ter sido descontinuado não é problema, pois ainda funciona perfeitamente na atual versão do AutoIt. Futuramente? Vamos ver... Minha opinião pessoal é que apesar dos recursos, não me adaptei com ele, mas isto é uma questão de gosto mesmo. Fico um pouco chateado com os desenvolvedores originais, que são fantásticos, mas tem uma visão incorreta de sua própria criação! O AutoIt já foi uma mera ferramenta de automação ou de produção de pequenos scripts e tal, mas hoje sua complexidade e abundância de recursos exige um tratamento bem mais profissional, com uma IDE apropriada, compilação efetiva (para eliminar os problemas de direitos autorais), uma interface para produção de janelas e relatórios, etc... Hoje o AutoIt é uma linguagem madura, sem nada a dever para as outras, mas está sendo mantida em segundo plano por conta desta visão tacanha. É uma pena.
  17. 1 point
    Controle da porta paralela 12 pinos PP-CONTROL
  18. 1 point
    Precisei fazer um programa de backup que atendesse as minhas necessidades e quero compartilhar com vocês. #RequireAdmin #region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=.\Bk.ico #AutoIt3Wrapper_Compression=0 #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_Res_Comment=Função: Aplicativo para fazer backup #AutoIt3Wrapper_Res_Description=Autoit3 3.3.9.4 #AutoIt3Wrapper_Res_Fileversion=1.1.10.18 #AutoIt3Wrapper_Res_LegalCopyright=Feito por Belini #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #endregion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs ------------------------------------------------- Title: Backup Personal Objective: Fazer backup de arquivos e pastas Author: Belini (Brazil) Autoit Version: 3.3.9.4 Version: 1.0.10.18 Forum: http://www.autoitbrasil.com/forum #ce ------------------------------------------------- #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include "_UskinLibrary.au3" #include <GuiListView.au3> #include "Skin_03.au3" #include <File.au3> Global $iFix_Col = 1, $Dir_backup, $Input, $Listv, $Listv_Files, $Check, $lab[3] Global $nMsg, $proceed = 1, $item_num, $But[8], $item_text[4], $mantidos = 0, $atualizados = 0 _Arq_ini() _Uskin_LoadDLL() _USkin_Init(_Skin_03(True)); Skin usada _Gui_backup() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $But[1] _Add_Line() Case $But[2] _Del_line() Case $But[3] _Opt_Dir() Case $But[4] _Opt_Backup() Case $But[5] _Dir_Backup() Case $But[6] $proceed = 0 Case $But[7] _Start_backup() Case $Check _Opt_Finalize() EndSwitch WEnd Func _Add_Line() Local $dir = FileSelectFolder("Procurando pasta.", "") If IniRead(@ScriptDir & "\Config.ini", "PASTAS", $dir, "") = "" Then GUICtrlCreateListViewItem($dir & "|Incluir Subpastas" & "|Sim", $Listv) IniWrite(@ScriptDir & "\Config.ini", "PASTAS", $dir, "|Incluir Subpastas" & "|Sim") Else MsgBox(4096, "", "Este diretório já foi escolhido!", 3) EndIf EndFunc ;==>_Add_Line Func _Arq_ini() If Not FileExists(@ScriptDir & "\Config.ini") Then _ FileWrite(@ScriptDir & "\Config.ini", "[BACKUP]" & @CRLF & "endereço= " & @CRLF & @CRLF & "[DESLIGAR]" & @CRLF & "opção=0" & @CRLF & @CRLF & "[PASTAS]") EndFunc ;==>_Arq_ini Func _Backup_Files($path = "") Local $searh_files, $i $searh_files = _FileListToArray($path, "*.*", 1) If Not @error Then For $i = 1 To $searh_files[0] If GUIGetMsg() = $But[6] Then $proceed = 0 If $proceed = 0 Then ExitLoop _Compare_files($path & "\" & $searh_files[$i]) Next EndIf EndFunc ;==>_Backup_Files Func _Backup_Full($path = "", $counter = 0) $counter = 0 $path &= '\' Local $file, $searh_files $searh_files = FileFindFirstFile($path & '*') If $searh_files = -1 Then Return '' While 1 If GUIGetMsg() = $But[6] Then $proceed = 0 $file = FileFindNextFile($searh_files) If @error Or $proceed = 0 Then ExitLoop If @extended Then If $counter >= 10 Then ContinueLoop _Backup_Full($path & $file, $counter + 1) Else _Compare_files($path & $file) EndIf WEnd FileClose($searh_files) EndFunc ;==>_Backup_Full Func _Compare_files($file = "") Local $File_backup, $item, $folder $item = StringTrimLeft($file, StringInStr($file, "\", 1, -1)) $folder = StringTrimLeft($file, StringInStr($file, "\", 1, -2)) $folder = StringMid($folder, 1, StringInStr($folder, "\", 1, -1) -1 ) $File_backup = StringReplace($file, StringMid($file, 1, 2), $Dir_backup, 0, 2) $file = FileGetShortName($file) $File_backup = FileGetShortName($File_backup) _GUICtrlListView_SetItemText($Listv, 0, $folder, 2) _GUICtrlListView_SetItemText($Listv, 0, $item, 1) If FileGetTime($file, 0, 1) > FileGetTime($File_backup, 0, 1) Then $atualizados += 1 FileCopy($file, $File_backup, 9) GUICtrlSetData($lab[2], "Atualizados: " & $atualizados) Else $mantidos += 1 GUICtrlSetData($lab[1], "Mantidos: " & $mantidos) EndIf EndFunc ;==>_Compare_files Func _Del_line() $item_num = _GUICtrlListView_GetSelectedIndices(GUICtrlGetHandle($Listv)) $item_text[1] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num)) _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($Listv)) IniDelete(@ScriptDir & "\Config.ini", "PASTAS", $item_text[1]) EndFunc ;==>_Del_line Func _Dir_Backup() $Dir_backup = FileSelectFolder("Procurando pasta.", "", 1) ;GUICtrlSetState($Input, $GUI_FOCUS) GUICtrlSetData($Input, $Dir_backup) IniWrite(@ScriptDir & "\Config.ini", "BACKUP", "endereço", $Dir_backup) EndFunc ;==>_Dir_Backup Func _Gui_backup() GUICreate("Backup Personal - Feito Por Belini", 660, 679, -1, -1) GUICtrlCreateGroup("Diretório para backup ", 352, 11, 290, 69) $But[1] = GUICtrlCreateButton("Incluir endereço", 15, 16, 140, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $But[2] = GUICtrlCreateButton("Excluir endereço", 15, 56, 140, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $But[3] = GUICtrlCreateButton("Arquivos / Subpastas", 170, 16, 170, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $But[4] = GUICtrlCreateButton("Marcar / Desmarcar", 170, 56, 170, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $But[5] = GUICtrlCreateButton("Procurar", 553, 36, 75, 25) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $But[6] = GUICtrlCreateButton("Cancelar", 514, 631, 130, 33) GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif") $But[7] = GUICtrlCreateButton("Iniciar", 390, 631, 110, 33) GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif") $Input = GUICtrlCreateInput(IniRead(@ScriptDir & "\Config.ini", "BACKUP", "endereço", ""), 368, 38, 183, 21) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $Check = GUICtrlCreateCheckbox("Desligar o computador quando finalizar a tarefa.", 15, 647, 352, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $lab[1] = GUICtrlCreateLabel("Mantidos: 0", 32, 623, 175, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $lab[2] = GUICtrlCreateLabel("Atualizados: 0", 210, 623, 175, 25) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Listv = GUICtrlCreateListView("Endereço das Pastas|Listar Arquivos|Fazer Backup", 16, 96, 627, 520, _ BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x000000) _GUICtrlListView_SetColumnWidth($Listv, 0, 395) _GUICtrlListView_SetColumnWidth($Listv, 1, 120) _GUICtrlListView_SetColumnWidth($Listv, 2, 105) _GUICtrlListView_JustifyColumn($Listv, 1, 2) _GUICtrlListView_JustifyColumn($Listv, 2, 2) GUISetState(@SW_SHOW) Local $aArray = IniReadSection(@ScriptDir & "\Config.ini", "PASTAS") _ArraySort($aArray) If Not @error Then For $i = 1 To $aArray[0][0] If FileExists($aArray[$i][0]) Then GUICtrlCreateListViewItem(StringReplace($aArray[$i][0] & $aArray[$i][1], "=|", "|"), $Listv) Else GUICtrlCreateListViewItem($aArray[$i][0] & "|Pasta Inexistente|Não", $Listv) EndIf Next EndIf If IniRead(@ScriptDir & "\Config.ini", "DESLIGAR", "opção", "1") = "1" Then GUICtrlSetState($Check, $GUI_CHECKED) EndFunc ;==>_Gui_backup Func _Opt_Dir() $item_num = _GUICtrlListView_GetSelectedIndices(GUICtrlGetHandle($Listv)) $item_text[1] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num), 1) $item_text[2] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num), 2) Switch $item_text[1] Case "Apenas Diretório" _GUICtrlListView_SetItemText($Listv, $item_num, "Incluir Subpastas", 1) IniWrite(@ScriptDir & "\Config.ini", "PASTAS", _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num)), "|Incluir Subpastas|" & $item_text[2]) Case "Incluir Subpastas" _GUICtrlListView_SetItemText($Listv, $item_num, "Apenas Diretório", 1) IniWrite(@ScriptDir & "\Config.ini", "PASTAS", _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num)), "|Apenas Diretório|" & $item_text[2]) Case "Pasta Inexistente" MsgBox(4096, "", "Diretório inexistente!", 3) EndSwitch EndFunc ;==>_Opt_Dir Func _Opt_Backup() $item_num = _GUICtrlListView_GetSelectedIndices(GUICtrlGetHandle($Listv)) $item_text[1] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num), 1) $item_text[2] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num), 2) If $item_text[1] <> "Pasta Inexistente" Then Switch $item_text[2] Case "Sim" _GUICtrlListView_SetItemText($Listv, $item_num, "Não", 2) IniWrite(@ScriptDir & "\Config.ini", "PASTAS", _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num)), "|" & $item_text[1] & "|Não") Case "Não" _GUICtrlListView_SetItemText($Listv, $item_num, "Sim", 2) IniWrite(@ScriptDir & "\Config.ini", "PASTAS", _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), Number($item_num)), "|" & $item_text[1] & "|Sim") EndSwitch Else MsgBox(4096, "", "Diretório inexistente!", 3) EndIf EndFunc ;==>_Opt_Backup Func _Opt_Finalize() If GUICtrlRead($Check) = 1 Then IniWrite(@ScriptDir & "\Config.ini", "DESLIGAR", "opção", "1") Else IniWrite(@ScriptDir & "\Config.ini", "DESLIGAR", "opção", "0") EndIf EndFunc ;==>_Opt_Finalize Func _Start_backup() Local $itens = _GUICtrlListView_GetItemCount($Listv) If $itens > 0 Then $Dir_backup = GUICtrlRead($Input) If FileExists($Dir_backup) Then For $i = 1 To $itens If $proceed = 0 Then ExitLoop $item_text[1] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), 0, 0) $item_text[2] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), 0, 1) $item_text[3] = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listv), 0, 2) If $item_text[2] <> "Pasta Inexistente" And $item_text[3] = "Sim" Then If $item_text[2] = "Incluir Subpastas" Then _Backup_Full($item_text[1], 0) Else _Backup_Files($item_text[1]) EndIf EndIf If $proceed = 1 Then _GUICtrlListView_DeleteItem($Listv, 0) Next If $proceed = 1 Then If GUICtrlRead($Check) = 1 Then Shutdown(1) Else GUICtrlSetState($Listv_Files, $GUI_HIDE) MsgBox(4096, "", "Tarefa Finalizada!") Exit EndIf Else $proceed = 1 _GUICtrlListView_SetItemText($Listv, 0, $item_text[2], 1) _GUICtrlListView_SetItemText($Listv, 0, $item_text[3], 2) EndIf Else MsgBox(4096, "", "Diretório de backup não existe!", 3) EndIf EndIf EndFunc ;==>_Start_backup Baixar arquivos: https://mega.nz/#!cdNw0CaQ!q4r5KYyOXGb-a9dVJeZLz8Le9Z29UobQuhDtYeVZl5g
  19. 1 point
    Use: Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc") Func _ErrFunc($oErr)     ConsoleWrite("COM Error, ScriptLine(" & $oErr.scriptline & ") : Number 0x" & Hex($oErr.number, 8) & " - " & $oErr.windescription & @CRLF) EndFunc   ;==>_ErrFunc
  20. 1 point
    depois do -RD ou -L segundo a mensagem que aparece você precisa indicar o arquivo "log" ex: UsbDriveInfo.exe -L:resultado.txt UsbDriveInfo.exe -RD:log.log
  21. 1 point
    Olá Bllee. Local $sTexto = "" For $nConta = 1 to 5 For $nLetra = Asc("A") to Asc("Z") ConsoleWrite($sTexto & Chr($nLetra) & @CRLF) Next $sTexto &= Chr(Asc("@") + $nConta) Next
  22. 1 point
    ; mutleey ; 14/07/2018 Local $chars[6] SplashTextOn("msg", "...", 200, 50, -1, -1, 1, "", 16) For $ii = 0 To 5 For $jj = 97 To 122 ; a~z $chars[$ii] = Chr($jj) ControlSetText("msg", "", "Static1", $chars[5] & $chars[4] & $chars[3] & $chars[2] & $chars[1] & $chars[0]) Sleep(150) ; pausa Next Next SplashOff()
  23. 1 point
    Opa Belini. Aqui funcionou perfeitamente, Win 7 64. Já testou com #RequireAdmin?
  24. 1 point
    Transformando em binário e lendo com _GDIPlus_BitmapCreateFromMemory ou usando o fileInstall e jogando para o diretório temporário "@temp"
  25. 1 point
    Aquele exemplo que eu te passei já tem isso tudo, é só você usar label ao invés de botão.
  26. 1 point
    ListBox tem pouca opção e neste caso vc terá que criar um ListView. #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <GuiListView.au3> #include <File.au3> Global $diretorio = "", $foto = 1, $FileList, $max = 0, $item_atual #region ### START Koda GUI section ### Form=C:\Users\michel\Desktop\menu programadores\Source\Form1.kxf $Form1 = GUICreate("Boot Ecu", 914, 636, 180, 131) $List = GUICtrlCreateListView("LISTA", 776, 40, 137, 552, BitOR($LVS_NOCOLUMNHEADER, $LVS_SINGLESEL)) _GUICtrlListView_SetColumnWidth($List, 0, 133) $Pic1 = GUICtrlCreatePic("", 0, 40, 761, 561, $SS_CENTERIMAGE) $Dir = GUICtrlCreateButton("Diretorio", 776, 0, 137, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFF00) $Up = GUICtrlCreateButton("Up", 776, 592, 73, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $down = GUICtrlCreateButton("Dw", 848, 592, 65, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $Button2 = GUICtrlCreateButton("", 760, 40, 17, 561) GUICtrlSetState(-1, $GUI_DISABLE) $bar = GUICtrlCreateButton("Sem imagens", 0, 0, 777, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetState(-1, $GUI_DISABLE) $Button4 = GUICtrlCreateButton("Total de Imagens = 0", 0, 600, 777, 30) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetState(-1, $GUI_DISABLE) GUISetState(@SW_SHOW) #endregion ### END Koda GUI section ### ;Define_pasta("Diretório onde estão suas fotos"); ==> Habilite para não precisar usar o botão diretório While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $down If $max > 0 Then $foto += 1 Troca_imagem($foto) If $foto >= $max Then $foto = 1 EndIf Case $Up If $max > 0 Then $foto -= 1 Troca_imagem($foto) If $foto <= 0 Then $foto = $max EndIf Case $Dir $pasta = FileSelectFolder("escolha uma pasta", "") Define_pasta($pasta) Case $GUI_EVENT_CLOSE Exit EndSwitch $item_atual = _GUICtrlListView_GetSelectedIndices($List) If $item_atual <> ($foto) and $max > 0 Then $foto = $item_atual GUICtrlSetImage($Pic1, $diretorio & "\" & $FileList[$item_atual + 1]) ControlFocus("", "", $List) EndIf WEnd Func Define_pasta($pasta = "") $diretorio = $pasta $FileList = _FileListToArray($diretorio, "*.JPG", 1) If Not @error Then $max = $FileList[0] For $i = 1 To $max _GUICtrlListView_AddItem($List, $FileList[$i], $i - 1) Next GUICtrlSetData($Button4, "Total de Imagens = " & $max) GUICtrlSetData($bar, "Imagem Atual: " & $diretorio & "\" & $FileList[1]) GUICtrlSetImage($Pic1, $diretorio & "\" & $FileList[1]) Else $max = 0 EndIf _GUICtrlListView_SetItemSelected($List, 0) ControlFocus("", "", $List) EndFunc ;==>Define_pasta Func Troca_imagem($imagem = '') If $imagem = $max Then $imagem = 0 If $imagem = -1 Then $imagem = $max - 1 GUICtrlSetImage($Pic1, $diretorio & "\" & $FileList[$imagem + 1]) GUICtrlSetData($bar, "Imagem Atual: " & $diretorio & "\" & $FileList[$imagem]) _GUICtrlListView_SetItemSelected($List, $imagem) ControlFocus("", "", $List) EndFunc ;==>Troca_imagem
  27. 1 point
    @michel almeida não entendi muito bem como quer fazer o visualizador funcionar mas fiz algumas mudanças que depois vc pode alterar para o seu propósito! #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <File.au3> Global $diretorio = "", $foto = 1, $FileList, $max = 0 #region ### START Koda GUI section ### Form=C:\Users\michel\Desktop\menu programadores\Source\Form1.kxf $Form1 = GUICreate("Boot Ecu", 914, 636, 180, 131) $List = GUICtrlCreateList("", 776, 40, 137, 552) $Pic1 = GUICtrlCreatePic("", 0, 40, 761, 561, $SS_CENTERIMAGE) $Dir = GUICtrlCreateButton("Diretorio", 776, 0, 137, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFF00) $Up = GUICtrlCreateButton("Up", 776, 592, 73, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $down = GUICtrlCreateButton("Dw", 848, 592, 65, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") $Button2 = GUICtrlCreateButton("", 760, 40, 17, 561) GUICtrlSetState(-1, $GUI_DISABLE) $bar = GUICtrlCreateButton("Sem imagens", 0, 0, 777, 41) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetState(-1, $GUI_DISABLE) $Button4 = GUICtrlCreateButton("Total de Imagens = 0", 0, 600, 777, 30) GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif") GUICtrlSetState(-1, $GUI_DISABLE) GUISetState(@SW_SHOW) #endregion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $down If $max > 0 Then $foto += 1 If $foto >= $max Then $foto = 1 gui($foto) EndIf Case $Up If $max > 0 Then $foto -= 1 If $foto <= 0 Then $foto = $max gui($foto) EndIf Case $Dir $diretorio = FileSelectFolder("escolha uma pasta", "") Local $FileList = _FileListToArray($diretorio, "*.JPG", 1) If Not @error Then $max = $FileList[0] For $i = 1 To $max Step 1 GUICtrlSetData($List, $FileList[$i]) Next GUICtrlSetData($Button4, "Total de Imagens = " & $max) GUICtrlSetData($bar, "Imagem Atual: " & $diretorio & "\" & $FileList[1]) GUICtrlSetImage($Pic1, $diretorio & "\" & $FileList[1]) Else $max = 0 EndIf Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func gui($foto = '') GUICtrlSetImage($Pic1, $diretorio & "\" & $FileList[$foto]) GUICtrlSetData($bar, "Imagem Atual: " & $diretorio & "\" & $FileList[$foto]) EndFunc ;==>gui
  28. 1 point
    se for x64 RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", "programa.exe") x86 RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", "programa.exe")
  29. 1 point
    A lista pode ser criada com uma Array, você poderá criar quantas listas quiser e na imagem abaixo em "Informações" na linha Pasta Selecionada você pode selecionar as listas apertando F6 e F7. Eu detalhei as variáveis principais e dividi cada sistema em uma include diferente. Criei também um SubMenu que cria uma listagem em cima da atual, para abrir o subMenu é só pressionar F4 ou F8. Programei a lista principal para salvar o item selecionado caso você troque de item Ex: Seleciona o item 100 da "lista 1" e aperta F7 para ir na "lista 2", quando você apertar F6 para voltar na "lista 1" ela estará no item 100. Cada lista salva sua posição selecionada. - Preciso de dicas para interface gráfica (Sdl é bom, mas não achei nenhuma UDF eficaz que coloque Textos e Imagens na janela, se alguém souber). - Ao abrir o programa você terá de selecionar pelo menos uma pasta para criar uma lista. - Eu deixei o projeto aberto no GitHub para colaboradores. https://github.com/pedrowarlock/FrontEnd
  30. 1 point
    @LuigiExcelente sugestão de dividir os scripts! E como ele comentou existem vários maneiras de conversar de fazer um script conversar com outro, são os chamados IPC (Inter-Process Communication). São procedimentos que utilizam de diversas técnicas para implementar a comunicação entre programas diferentes, ou no nosso caso, entre scripts diferentes. A ideia é que nosso programa que tem um conjunto de variáveis próprias e seria muito bom que fosse possível que algumas variáveis pudessem ser "compartilhadas" com outro programa. Porém o compartilhamento de espaço de memória (shared memory management) apesar de possível não é recomendado, inclusive no Windows existe uma camada de proteção para evitar isto chamada DEP (Data Prevention Execution). Explicar o motivo e como fazer (ou porque evitar) tomaria tempo e não é o objetivo do tópico. Resta saber que existem vários meios de fazer isso, sendo uma das mais comuns a utilização de Pipes, que inclusive tem funções nativas no AutoIt (ver Help, User Defined Functions, NamedPipes Management). Outro modo de fazer isso é usando MailSlot, com excelentes funções da Trancexx. Outras maneiras envolvem compartilhamento de arquivos ou mesmo do próprio registro, ou através de protocolo de rede (TCP) e assim por diante. É uma área ampla e interessante. Para saber mais pesquise IPC e AutoIt, existem vários tipos e exemplos.
  31. 1 point
    @Pedro Pinheiro, o programa acima foi feito em AutoIt? Show de bola! Parabéns! Lá vou eu dar uma ideia maluca... @Manimal tem razão, AutoIt não é, e não será multi-thread... Mas já que você precisa "ler" as teclas de algum lugar... Porque não usa um script separado para fazer isso? Exemplo: Em vez de querer tudo em um único script, divide as funções. Um script apenas lê as teclas, o outros renderiza os gráficos, e quando precisar saber o estado das teclas, ele pega as informações do primeiro, que só lê. Ah, mas e como fazer um script conversar com outro? PIPEs, TCP/IP Como disse, uma sugestão doida.
  32. 1 point
    @mutleey Que tal desvincular a função de dentro do loop? Eu não tenho ideia de como o AutoIt resolve internamente o uso do AdlibRegister, mas amontar todas as funções dentro do loop pode ter um momento que as coisas podem sair do controle... Algumas demora mais do que o esperado, e essa demora causa um efeito cascata, será que não? Então, a proposta do AdlibRegister é justamente essa, desafogar o loop. Veja este exemplo. ;~ #AutoIt3Wrapper_AU3Check_Parameters= -q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ;~ #Tidy_Parameters=/sf #include-once #include <SliderConstants.au3> #include <Array.au3> #include <GUIConstantsEx.au3> OnAutoItExitRegister("OnExit") Opt("GUIOnEventMode", 1) Opt("GUIEventOptions", 1) Opt("MustDeclareVars", 1) Global $aGuiSize[2] = [800, 600] Global $sGuiTitle = "GuiTitle" Global $hGui Global $aSlider[4], $aVal[4] = [100, 100, 100, 100], $aMov[4] = [-1, -1, -1, -1] $hGui = GUICreate($sGuiTitle, $aGuiSize[0], $aGuiSize[1]) GUISetOnEvent($GUI_EVENT_CLOSE, "Quit") $aSlider[0] = GUICtrlCreateSlider(10, 10, 20, 200, $TBS_VERT + $TBS_AUTOTICKS) GUICtrlSetData($aSlider[0], $aVal[0]) AdlibRegister("Slider0", 100) ; executa a função Slider0 a cada 100 mili segundos $aSlider[1] = GUICtrlCreateSlider(50, 10, 20, 200, $TBS_VERT + $TBS_AUTOTICKS) GUICtrlSetData($aSlider[1], $aVal[1]) AdlibRegister("Slider1", 200) ; executa a função Slider1 a cada 200 mili segundos $aSlider[2] = GUICtrlCreateSlider(90, 10, 20, 200, $TBS_VERT + $TBS_AUTOTICKS) GUICtrlSetData($aSlider[2], $aVal[2]) AdlibRegister("Slider2", 300) ; executa a função Slider2 a cada 300 mili segundos $aSlider[3] = GUICtrlCreateSlider(140, 10, 20, 200, $TBS_VERT + $TBS_AUTOTICKS) GUICtrlSetData($aSlider[3], $aVal[3]) AdlibRegister("Slider3", 400) ; executa a função Slider3 a cada 400 mili segundos GUISetState(@SW_SHOW, $hGui) While Sleep(25) WEnd Func OnExit() ; antes de encerrar o script, eu cancelo todos os adlib, é uma boa prática ; pois como o adlib não respeita um loop, o Exit pode ainda não ter sido concluído ; e o AutoIt pode executar alguma função do adlib AdlibUnRegister("Slider0") AdlibUnRegister("Slider1") AdlibUnRegister("Slider2") AdlibUnRegister("Slider3") GUISetState($hGui, @SW_HIDE) GUIDelete($hGui) EndFunc ;==>OnExit Func Quit() Exit EndFunc ;==>Quit Func Slider0() $aVal[0] = GUICtrlRead($aSlider[0]) + $aMov[0] If $aVal[0] <= 0 Or $aVal[0] >= 100 Then $aMov[0] *= -1 GUICtrlSetData($aSlider[0], $aVal[0]) EndFunc ;==>Slider0 Func Slider1() $aVal[1] = GUICtrlRead($aSlider[1]) + $aMov[1] If $aVal[1] <= 0 Or $aVal[1] >= 100 Then $aMov[1] *= -1 GUICtrlSetData($aSlider[1], $aVal[1]) EndFunc ;==>Slider1 Func Slider2() $aVal[2] = GUICtrlRead($aSlider[2]) + $aMov[2] If $aVal[2] <= 0 Or $aVal[2] >= 100 Then $aMov[2] *= -1 GUICtrlSetData($aSlider[2], $aVal[2]) EndFunc ;==>Slider2 Func Slider3() $aVal[3] = GUICtrlRead($aSlider[3]) + $aMov[3] If $aVal[3] <= 0 Or $aVal[3] >= 100 Then $aMov[3] *= -1 GUICtrlSetData($aSlider[3], $aVal[3]) EndFunc ;==>Slider3
  33. 1 point
    Deu certo desta forma deu certo @mutleey, obrigado pela ajuda!
  34. 1 point
    Excelente pergunta Mutleey. Vai levar medalha por essa ;) Eu pensei que o Belini queria um print pois havia uma função no soft que o cliente fazia o print (user request), mas agora pelo papo deu a entender que o print é apenas para preencher o espaço (ou buraco) entre um vídeo e outro, isso? Se for este o caso, porque não deixar uma série de imagens prontas e daí randomizar entre elas? O efeito é o mesmo. É o caso do banner, só que iria mudar a imagem. Na verdade, os clientes não ligam muito para isso. Quem se liga nessa viagem somos nós! Eu apanhei muito (e ainda apanho) pra não perder muito tempo viajando em um detalhe do soft (perfeccionismo) que muitas vezes o cliente nem nota. Sabe aquele "efeito arredondado" nas bordas da janela que vc movimentou meio mundo pra fazer? Pois é o ciente nem sabia que estava ali ;( O problema não é fazer o efeito mas o tempo dispendido nessa tarefa, que poderia ser melhor aproveitado desenvolvendo novas "features" ou melhorando o código em algo que realmente faça diferença. Eu ainda faço isso, mas tento me policiar para reduzir o tempo gasto nestas coisas! Não que não sejam legais, só tem que avaliar o tempo x efeito! Se dependesse só de mim, eu ficava polindo cada pixel da interface ;)
  35. 1 point
    olha se resolve... ; mutleey ; 09/06/2018 ; print screen tela cheia PrintScreen('Screen', 'fullscreen.jpg', 100) ; print screen parcial PrintScreen('Region', 'region.bmp', 100, 5, 5, 300, 200) Func PrintScreen($Type, $sFile, $Quality, $Left = "", $Top = "", $Width = "", $Height = "") Switch $Type Case "Screen" DllCall("wprint.dll", "int:cdecl", "CaptureScreen", "str", $sFile, "int", $Quality) Case "Region" DllCall("wprint.dll", "int:cdecl", "CaptureRegion", "str", $sFile, "int", $Left, "int", $Top, "int", $Width, "int", $Height, "int", $Quality) EndSwitch EndFunc DLL em anexo. wprint.zip
  36. 1 point
    Apresento esta UDF chamada BackEffect, (back = para trás, effect = efeito). Quando você cria um controle* com esta UDF é possível você adicionar um efeito para este controle. Que tipo de efeito? Ao deixar o mouse sobre o controle, você vai perceber uma caixa que irá mudando gradualmente da dor do background da janela para o verde. Posso personalizar a cor? Sim. O padrão da UDF é o verde, mas é possível definir qualquer outra cor. Posso personalizar o tamanho da borda do efeito? Sim. O default é 4. Como funciona? Quando você cria um controle* em uma GUI** a UDF lê o tamanho (largura e altura) do controle e cria um GUICtrlCreateLabel com um tamanho maior do que o seu controle (4 pontos maior, por default), e depois, posiciona esse controle por trás do controle principal. E no momento que o mouse é posicionado sobre o seu controle principal, a UDF vai suavemente alterando a cor GUICtrlCreateLabel posicionada atrás do controle até a cor definida (verde, por default). Ao retirar o mouse do controle principal, o processo inverso é realizado, isto é, a cor do GUICtrlCreateLabel vai suavemente do verde até a cor do background da GUI. Requisitos: A GUI criada necessita ter $WS_EX_COMPOSITED em seu $sStyle. Restrições: $WS_EX_COMPOSITED não funciona com GDIPLus+. *Controles: GUICtrlCreateLabel GUICtrlCreateButton GUICtrlCreateRadio GUICtrlCreateGroup GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateInput GUICtrlCreateList *GUI: Graphic User Interface ou simplesmente janela https://github.com/chechelaky/AutoIt/tree/master/BackEffect
  37. 1 point
    Muito bom odaylton, seja bem vindo a comunidade e espero que traga novas soluções para engrandecer o conhecimento de todos. Não tenho muito conhecimento de AutoIt, mas vou dar uma olhada no material que colocou e aprender um pouco mais. Fico feliz que tenha encontrado esse fórum, agora poderá contribuir melhor.
  38. 1 point
    Olha, isso não responde a sua pergunta, mas como não encontrei outra forma, vou deixar aqui como alternativa, até encontrarmos uma maneira melhor #include <Array.au3> ; Only required to display the arrays #include <File.au3> #include <MsgBoxConstants.au3> Example() Func Example() Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1)),$sDrive = "", $sDir = "", $sFileName = "", $sExtension = "",$aPathSplit, $aArray If StringRight($sAutoItDir, 5) = "beta\" Then $sAutoItDir = StringTrimRight($sAutoItDir, 5) EndIf ConsoleWrite($sAutoItDir & @CRLF) $aArray = _FileListToArrayRec($sAutoItDir, "*.au3", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_NOPATH) For $vElement In $aArray $aPathSplit = _PathSplit($vElement, $sDrive, $sDir, $sFileName, $sExtension) ConsoleWrite($sFileName & @CRLF);somente o nome do arquivo Next EndFunc Obs: faz uns anos ai que trabalho com autoit então estou bem por fora dos codes kkkk
×