Jump to content
Sign in to follow this  
Kovacic

GUIOnEventMode help needed, only 1 button seems to work

Recommended Posts

Kovacic

Semi experienced developer here.. I have never fully gotten the handle of using GUIOnEventMode, so i thought I would try it with a small simple program that I can paste some text into, then have it count down, and type it out for me.. I use this for when I am iLO into a server and I cant paste. For those of you not familiar with iLO, it stands for Integrated Lights Out. in short, it lets you remote into a server even if its having BIOS issue and wont start.. more details here: http://www8.hp.com/us/en/products/servers/ilo/

 

Anyway, when in iLO, you cant paste anything. Sometimes I need to copy bash scripting from my computer to the server, so I drop it in the little app, then use it to type out the script in the iLO screen. I have it so it does a countdown before sending the keys, and a delay between each key ( because iLO will sometimes hang up a little ). 

 

The app I am trying to write will count down, then send whatever is in the edit box. I also have a stop button in case you want to stop the app, but that doesn't seem to do anything. I feel like I'm using GUIOnEventMode improperly. Can someone take a peek?

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;Opt                                     ("GUICoordMode", 2)
Opt                                      ("GUIResizeMode", 1)
Opt                                      ("GUIOnEventMode", 1)
GUISetOnEvent                            ($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent                            ($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent                            ($GUI_EVENT_RESTORE, "SpecialEvents")
$Form1 = GUICreate                       ("Sender", 615, 438, 192, 124)
$edit = GUICtrlCreateEdit                ("", 8, 128, 601, 305)
$stop = GUICtrlCreateButton              ("STOP", 496, 60, 100, 25)
GUICtrlSetOnEvent                        (-1, "stop")
$SEND = GUICtrlCreateButton              ("SEND", 496, 88, 100, 25)
GUICtrlSetOnEvent                        (-1, "sendit")
$SecsToWaitB4Sending = GUICtrlCreateInput("10", 200, 32, 145, 25)
GUICtrlCreateLabel                       ("Seconds to wait before sending", 40, 32, 153, 17)
GUICtrlCreateLabel                       ("Delay between char sent in ms.", 40, 64, 152, 17)
$MSBetweenLEtters = GUICtrlCreateInput   ("100", 200, 64, 145, 25)
GUISetState                              (@SW_SHOW)
While 1
    Sleep(5)
WEnd
Func stop()
    GUICtrlSetData($SEND, "SEND")
EndFunc   ;==>stop
Func sendit()
    Local $h = Int(GUICtrlRead($SecsToWaitB4Sending))
    GUICtrlSetData($SEND, "Waiting")
    For $i = 1 To Int(GUICtrlRead($SecsToWaitB4Sending))
        GUICtrlSetData($SEND, $h)
        For $c = 1 To 100
            Sleep(1)
        Next
        $h -= 1
    Next
    GUICtrlSetData($SEND, "Typing")
    Opt("SendKeyDelay", Int(GUICtrlRead($MSBetweenLEtters)))
    Send(GUICtrlRead($edit), 1)
    GUICtrlSetData($SEND, "SEND")
EndFunc   ;==>sendit
Func SpecialEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
            ;
        Case @GUI_CtrlId = $GUI_EVENT_RESTORE
            ;
    EndSelect
EndFunc   ;==>SpecialEvents

 

 

 

Thanks in advance!

 

 

Edited by Kovacic

C0d3 is P0etry( ͡° ͜ʖ ͡°)

Share this post


Link to post
Share on other sites
mikell

The GUISetOnEvent  will work if you place it after the GUICreate
For the stop button you might read this   :)

Share this post


Link to post
Share on other sites
Kovacic

The GUISetOnEvent  will work if you place it after the GUICreate
For the stop button you might read this   :)

Very cool! Thanks for the resource, I will follow up on this! :D


C0d3 is P0etry( ͡° ͜ʖ ͡°)

Share this post


Link to post
Share on other sites
AutoBert

