Jump to content

Luigi

Administradores (Adm)
  • Content count

    697
  • Joined

  • Last visited

  • Days Won

    143

Luigi last won the day on October 20 2019

Luigi had the most liked content!

Community Reputation

316 Excelente!

About Luigi

  • Rank
    Administrador
  • Birthday 02/08/1974

Profile Information

  • Gender
    Male
  • Location
    CWB
  1. @Belini, dá um olhada... Achei essa UDF e fiz uns testes... Alterne o comentário das linhas 12 e 13. teste_com_gif.7z Agora eu vi que postei a mesma UDF que o @Manimal postou... Tem realmente que ser um GIF? Não pode ser um PNG com várias imagens? Como se fosse um GIF?
  2. Olá, desculpe cair na conversa de paraquedas... @Belini Rotação de imagem e redimensionamento, eu consegui mas sempre usando a função _GDIPlus_MatrixCreate() Até hoje acho que não entendi direito, e de tanto tentar, até consegui alguns efeitos interessantes. Veja este outro exemplo com a função _GDIPlus_GraphicsScaleTransform() Outra opção, é usar o IrrLicht, faz o cão com GIF, GIF animado... Mas são dois conjuntos de funções: AutoIT (com botões tradicionais) e IrrLicht (com botões gráficos).
  3. @Manimal, então... Eu concordo com você, resolver algo, usando poucas linhas de código ou um volume pequeno no SQLite é uma coisa... Mas, como o @Belini disse, são alguns milhões, mas tenho a impressão de que tudo ficará meio lento.
  4. BackEffect

    @Rodrigo Chaves Neto, valeu! Eu sei que em alguns campos o efeito não é o esperado, pois na verdade, o efeito de background é um GuiCtrlCreateLabel "colorido" que fica por trás dos controles (GuiCtrlCreateButton, GuiCtrlCreateInput, etc). É como se fosse um CSS, com um elemento por cima do outro, e o debaixo, vai "perdendo" a cor, até se misturar com o fundo. Acredito nem todos os campos de entrada de dados foram não construídos com o mesmo rigor. Por isso, as vezes tem algum efeito rebelde... Ou foi falta de conhecimento da minha parte mesmo. 8D
  5. Salve @Belini "Eu acho", que por uma questão de performance, quando você tiver certeza de que o dado é sempre integer, você pode deixá-lo como está ou tratar com Number() Local $sql = "UPDATE Dados set Numeros= " & Number($sorteado) & " where Numeros= " & _SQLite_FastEscape($trocar) ou Local $sql = "UPDATE Dados set Numeros= " & $sorteado & " where Numeros= " & _SQLite_FastEscape($trocar) Se você não tiver certeza do que vem pela frente, melhor usar o _SQLite_FastEscape Não querendo complicar... Mas olhando a sua query, achei mais fácil usar expressão regular pra fazer a pesquisa: Local $sql = "SELECT * FROM dados WHERE numeros REGEXP 'PM\-S2'" Desculpe, posso perguntar o que é o PM-S? e o PM-Q?
  6. @Belini, Nunca trabalhei com banco de dados por isto preciso de dicas para criar um banco de dados de aproximadamente 2 milhões de linhas Segundo página do desenvolvedor, SQLite manipula arquivos de até 140 terabytes... Então acho que você tem que colocar mais alguns milhões de linhas para começar a esbarrar no limite técnico. Veja: https://www.sqlite.org/whentouse.html @ Very large datasets e depois fazer a leitura dele linha por linha Beleza, é possível! Mas oriento a não fazer um for...next de 1 até o fim da lista... Vai ficar lento demais! Sugiro fazer por blocos, tipo, de 300 em 300 linhas por vez A mesma coisa vale para inserção de dados... Ler um arquivo inteiro, de não sei quantos mbytes ou gbytes e inserir e um for...next, vai ficar muito lento... Vai por blocos, monta uma query só... que insere um bloco de linhas, exemplo: Local $aInsert[1] _ArrayAdd($aInsert, "INSERT INTO matematica(numeros)VALUES(" & Random(0, 9, 1) & ");") _ArrayAdd($aInsert, "INSERT INTO matematica(numeros)VALUES(" & Random(0, 9, 1) & ");") _ArrayAdd($aInsert, "INSERT INTO matematica(numeros)VALUES(" & Random(0, 9, 1) & ");") _ArrayAdd($aInsert, "INSERT INTO matematica(numeros)VALUES(" & Random(0, 9, 1) & ");") _ArrayAdd($aInsert, "INSERT INTO matematica(numeros)VALUES(" & Random(0, 9, 1) & ");") Repete isso 20x... E no final... Local $sql= _ArrayToString($aInsert, "", 1) _Base_Execute($sql) Faz a execução de um concatenado de SQLs! Qual é a quantidade ideal? Não sei... depende do trabalho do seu insert, tem que testar... AutoIt parece que não se dá bem com loops muito grandes... Mas se for por blocos, parece melhora muito. O ideal é sempre inserir texto, utilizando antes _SQLite_FastEncode(). Ele faz o scape correto dos caracteres, assim não dá erro de insert. Local $frase = "Viva a matemática, que eu tanto amo e não lembro mais nada!" Local $sql = "INSERT INTO livro(frases)VALUES(" & _SQLite_FastEncode($frase) & ");" _Base_Execute($sql)
  7. Olá, chegando atrasado, mas deixo aqui a minha sugestão. Exemplo_SQLite.au3
  8. Autoit Frontend

    Bom trabalho @Pedro Pinheiro, achei bem legal ter usado IrrLicht e compartilhar no GitHub!
  9. @Belini, Minha contribuição. #include <Array.au3> Local $numeros[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40] Local $combinacoes = 6 Local $combo = _ArrayCombinations($numeros, $combinacoes, ",") For $ii = 1 To UBound($combo, 1) - 1 Step $combinacoes For $jj = 0 To $combinacoes - 1 ConsoleWrite("[" & $ii & "]=" & $combo[$jj + $ii] & @LF) Next Next Obs: tente um um array pequeno... pois com 40 números... demora muitoooooo.
  10. A explicação do @Manimal é completa. Apenas a título de curiosidade, existe uma mega-power-ultra-fodástica ferramenta, CyberArk, que atua no seguimento de segurança corporativo, fazendo a troca de senhas e muitas outras coisas... E a linguagem que faz todas as automações por trás do CyberArk é... Tharám... A-U-T-O-I-T! @Fui...
  11. @Belini Segue minhas sugestões: Sugestão 1: ;~ http://www.autoitbrasil.com/forum/index.php?/topic/2177-hotkeyset-chamar-fun%C3%A7%C3%A3o-apenas-uma-vez/ #include <Misc.au3> Global $hDLL = DllOpen("user32.dll") Global $aKeys[][4] = [ _ [2], _ [10, False, "ShiftOn", "ShiftOff"], _ [11, False, "CtrlOn", "CtrlOff"] _ ] While Sleep(10) For $ii = 1 To $aKeys[0][0] If _IsPressed($aKeys[$ii][0], $hDLL) And Not $aKeys[$ii][1] Then Call($aKeys[$ii][2]) $aKeys[$ii][1] = True ElseIf Not _IsPressed($aKeys[$ii][0], $hDLL) And $aKeys[$ii][1] Then Call($aKeys[$ii][3]) $aKeys[$ii][1] = False EndIf Next WEnd Func ShiftOn() ConsoleWrite("Shift On!" & @LF) EndFunc ;==>ShiftOn Func ShiftOff() ConsoleWrite("Shift Off!" & @LF) EndFunc ;==>ShiftOff Func CtrlOn() ConsoleWrite("Ctrl On!" & @LF) EndFunc ;==>ShiftOn Func CtrlOff() ConsoleWrite("Ctrl Off!" & @LF) EndFunc ;==>ShiftOff DllClose($hDLL) Sugestão 2: ;~ http://www.autoitbrasil.com/forum/index.php?/topic/2177-hotkeyset-chamar-fun%C3%A7%C3%A3o-apenas-uma-vez/ #include <Misc.au3> #include <MsgBoxConstants.au3> Global $hDLL = DllOpen("user32.dll") Global $aKeys[][4] = [ _ [2], _ [10, False, ShiftOn, ShiftOff], _ [11, False, CtrlOn, CtrlOff] _ ] While Sleep(10) For $ii = 1 To $aKeys[0][0] If _IsPressed($aKeys[$ii][0], $hDLL) And Not $aKeys[$ii][1] Then $aKeys[$ii][2]() $aKeys[$ii][1] = True ElseIf Not _IsPressed($aKeys[$ii][0], $hDLL) And $aKeys[$ii][1] Then $aKeys[$ii][3]() $aKeys[$ii][1] = False EndIf Next WEnd Func ShiftOn() ConsoleWrite("Shift On!" & @LF) EndFunc ;==>ShiftOn Func ShiftOff() ConsoleWrite("Shift Off!" & @LF) EndFunc ;==>ShiftOff Func CtrlOn() ConsoleWrite("Ctrl On!" & @LF) EndFunc ;==>ShiftOn Func CtrlOff() ConsoleWrite("Ctrl Off!" & @LF) EndFunc ;==>ShiftOff DllClose($hDLL) Sugestão 3: ;~ http://www.autoitbrasil.com/forum/index.php?/topic/2177-hotkeyset-chamar-fun%C3%A7%C3%A3o-apenas-uma-vez/ #include <Misc.au3> Global $hDLL = DllOpen("user32.dll") Global $aKeys[][4] = [ _ [2], _ [10, False, ShiftOn, ShiftOff], _ [11, False, CtrlOn, CtrlOff] _ ] While Sleep(10) For $ii = 1 To $aKeys[0][0] If _IsPressed($aKeys[$ii][0], $hDLL) And Not $aKeys[$ii][1] Then $aKeys[$ii][1] = $aKeys[$ii][2]() ElseIf Not _IsPressed($aKeys[$ii][0], $hDLL) And $aKeys[$ii][1] Then $aKeys[$ii][1] = $aKeys[$ii][3]() EndIf Next WEnd Func ShiftOn() ConsoleWrite("Shift On!" & @LF) Return True EndFunc ;==>ShiftOn Func ShiftOff() ConsoleWrite("Shift Off!" & @LF) Return False EndFunc ;==>ShiftOff Func CtrlOn() ConsoleWrite("Ctrl On!" & @LF) Return True EndFunc ;==>ShiftOn Func CtrlOff() ConsoleWrite("Ctrl Off!" & @LF) Return False EndFunc ;==>ShiftOff DllClose($hDLL) Sugestão 4: ;~ http://www.autoitbrasil.com/forum/index.php?/topic/2177-hotkeyset-chamar-fun%C3%A7%C3%A3o-apenas-uma-vez/ #include <Misc.au3> Global $hDLL = DllOpen("user32.dll") Global $aKeys[][3] = [ _ [2], _ [10, False, Shift], _ [11, False, Ctrl] _ ] While Sleep(10) For $ii = 1 To $aKeys[0][0] If _IsPressed($aKeys[$ii][0], $hDLL) And Not $aKeys[$ii][1] Then $aKeys[$ii][2]($ii) ElseIf Not _IsPressed($aKeys[$ii][0], $hDLL) And $aKeys[$ii][1] Then $aKeys[$ii][2]($ii) EndIf Next WEnd Func Shift($id) Switch $aKeys[$ii][1] Case True ConsoleWrite("Shift Off!" & @LF) Case False ConsoleWrite("Shift On!" & @LF) EndSwitch $aKeys[$id][1] = Not $aKeys[$id][1] EndFunc ;==>ShiftOn Func Ctrl($id) Switch $aKeys[$ii][1] Case True ConsoleWrite("Ctrl Off!" & @LF) Case False ConsoleWrite("Ctrl On!" & @LF) EndSwitch $aKeys[$id][1] = Not $aKeys[$id][1] EndFunc ;==>ShiftOn DllClose($hDLL)
  12. Seria isso @Belini ? #cs Test() Func Test() Local $treeview, $i, $letter[27] GUICreate("Treeview", 210, 420) $treeview = GUICtrlCreateTreeView(0, 0, 210, 420, BitOR($TVS_HASLINES, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE) For $i = 1 To 26 $letter[$i] = StringUpper(Chr(64 + $i)) GUICtrlCreateTreeViewItem($letter[$i], $treeview) Next _GUICtrlTreeView_SelectItem($treeview, _GUICtrlTreeView_GetFirstItem($treeview)) GUISetState() While 1 For $i = 1 To 26 Send($letter[$i]); Não seleciona a linha quando envio a letra Sleep(100) Next WEnd EndFunc ;==>Te #CE ;~ #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 <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiTreeView.au3> OnAutoItExitRegister("OnExit") Opt("GUIOnEventMode", 1) Opt("GUIEventOptions", 1) Opt("MustDeclareVars", 1) Global $aGuiSize[2] = [800, 600] Global $sGuiTitle = "GuiTitle" Global $hGui Global $iTreeView Global $sLetter Global $iSearch, $hItem $hGui = GUICreate($sGuiTitle, $aGuiSize[0], $aGuiSize[1]) GUISetOnEvent($GUI_EVENT_CLOSE, "Quit") $iTreeView = GUICtrlCreateTreeView(10, 10, 210, 420, BitOR($TVS_HASLINES, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE) For $ii = 1 To 26 $sLetter = StringUpper(Chr(64 + $ii)) GUICtrlCreateTreeViewItem($sLetter, $iTreeView) Next GUISetState(@SW_SHOW, $hGui) For $ii = 1 To 26 $sLetter = StringUpper(Chr(64 + $ii)) $iSearch = _GUICtrlTreeView_FindItem($iTreeView, $sLetter) If Not @error Then $hItem = _GUICtrlTreeView_GetItemHandle($iTreeView, $iSearch) _GUICtrlTreeView_SelectItem($iTreeView, $hItem, $TVGN_FIRSTVISIBLE) _GUICtrlTreeView_SetState($iTreeView, $hItem, $TVIS_SELECTED, True) EndIf Next While Sleep(25) WEnd Func OnExit() GUISetState($hGui, @SW_HIDE) GUIDelete($hGui) EndFunc ;==>OnExit Func Quit() Exit EndFunc ;==>Quit
  13. Como ignorar Critical Errors

    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
  14. Como ignorar Critical Errors

    Olá @Bllee, falando especificamente do erro que você postou acima, você está tentando imprimir na saída do console, a variável $X, só que ela nunca foi usada antes... Muito menos declarada... O ideal é sempre definir as variáveis antes de começar a usá-las, exemplo: Local $x ConsoleWrite($x) Assim não dá erro. Mas tá... e qual o valor de $x? Nenhum... Nada... Pode ser "" (vazio). Pelo menos, esse erro, tem essa forma de corrigir.
  15. IPC - Pode ser interceptado?

    Bem... o AutoIt é apenas uma linguagem de script, para fazer automação de tarefas repetitivas, não é uma Framework grande e maduro de desenvolvimento. Nesse propósito (automação de tarefas repetitivas), eu acho que ela cumpre muito bem o seu papel. Mas não é porque não existe bibliotecas (UDFs) mais "avançadas" que não se possa criá-las... (só que as vezes é chato, por 'n' motivos). Meu esforço neste momento é de tentar perceber uma forma mais fácil de escrever um script multi janelas sem "massarocar" tanto o código. Dizendo com outras palavras: ter uma janela principal, e outras janelas de funções especificas (ou filhas) com o seu código muito bem separado da janela principal. Isso na hora de desenvolver e prestar manutenção facilita muito. Mas era necessário uma forma de fazer acontecer a comunicação entre as janelas. IPC foi uma alternativa das opções que vislumbrei, mas quando visualizei uma janela de troca de senha por IPC, eu pensei: xi... Será que é seguro? Mas algum tempo depois, consegui escrever um código que ainda precisa ser desenvolvido, mas consegue separar muito bem os blocos de cada janela com apenas algumas linhas se misturando com o código principal. Enfim... Seria muito bom ter um código assim: #include-once #include <Array.au3> #include <main.au3> #include <main_login.au3> #include <main_menu.au3> #include <main_logoff.au3> #include <main_quit.au3> While Sleep(25) WEnd Em vez de fazer aquela massaroca de código que eu faço, misturando tudo, de todas as janelas, por todos os lugares, poder fazer tudo por blocos, cada bloco funcional e independente do outro. E cada bloco só funciona quando é chamado, parece muito bom! Ao finalizar este bloco, ele libera todos os recursos utilizados no momento de sua inicialização.
×