rynow

roma() - autoit Framework - (needed support)

2 posts in this topic

#1 ·  Posted (edited)

Hello,

I´m using AutoIt for a long time not only to automate applications but to develop complex stand-alone applications. I am particularly annoyed by the fact that the logic in AutoIt is difficult to separate from the presentation and the standard GUI elements are very inflexible. If you want to create something more sophisticated, you have to use GDI and write many lines for simple effects or animations.

With these thoughts in mind, I looked around for alternatives and unfortunately found nothing that corresponded to my ideas. Therefore, I have thought of a different solution. I have created this framework in order to separate the logic from the presentation and to use HTML & CSS in my GUI to the full extent.

Goals of the Framework

  • MVC development with AutoIt
  • HTML & CSS GUI in AutoIt
  • Better and more modern package system(UDF) like npm
  • CLI support like Laravel Artisan
  • faster and more structured application development

roma() is strongly inspired by Laravel PHP Framework so Laravel users will notice many similarities.

Support

Unfortunately, I do not have much time for the project at the moment. So I thought to myself, I share it and ask you for support.

Content

The framework primarily serves for the development of stand-alone applications.

  • All necessary settings are preconfigured. You can start immediately with the logic or the view
  • All settings are in one place
  • The logic(controller) and the presentation are clearly separated from each other
  • Development with MVC structure
  • You can develop the GUI in realTimer without restarting AutoIt
  • GUI can be developed in HTML & CSS
  • Any graphic & video integration is possible (.png, .gif etc.). Also everything that is possible in HTML5 and CSS3
  • JavaScript & Frameworks are supported
  • Debug logs are created including console output
  • It is possible to work with multiple languages
  • All UDFs are contained in the framework. Reloading is not necessary
  • The AutoIt UDFs are also included in the Framework. This ensures that it workds correctly for different Versions of AutoIt
  • The framework also provides functions that are necessary for communication between AutoIt and HTML. For example, evaluation of form data (GET & POST) (documentation for this and examples follow.)
  • I also developed a template engine. (Similar to Laravel Blade)
  • The template engine supports if statements (would like to have help to make loops possible). In the Future I will publish a complete documentation of the template engine and examples.
  • Almost finished is a database package. This makes communication with databases an absolute child's play.
  • So that was it for once. If something else occurs to me, I will update the list.

Small Example

url: http://localhost:8080/welcome
;application.au3

;----------------------------------------------------------------------------------------------/
; Initial
;----------------------------------------------------------------------------------------------/
#include 'vendor\initial.au3'

func _roma_routes()
    
    ;----------------------------------------------------------------------------------------------/
    ; GET Request
    ;----------------------------------------------------------------------------------------------/
    $route_get('welcome', 'welcome')
    
endfunc
;roma\controller\welcome.au3

;----------------------------------------------------------------------------------------------/
; Welcome Controller
;----------------------------------------------------------------------------------------------/
func controller_welcome()

    Local $name = 'Eduard', $lastname = 'Tschernjaew'
    
    ;----------------------------------------------------------------------------------------------/
    ; passed variable to view (Array are possible)
    ;----------------------------------------------------------------------------------------------/
    $toView('name', $name)
    $toView('lastname', $lastname)

    ;----------------------------------------------------------------------------------------------/
    ; Return a View
    ;----------------------------------------------------------------------------------------------/
    return $VIEW('welcome')
endfunc
<html>
  <head>
    <title>roma() - Template Test</title>
  </head>
  
  <body>
    <h1>Hello {{ $name }} {{ $lastname }}</h1>
  </body>
</html>

 

Download

The framework is under the Open-Source license.
Github: https://github.com/4ern/roma/

git clone https://github.com/4ern/roma.git

or download the ZIP
Documentaion: https://github.com/4ern/roma/blob/master/README_EN.md 

ToDo

[ ] Loop Funktion in Template.au3
[ ] CLI module like Laravel Artisan
[ ] Solution approaches, how the framework can be optimally compiled, so that in the compiled state all files are available.
[ ] Framework Tests & Bugfixes

roma() is still in development. Documentation and application examples will soon be available. I am looking forward to any Contributing.

Thanks for Feedback and Contributing

Edited by rynow
1 person likes this

Share this post


Link to post
Share on other sites



@rynow we do not permit duplicate posts on the forum. If you want collaboration and assistance from the community, your post should live here. If you are working on it on your own, keep it in the Examples forum. Please choose a spot and we will merge the topics.