I would solve the problem with AdlibRegister:

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;Opt                                     ("GUICoordMode", 2)
Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)
Global $h
$Form1 = GUICreate("Sender", 615, 438, 192, 124)
$edit = GUICtrlCreateEdit("", 8, 128, 601, 305)
$stop = GUICtrlCreateButton("STOP", 496, 60, 100, 25)
GUICtrlSetOnEvent(-1, "stopSend")
$SEND = GUICtrlCreateButton("SEND", 496, 88, 100, 25)
GUICtrlSetOnEvent(-1, "startSend")
$SecsToWaitB4Sending = GUICtrlCreateInput("10", 200, 32, 145, 25)
GUICtrlCreateLabel("Seconds to wait before sending", 40, 32, 153, 17)
GUICtrlCreateLabel("Delay between char sent in ms.", 40, 64, 152, 17)
$MSBetweenLEtters = GUICtrlCreateInput("100", 200, 64, 145, 25)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") ;funktioniert frühestens nach GuiCreate
;GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")    ;unnötig wenn Standardaktion
;GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")     ;unnötig wenn Standardaktion
$receiver=GUICreate('Empfänger')
GUICtrlCreateEdit('',5,5,200,200)
GUISetState(@SW_HIDE)
GUICtrlSetData($edit,'--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop'&@CRLF)
;zum Verständnis kann nach Test entfernt werden
While 1
    Sleep(500)
WEnd

Func stopSend()
    AdlibUnRegister('sendit') ;beendet den Aufruf der Func sendit
    GUICtrlSetData($SEND, "SEND")
    ConsoleWrite('Abbruch durch Benutzer' & @CRLF) ;kann entfernt werden
EndFunc   ;==>stopSend

Func startSend()
    Opt("SendKeyDelay", Int(GUICtrlRead($MSBetweenLEtters)))
    $h = Int(GUICtrlRead($SecsToWaitB4Sending))
    GUICtrlSetData($SEND, "Waiting")
    AdlibRegister('sendit', 1000) ;registriert die Func sendit und ruft sie alle 1000 ms auf
    sendit() ;damit sendit sofort und nicht erst nach 1000 ms aufgerufen wird
EndFunc   ;==>startSend

Func sendit()
    $toSend = GUICtrlRead($edit)
    $aToSend = StringSplit($toSend,'')
    If $h = 0 Then
        GUISetState(@SW_SHOW,$receiver) ;kann entfernt werden
        WinActivate($receiver)          ;kann entfernt werden
        $iStart = TimerInit()
        Send($toSend, 1)
        ConsoleWrite('String: '&TimerDiff($iStart)&@CRLF)
        ;diese Schleife zum Verständnis mindestens 1 mal testen
        ;danach kann sie entfernt werden
        $iStart = TimerInit()
        For $i = 1 To $aToSend[0]
            Send($aToSend[$i],1)
        Next
        ConsoleWrite("Char's: "&TimerDiff($iStart)&@CRLF)
        ;Unterschied bemerkt???
        Sleep(2500)                     ;kann entfernt werden
        GUISetState(@SW_HIDE,$receiver) ;kann entfernt werden
        ConsoleWrite($toSend & @CRLF & 'wurde gesendet' & @CRLF) ;kann entfernt werden
        GUICtrlSetData($SEND, "SEND")
        AdlibUnRegister('sendit') ;beendet den Aufruf der Func sendit
    Else
        GUICtrlSetData($SEND, $h)
        $h -= 1
    EndIf
EndFunc   ;==>sendit

Func SpecialEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
            ;
        Case @GUI_CtrlId = $GUI_EVENT_RESTORE
            ;
    EndSelect
