Jump to content

Luigi

Administradores (Adm)
  • Content count

    686
  • Joined

  • Last visited

  • Days Won

    142

Luigi last won the day on October 1

Luigi had the most liked content!

Community Reputation

310 Excelente!

About Luigi

  • Rank
    Administrador
  • Birthday 02/08/1974

Profile Information

  • Gender
    Male
  • Location
    CWB
  1. 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
  2. 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
  3. 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.
  4. 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.
  5. https://www.autoitscript.com/forum/topic/118440-send-message-to-a-process/?do=findComment&comment=824201 Neste tópico, tem um exemplo bem legal de IPC (Interprocess Comunication, acho que é isso). Você faz duas janelas distintas conversarem entre si, trocar informações. Mas somente dentro da mesma sessão do Windows, quero dizer, na mesma conta. Até hoje não vi, uma forma de IPC descente, que não seja por TCP/IP. Tá, e onde usar isso? Pra que usar uma janela se comunicando com a outra? Facilitar o desenvolvimento: você tem a sua aplicação principal, clica num botão e aparece uma janela com um relatório. Você tem duas janelas, com funções distintas entre si, mas fazem parte do mesmo código (estão no mesmo script). E fazer um código que faça "apenas isso", uma janela principal e uma relatório, já é um belo de um trabalho! Lógico, tem partes que são apenas da janela A, tem partes que são apenas da janela B, tem partes comum da janela A e B. Mas e se fosse possível dividir as tarefas? Exemplo: a janela A, é o aplicativo JanelaA.exe, e um determinado momento, você clica na janela relatório, e ele chama a JanelaB.exe, que recebe todos os dados por IPC, da janela A. Você se preocupa somente com o desenvolvimento de uma janela por vez, os códigos estão muito bem isolados e um não interfere no outro. Parece bom né? Se ficar no pensamento do relatório, maravilha! Mas então pensei numa simples janelinha de "Alterar senha". Você já pensou quanto código você tem que desenvolver atrás de uma janela como essa? Verificar se tem mais de 8 caracteres, se tem uma maiúscula, se a senha e a confirmação de senha são iguais, etc... Mas o que me fez escrever esse post é: e a comunicação entre as janelas, não pode ser interceptada?
  6. 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
  7. 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
  8. Multi-thread em autoit

    @mutleey, vou fazer os exemplos, acho que até cabe muito bem um exemplo de serviço do Windows com interface. Obs: serviço do windows não tem interface. @Pedro Pinheiro, gostei do termo "responsabilizar".
  9. Multi-thread em autoit

    @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.
  10. Aliviar uso da CPU

    @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
  11. Enviar SMS

    @Pedro Pinheiro, ops! Desculpe! Eu me confundi, não, essa UDF do TELEGRAM não envia SMS, é tipo um WhatsApp, necessita de conexão com a internet.
  12. Enviar SMS

    @Pedro Pinheiro, o TELEGRAM é um concorrente do WhatsApp (eu acho melhor), pois tem uma API aberta e muito bem documentada: https://core.telegram.org/bots Sim, precisa instalar no celular, pra receber as mensagens do PC no celular. Mas há uma versão .exe muito leve e funcional. Depois do TELEGRAM instalado no celular, você precisa criar uma conta de BOT: https://core.telegram.org/bots#botfather Ao criar o BOT você receberá o TOKEN: https://core.telegram.org/bots/api#authorizing-your-bot Com o TOKEN você pode utilizar esta UDF do AutoIt para enviar mensagens. Essa API do TELEGRAM funciona realmente muito bem! Você pode programar um Script do AutoIt para ler a temperatura do processador e enviar a informação a cada 5 minutos. A UDF do AutoIt pode enviar: mensagem foto som qualquer tipo de arquivo Também é possível enviar uma mensagem do TELEGRAM do seu SmartPhone para o BOT (entenda UDF do AutoIt) e fazer alguma coisa... Por exemplo: Se você tiver um PC rodando com a UDF do TELEGRAM + ARDUINO, você pode enviar a mensagem do TELEGRAM do seu SmartPhone para o PC: ligar rele 1 desligar rele 2 Mas você precisa digitar a mensagem no TELEGRAM. Limitação: BOT não fala com BOT. Seria fantástico utilizar a API do TELEGRAM para controlar a UDF do AutoIt e criar um aplicativo para Android para fazer as coisas... Mas não consegui fazer isso. A frase acima aprendi à duras penas. Se alguém souber uma forma de fazer um BOT trocar mensagens com outro BOT, seria show. Essa eu não sei... Em tempo, quanto ao ChatID, é meio chato de descobri-lo, na verdade é o ID do usuário com quem o BOT vai conversar, veja aqui: https://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id https://stackoverflow.com/questions/31078710/how-to-obtain-telegram-chat-id-for-a-specific-user/34440247
  13. Houve uma atualização do fórum, todos os links antigos terão que ser atualizados. Isso vai demorar um pouco.
  14. Enviar SMS

    bom dia @Pedro Pinheiro, sugiro o uso do Telegram. Embora houve uma tentativa de minha parte para fazer uma comunicação bidirecional entre ambos sem sucesso (PC -> Celular e Celular -> PC) sem muito sucesso, mas a comunicação PC -> Celular funciona perfeitamente.
  15. Converter scripts para utf-8

    @Manimal é animal! 8D
×