When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

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

  • Similar Content

    • Chimp
      By Chimp
      just for further fun Here is a Javascript version of the nice 3D sine wave posted from @UEZ
      This version uses this nice javascript library:(http://visjs.org/graph3d_examples.html).  (All the 'dirty' work is done by the javascript library, so the whole credit goes of course to that library and not to me...) I've simply injected all the html/javascript stuff into a BrowserControl embedded into an AutoIt GUI.
      Have fun
      #include <GUIConstantsEx.au3> Example() Exit Func Example() Local $oIE = ObjCreate("Shell.Explorer.2") ; Create a BrowserControl Local $hGUI = GUICreate("3D Sinus wave animation demo", 660, 650, 30, 30) GUICtrlCreateObj($oIE, 0, 0, 660, 650) ; Place BrowserControl on the GUI GUISetState() ;Show GUI $oIE.navigate('about:blank') While Not String($oIE.readyState) = 'complete' ; wait for about:blank Sleep(100) WEnd ; this waits till the document is ready to be used (portion of code from IE.au3) While Not (String($oIE.readyState) = "complete" Or $oIE.readyState = 4) Sleep(100) WEnd While Not (String($oIE.document.readyState) = "complete" Or $oIE.document.readyState = 4) Sleep(100) WEnd $oIE.document.Write(_GetHTML()) ; inject lising directly to the HTML document: $oIE.document.close() ; close the write stream $oIE.document.execCommand("Refresh") ; ----------------------------- ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; the end $oIE = 0 ; Remove IE from memory. GUIDelete($hGUI) ; Remove GUI EndFunc ;==>Example Func _GetHTML() Local $sHTML = _ "<!doctype html>" & @CRLF & _ "<html>" & @CRLF & _ "<head>" & @CRLF & _ " <meta http-equiv=""X-UA-Compatible"" content=""IE=edge"" />" & @CRLF & _ " <title></title>" & @CRLF & _ "" & @CRLF & _ " <style type=""text/css"">" & @CRLF & _ " body {" & @CRLF & _ " font: 10pt arial;" & @CRLF & _ " }" & @CRLF & _ " </style>" & @CRLF & _ "" & @CRLF & _ " <script type=""text/javascript"" src=""https://cdnjs.cloudflare.com/ajax/libs/vis/4.18.0/vis.min.js""></script>" & @CRLF & _ "" & @CRLF & _ " <script type=""text/javascript"">" & @CRLF & _ " var data = null;" & @CRLF & _ " var graph = null;" & @CRLF & _ " var x0, x1, x2" & @CRLF & _ " function custom(x, y, t) {" & @CRLF & _ " // change this function to change the graph" & @CRLF & _ " x0 = 20 - t/180;" & @CRLF & _ " x1 = (x/x0)*(x/x0) + t/10;" & @CRLF & _ " y1 = (y/x0)*(y/x0) + t/10;" & @CRLF & _ " return Math.sin(Math.sqrt(x1+y1));" & @CRLF & _ " }" & @CRLF & _ " // Called when the Visualization API is loaded." & @CRLF & _ " function drawVisualization() {" & @CRLF & _ " // Create and populate a data table." & @CRLF & _ " data = new vis.DataSet();" & @CRLF & _ " // create some nice looking data with sin/cos" & @CRLF & _ " var steps = 25;" & @CRLF & _ " var axisMax = 314;" & @CRLF & _ " var tMax = 800;" & @CRLF & _ " var axisStep = axisMax / steps;" & @CRLF & _ " for (var t = 300; t <= tMax; t = t + 50) {" & @CRLF & _ " for (var x = -axisMax; x < axisMax; x+=axisStep) {" & @CRLF & _ " for (var y = -axisMax; y < axisMax; y+=axisStep) {" & @CRLF & _ " var value = custom(x, y, t);" & @CRLF & _ " data.add([" & @CRLF & _ " {x:x,y:y,z:value,filter:t,style:value}" & @CRLF & _ " ]);" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " // specify options" & @CRLF & _ " var options = {" & @CRLF & _ " width: '600px'," & @CRLF & _ " height: '600px'," & @CRLF & _ " style: 'surface'," & @CRLF & _ " showPerspective: true," & @CRLF & _ " showGrid: false," & @CRLF & _ " showShadow: false," & @CRLF & _ " // showAnimationControls: false," & @CRLF & _ " keepAspectRatio: true," & @CRLF & _ " verticalRatio: 0.085, // 0.5," & @CRLF & _ " animationInterval: 100, // milliseconds" & @CRLF & _ " animationPreload: true," & @CRLF & _ " animationAutoStart: true," & @CRLF & _ " filterValue: 'time'" & @CRLF & _ " };" & @CRLF & _ "" & @CRLF & _ " // create our graph" & @CRLF & _ " var container = document.getElementById('mygraph');" & @CRLF & _ " graph = new vis.Graph3d(container, data, options);" & @CRLF & _ " }" & @CRLF & _ " </script>" & @CRLF & _ "</head>" & @CRLF & _ "" & @CRLF & _ "<body onload=""drawVisualization();"">" & @CRLF & _ "<div id=""mygraph""></div>" & @CRLF & _ "" & @CRLF & _ "<div id=""info""></div>" & @CRLF & _ "</body>" & @CRLF & _ "</html>" Return $sHTML EndFunc ;==>_GetHTML  
    • ExiLeD4EveR
      By ExiLeD4EveR
      'm trying to make an autologin script for facebook which prompts u to enter an email and a password and then opens the browser and logs you with the info u entered but im having a problem with the text entered in the input box. What i basically want it to do is take what's written on the inputbox and replace it on the email form in the facebook site and the password. Don't mind the other buttons in the gui , i just wanted to focus on the facebook button first. Any help will be appreciated
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <IE.au3> #Region ### START Koda GUI section ### Form=c:\users\ExiLeD\desktop\coding\autoit\gui samples\simplegui.kxf $SimpleGUI = GUICreate("MultiProgram", 392, 122, -1, -1) GUISetIcon("C:\Users\ExiLeD\Desktop\Work\Smile\Icon Pack\EcranLcd.ico", -1) $Notepad = GUICtrlCreateButton("Notepad", 16, 24, 73, 25) GUICtrlSetCursor (-1, 0) $Calculator = GUICtrlCreateButton("Calculator", 112, 24, 73, 25) GUICtrlSetCursor (-1, 0) $ExitButoon = GUICtrlCreateButton("Exit", 160, 72, 73, 25) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetCursor (-1, 0) $Lol = GUICtrlCreateButton("Lol Login", 208, 24, 73, 25) GUICtrlSetCursor (-1, 0) $Facebook = GUICtrlCreateButton("Facebook ", 304, 24, 73, 25) GUICtrlSetCursor (-1, 0) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Facebook ;= if Facebook is pressed it creates the email form $Face_Login = GUICreate("Facebook Login", 295, 88, -1, -1) GUISetIcon("C:\Users\ExiLeD\Downloads\Iconshock-Social-Media-Beakers-Facebook.ico", -1) $Label1 = GUICtrlCreateLabel("Email", 40, 24, 29, 17) $InputBox1 = GUICtrlCreateInput("", 72, 21, 148, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER)) $data1 = GUICtrlRead(-1) $Email_button = GUICtrlCreateButton("Done", 96, 56, 97, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Email_button ;= if Done from email form is pressed then delete the email form and open the password form GUIDelete($Face_Login) Sleep(200) $Face_Login2 = GUICreate("Facebook Login", 295, 88, -1, -1) GUISetIcon("C:\Users\ExiLeD\Downloads\Iconshock-Social-Media-Beakers-Facebook.ico", -1) $Label2 = GUICtrlCreateLabel("Password", 16, 24, 50, 17) $InputBox2 = GUICtrlCreateInput("", 72, 21, 148, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER)) $data2 = GUICtrlRead(-1) $Pass_button = GUICtrlCreateButton("Done", 96, 56, 97, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Pass_button ;= if Done from password form is pressed then it deletes the password form and , to add(open internet explorer on the facebook login page GUIDelete($Face_Login2) FB_SignIn() EndSwitch WEnd EndSwitch WEnd EndSwitch WEnd Func FB_SignIn() Global $oIE = _IECreate("https://www.facebook.com/") Local $username = _IEGetObjByName($oIE, "email") Local $password = _IEGetObjByName($oIE, "pass") Local $button = _IEGetObjById($oIE, "loginbutton") _IEFormElementSetValue($username, $data1) _IEFormElementSetValue($password, $data2) _IEAction($button, "click") EndFunc  
    • messilm10
      By messilm10
      how do i get the crash report of any application and any running script?????
    • ronaldo97
      By ronaldo97
      Hello How can I make the GUI is compatible with all screen sizes ??  
      #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 623, 445, 192, 124, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZE)) GUISetBkColor(0x1E1E1E) $Label1 = GUICtrlCreateLabel("Welcome Back !!", 424, 64, 161, 29) GUICtrlSetFont(-1, 16, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x800000) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd How do I make Gui interface compatible with all screen sizes ?? 800*600
      1024*768
      1280*1024
    • messilm10
      By messilm10
      respected sir,
      how could I calculate the time difference using auto IT function ?