EndFunc   ;==>SpecialEvents

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • Slipk
      By Slipk
      Hello everyone,
      I have a problem that from the title may sound a little bit confusing.
       
      I have a listview interface with a context menu and as you know it's working only if GuiOnEventMode is enabled.
      However, I need a script that can check whenever the user right click on a listview item and automatically enable GuiOnEventMode to make the function run when he click menu item.
      I have some buttons next to listview that need to work while this is possible too.
       
      It this even can be done?
      Thank you and sorry for my bad english.
    • Mannyfresh31
      By Mannyfresh31
      Hello everybody I need help with Opt("GUIOnEventMode",1) 
      I Normally use GUIGetMsg() but I want to learn how GUIOnEventMode works so I created a little test GUI the start button works fine and everything but the problem is that the stop button won't work down below is the code  I made and I'm wondering if someone with experience can explain me and the rest o newbies how it works and also if can post the code already fixed
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> $Stop = False $X=1 $i = 0 Opt("GUIOnEventMode",1) #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Form1", 579, 212, 192, 124) Global $Button1 = GUICtrlCreateButton("Stop", 432, 136, 75, 25) Global $Button2 = GUICtrlCreateButton("Start", 96, 136, 75, 25) Global $Progress1 = GUICtrlCreateProgress(24, 40, 526, 49) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUISetOnEvent ($GUI_EVENT_CLOSE, "_exit",$Form1 ) GUICtrlSetOnEvent($Button1,"_Stop") GUICtrlSetOnEvent($Button2,"DecreaseAndIncrement") While 1 sleep(500) WEnd Func _Stop () $Stop = True EndFunc Func _exit () Exit EndFunc Func DecreaseAndIncrement () $Stop = False While $Stop = False $i+=$X ;ConsoleWrite($i & @CRLF) GUICtrlSetData($Progress1,$i) Sleep(80) if $i = 105 Then $X = -1 if $i = 0 Then $X = 1 WEnd EndFunc  
       
      here is the version that works with GUIGetMsg()
       
       
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> $Stop = False $X=1 $i = 0 #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Form1", 579, 212, 192, 124) Global $Button1 = GUICtrlCreateButton("Stop", 432, 136, 75, 25) Global $Button2 = GUICtrlCreateButton("Start", 96, 136, 75, 25) Global $Progress1 = GUICtrlCreateProgress(24, 40, 526, 49) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button2 DecreaseAndIncrement () case $Button1 $Stop = True EndSwitch WEnd Func DecreaseAndIncrement () $Stop = False While $Stop = False $i+=$X ;ConsoleWrite($i & @CRLF) GUICtrlSetData($Progress1,$i) Sleep(80) if $i = 105 Then $X = -1 if $i = 0 Then $X = 1 $nMsg2 = GUIGetMsg() Switch $nMsg2 Case $GUI_EVENT_CLOSE Exit case $Button1 $Stop = True EndSwitch WEnd EndFunc  
       
       
       
       
       
       
    • Leo1906
      By Leo1906
      I read about GUIOnEventMode while making my research and I found out that you can't use 
      Opt("GUIOnEventMode", 1)
      and
      $msg = GUIGetMsg()
      at the same time. So far so good.
      In my script I am spawning a few child GUIs and only for the main GUI I need interaction with buttons etc.
      My question now is, is it possible to set those flags specifically for a single GUI? Can I somehow pass the handle to a GUI this option should affect? And for the main GUI I use GuiGetMsg?
      I hope you can understand what I'm trying to do ..
       
      Thanks for your help
    • shotiko
      By shotiko
      here I am writing simple gui with text processing capabilities.
      i have main gui, background picture, all buttons with labels over them 2 static buttons (1 present here)
      Opt("GUIOnEventMode", 1) and includes
      $main = GUICreate("Title", 961, 721); Main Window $bgpic = GUICtrlCreatePic(@WorkingDir & "\960x720.jpg", 0, 0, 960, 720); use background picture $quitBtn = GUICtrlCreateButton("Quit", 885, 685, 95, 40) GUICtrlSetOnEvent($quitBtn, "_exit"); assign quit button to function "exit" _GuiCtrlMakeTrans(-1, 1) $quitLabel = GUICtrlCreateLabel("Quit", 885, 685, 95, 40, BitOR($SS_CENTER, $BS_BOTTOM)) GUICtrlSetFont(-1, 14, 400, 0, "Tahoma") GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0x962129) GUISetState(@SW_SHOW)
      then i have the code for creating buttons dynamically from information in file
      Dim $Button[$NumberFromText] $startX = 48 $startY = 24 $fromLeft = 240 $bHeigh = 160 $bWidth = 50 Dim $1to4btn[0] For $x = 0 To _Min(UBound($Button) - 1, 3) ; creates maximum 4 button, label $Button = GUICtrlCreateButton($x, $startX, $startY, $bHeigh, $bWidth); create buttons _GuiCtrlMakeTrans(-1, 1) ; transparency 255 Solid, 0 Transparent $serverLabel = GUICtrlCreateLabel(FileReadLine($configF, $SN), _ ; read 1st line and 5 below on each iteration $startX, $startY, $bHeigh, $bWidth, BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_EX_TRANSPARENT)); GUICtrlSetFont(-1, 14, 400, 0, "Tahoma"); set font and size GUICtrlSetColor($serverLabel, 0x04A111); set color of font GUICtrlSetBkColor($serverLabel, $GUI_BKCOLOR_TRANSPARENT); make label Background transparent $SN += 5; read 5 lines below $startX = $startX + $fromLeft $btnArray=_ArrayAdd($1to4btn, GUICtrlGetHandle($Button)) Next since buttons are created under the label $Button and I couldn't conacenate $Button[$i] , I created array and place handles into it and connected static buttons with
      GUICtrlSetOnEvent($cancelBtn,"cancelFunc") and it worked
      now i tried using handles to assign functions to buttons but it fails with GUICtrlSetOnEvent()
      also tried GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "funcForFirstButton", $1to4btn[0])
      if I assign without handle it works by clicking anywhere on MainGUI
      While loop includes only sleep(10)
       
      Window starts as inactive and return code 7
      If i click dynamically created buttons, window loses focus . clicking anywhere else focuses window
       
      this is _GuiCtrlMakeTrans function (found here on forums some time ago)
      also created simple button on the same mainGUI and tried but didn't work
      $try=GUICtrlCreateButton("TRY",250,150,100,35) GUICtrlSetOnEvent(-1,"FunctionOne") ; shows messagebox and write console  
    • 31290
      By 31290
      Hi everyone, 
      I'm requesting your help over here because I can't figure something that is going to pull all of my hear and, if possible, I would like to make another ask.
      Here's the deal:
      #include <FileConstants.au3> #include <Array.au3> #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <ComboConstants.au3> #Include <Constants.au3> #include <Crypt.au3> #include <Date.au3> #include <File.au3> #Include <FontConstants.au3> #include <GUIConstantsEx.au3> #include <GuiEdit.au3> #include <GuiListView.au3> #include <GuiMenu.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <ProgressConstants.au3> #include <ScreenCapture.au3> #include <StaticConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> Global $FileChosen = "" ; Global $Images = "C:\SAC_IS\ATL_Laptop\Resources\Images\" Global $UploadSource = "" Global $UploadDest = "\\epeldol01\Automated Task List Suite\Bug Tracker\" Opt("GUIOnEventMode", 1) UploadGui() Func UploadGui() ;ADD SMALL ICON! ; e.g GUISetIcon ($Images & "\ResultsGUI.ico") Global $UploadGui = GUICreate ("Upload", 300, 300, -1, -1) ; GUICtrlCreatePic ($Images & "\SAClogo.jpg", 30, 10, 240, 80) GUISetBkColor ($Color_White) GuiCtrlCreateLabel ("-- ATLS BUG TRACKER --", 85, 100, 150, 25) GUICtrlSetFont (-1, 8.5, 700, 0) GUICtrlCreateLabel ("-Step one:", 10, 130, 100, 30) GUICtrlSetFont (-1, 8.5, 700, 0) GUICtrlCreateButton ("Choose file to upload", 90, 125, 120, 25) GUICtrlSetOnEvent (-1, "_ChooseFile") GuiCtrlCreateLabel ("-Step two:", 10, 170, 100, 30) GUICtrlSetFont (-1, 8.5, 700, 0) GUICtrlCreateButton ("Give us details", 100, 165, 100, 25) GUICtrlSetOnEvent (-1, "_Details") GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $UploadGui) ; GUICtrlSetOnEvent (-1, "_UploadFile") ; Global $NameOfFile = While 1 GuiSetState (@SW_SHOW) WEnd EndFunc Func _ChooseFile() ; Display an open dialog to select a file. Global $UploadSource = FileOpenDialog("Select File to Upload", @HomePath & "\", "Images (*.jpg;*.bmp)") ; If $UploadSource <> "" Then ; GUISetOnEvent EndFunc Func _UploadFile() If $UploadSource = "" Then MsgBox ($MB_SYSTEMMODAL, "", "No file was selected. Choose a file first!") Else _CopyToLdrep($UploadSource, $UploadDest) EndIf EndFunc ;Upload Function ; Func _CopyToLdrep ($fromfile, $tofile) ; Local $FOF_RESPOND_YES = 16 ; Local $FOF_SIMPLEPROGRESS = 256 ; $winShell = ObjCreate ("shell.application") ; $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES) ; EndFunc ;Details Function Func _Details() Opt("GUIOnEventMode", 1) $DetailsGui = GUICreate ("Details", 300, 400, -1, -1) ; GUICtrlCreatePic ($Images & "\SAClogo.jpg", 30, 10, 240, 80) GUISetBkColor ($Color_White) GuiCtrlCreateLabel ("-- ATLS BUG TRACKER --", 85, 100, 150, 25) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") GuiCtrlCreateEdit ("Please describe the context, Date & Time, etc..." & @CRLF & "Also, provide your name and phone number just in case.", 5, 100, 290, 250) GuiCtrlCreateButton ("Submit", 125, 370, -1, -1) GuiCtrlSetOnEvent (-1, "_Submit") While 1 GuiSetState (@SW_SHOW) Wend EndFunc Func _Exit() Exit EndFunc Func _Submit() msgbox (0, "re", "re") EndFunc I'm trying to create a sort of upload module for my techs to be able to submit "bugs"... The first GUI works perfectly but when I want to "Submit" the text they entered there's no way that button is working. I can't even close the windows with the little cross. But, when isolating the function and running it like:
      #include <FileConstants.au3> #include <Array.au3> #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <ComboConstants.au3> #Include <Constants.au3> #include <Crypt.au3> #include <Date.au3> #include <File.au3> #Include <FontConstants.au3> #include <GUIConstantsEx.au3> #include <GuiEdit.au3> #include <GuiListView.au3> #include <GuiMenu.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <ProgressConstants.au3> #include <ScreenCapture.au3> #include <StaticConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> test() Func test() Opt("GUIOnEventMode", 1) $DetailsGui = GUICreate ("Details", 300, 400, -1, -1) ; GUICtrlCreatePic ($Images & "\SAClogo.jpg", 30, 10, 240, 80) GUISetBkColor ($Color_White) GuiCtrlCreateLabel ("-- ATLS BUG TRACKER --", 85, 100, 150, 25) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") GuiCtrlCreateEdit ("Please describe the context, Date & Time, etc..." & @CRLF & "Also, provide your name and phone number just in case.", 5, 100, 290, 250) GuiCtrlCreateButton ("Submit", 125, 370, -1, -1) GuiCtrlSetOnEvent (-1, "_Submit") GuiSetState (@SW_SHOW) While 1 Sleep (10) Wend EndFunc Func _Exit() Exit EndFunc Func _Submit() msgbox (0, "re", "re") EndFunc This is working nicely and my msgbox proves it.
      Second ask is that when a tech finished to choose a file and when he clicked on the "Submit" button, how can I add some "checkmark" meaning this is done and that he can perform the upload? (Indeed, both conditions must me fulfilled to send files to the server). Or maybe a disabled "Send files" button... But I can't figure that out.
      Thanks very much in advance for the help you could provide
      See ya
×