Jump to content

Luigi

Administradores (Adm)
  • Content count

    679
  • Joined

  • Last visited

  • Days Won

    140

Luigi last won the day on June 15

Luigi had the most liked content!

Community Reputation

305 Excelente!

About Luigi

  • Rank
    Administrador
  • Birthday 02/08/1974

Profile Information

  • Gender
    Male
  • Location
    CWB
  1. 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".
  2. 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.
  3. 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
  4. 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.
  5. 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
  6. Houve uma atualização do fórum, todos os links antigos terão que ser atualizados. Isso vai demorar um pouco.
  7. 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.
  8. Converter scripts para utf-8

    @Manimal é animal! 8D
  9. Converter scripts para utf-8

    @lucasayrton, você criar uma macro no Notpad++ para auxiliar no processo.
  10. Converter scripts para utf-8

    Olá @lucasayrton, tente o notepad++
  11. _WinAPI_CreateWindowEx

    @Pedro Pinheiro a função _WinAPI_CreateWindowEx é um coringa. Com a mesma função você cria uma janela e os elementos da janela, como input, label, button, etc... Veja esse exemplo que eu traduzi (meia boca) do fórum alemão, mas deu para perceber o que a função _WinAPI_CreateWindowEx pode fazer. Mas nesse momento, infelizmente eu não sei dizer realmente qual a diferença entre a forma tradicional que utilizamos e esta... ;============================================================================== ; _WinAPI_CreateWindowEx.au3 ;============================================================================== #include <WindowsConstants.au3> #include <GuiConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <Constants.au3> #include <WinAPI.au3> ; source: https://autoit.de/onlinehilfe/libfunctions/_WinAPI_CreateWindowEx.htm Opt("MustDeclareVars", 1) Global Const $IDC_STATIC = -1, $IDC_EDIT = 101 Global $hInstance ;============================================================================== Exit Example() ;============================================================================== Func Example() Local $hWndMain, $hWndEdit, $hWndStatic, $hWndButton $hInstance = _WinAPI_GetModuleHandle(0) ; cria uma janela principal $hWndMain = GUICreate( _ "_WinAPI_CreateWindowEx - Demo", _ ; título de janela 400, 300, -1, -1, _ ; tamanho e Position de janela BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), _ ; janelatile $WS_EX_WINDOWEDGE, _ ; extendido janelatile 0) ; Handle de Parent-janela ; cria um simples campo de entrada $hWndEdit = _WinAPI_CreateWindowEx( _ 0, _ ; extendido janelatile "EDIT", _ ; Name o Fensterklasse "Pressione <ENTER>", _ ; Text/título de janela BitOR($WS_TABSTOP, $WS_CHILD, $WS_BORDER, _ ; janelatile $WS_VISIBLE, $ES_LEFT, $ES_NOHIDESEL), _ 100, 80, 200, 22, _ ; Position e tamanho de janela $hWndMain, _ ; Handle de Parent-janela $IDC_EDIT, _ ; Identifizierer de (Kind-)janela $hInstance, _ ; Instanzhandle de Moduls 0) ; aplicação definida valor ; cri um simples TextLabel $hWndStatic = _WinAPI_CreateWindowEx( _ 0, _ ; extendido janelatile "STATIC", _ ; Name o Fensterklasse "Text", _ ; Text/título de janela BitOR($WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, _ ; janelatile $SS_CENTER), _ 160, 140, 80, 18, _ ; Position e tamanho de janela $hWndMain, _ ; Handle de Parent-janela $IDC_STATIC, _ ; Identifizierer de (Kind-)janela $hInstance, _ ; Instanzhandle de Moduls 0) ; aplicação definida valor ; cria um simples botão $hWndButton = _WinAPI_CreateWindowEx( _ 0, _ ; extendido janelatile "BUTTON", _ ; Name o Fensterklasse "Text", _ ; Text/título de janela BitOR($WS_TABSTOP, $WS_VISIBLE, $WS_CHILD, _ ; janelatile $BS_DEFPUSHBUTTON), _ 160, 220, 80, 25, _ ; Position e tamanho de janela $hWndMain, _ ; Handle de Parent-janela $IDOK, _ ; Identifizierer de (Kind-)janela $hInstance, _ ; Instanzhandle de Moduls 0) ; aplicação definida valor ; registra a funão da Janela GUIRegisterMsg($WM_COMMAND, "MyWM_COMMAND") ; exibe a Janela _WinAPI_ShowWindow($hWndMain, @SW_SHOW) While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd EndFunc ;==>Example Func MyWM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $sMessage Switch _WinAPI_LoWord($wParam) Case $IDC_EDIT ; Nachrichten de Eingabefeldes Switch _WinAPI_HiWord($wParam) Case $EN_UPDATE ContinueCase Case $EN_CHANGE ConsoleWrite(_WinAPI_GetWindowText($lParam) & @CRLF) EndSwitch Case $IDOK $sMessage = StringFormat("o botão com o ID %d foi deprimido.", $IDOK) _WinAPI_MsgBox( _ BitOR($MB_OK, $MB_ICONASTERISK), _ "MyWM_COMMAND", _ $sMessage) EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>MyWM_COMMAND ;================================ End of File =================================
  12. Framework Comercial

    @Manimal, acredito que fizemos funções similares em momentos diferentes, compartilho o meu código para aplicar ou formatar uma entrada numérica no formato de número real "000.000" com qualquer tipo de entrada, segue exemplo: https://github.com/chechelaky/AutoIt/tree/master/Diversos/Mask
  13. ok, li somente agora, vou providenciar.
  14. Pegar serial da placa mãe

    @Belini, isso é complicado... Isso é muito relativo e depende muito da placa mãe, o que vou falar vale tanto para placa mãe quanto a bios. Placa mãe tem serial? SIM! BIOS tem serial? SIM! Mas... para ambas, o serial pode ser em branco! Principalmente para as placas xing ling. Para as placas de "pedigree", sim, existe um número de série real, mas há muitos casos que o serial é igual.. Eu postei um topico sobre wmi, e la tem esses exemplos. Sugiro também o _WinAPI_UniqueHardwareID
  15. Framework Comercial

    @Manimal, sobre o uso do github, acredito que: * é uma nova forma de compartilhar código (não sejamos "puristas" em achar que somente um fórum, no caso o nosso é a única forma de compartilhar código) * uma hora talvez esse forum acabe, e com ele todo o conhecimento, e talvez o github esteja lá (até a Microsoft esta lá) * sua ideia é ótima, e merece visibilidade universal, acho que um forum limita um pouco essa visibilidade, afinal de contas, quem quiser fazer o download e não dar feedback algum, vai fazer isso no forum, no github, em qualquer lugar... quem quiser acrescentar, vai fazer o que for preciso e irá somar *quanto usar o github ser mais complicado, sim, parece, até eu tenho um pouco de dificuldade em entender o conceito de brunchs, mas as grandes ideias nas grandes empresas utilizam esta receita, temos que estudar e assimilar * eu não sou fã de código compartilhado em mediafire ou aquelas paginas que fazem voce esperar 1 minuto e ficam te mostrando propaganda enquanto vc espera, da uma sensacao ruim Mas, é apenas a minha forma de ver, independente do formato que vocé escolher, eu vou ajudar no que for possivel.
×