Easy-Auto-GUI-for-AHK-v2 VS ahk2_lib

Compare Easy-Auto-GUI-for-AHK-v2 vs ahk2_lib and see what are their differences.

Easy-Auto-GUI-for-AHK-v2

Alguimist's 'Easy AutoGUI' GUI-Designer-Builder modified for Autohotkey v2.0, using mmikeww's AHKv2 converter (by samfisherirl)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
Easy-Auto-GUI-for-AHK-v2 ahk2_lib
5 9
150 176
- -
9.1 7.6
3 months ago 9 days ago
AutoHotkey AutoHotkey
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

Easy-Auto-GUI-for-AHK-v2

Posts with mentions or reviews of Easy-Auto-GUI-for-AHK-v2. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-28.

ahk2_lib

Posts with mentions or reviews of ahk2_lib. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-21.
  • is there a reason JXON.ahk accepts only Maps and not Class Objects?
    2 projects | /r/AutoHotkey | 21 Jun 2023
    I started using value := {x: "y"} after going through thqby's converted libraries for ahkv2. to be clear Im not indicting thqby's libs, but my understanding on why they are syntactically compliant. Specifically: https://github.com/thqby/ahk2_lib/blob/master/WinHttpRequest.ahk https://github.com/thqby/ahk2_lib/blob/master/Socket.ahk
  • GDIp vs GDIp_All ??
    4 projects | /r/AutoHotkey | 28 May 2023
    I doubt thqby's CGdip.ahk would work for my v1 scripts. :/ :)
  • Detecting Focused Text Fields
    2 projects | /r/AutoHotkey | 13 May 2023
  • I NEED A SOCKET FOR DUMMIES
    3 projects | /r/AutoHotkey | 1 May 2023
    [https://github.com/thqby/ahk2\_lib/blob/master/Socket.ahk](https://github.com/thqby/ahk2_lib/blob/master/Socket.ahk) That said, the use case described fits best a WM\_COPYDATA , is not only the standard way of doing it but also easy and unencumbered. I personally use this for when I need to communicate between scripts (and I just fixed a typo): [https://gist.github.com/cd70e009792fc2eb866f9f5caf1e395a](https://gist.github.com/cd70e009792fc2eb866f9f5caf1e395a) That is v1.1, but porting to v2 should be a problem. If you still want to use a TCP/UDP socket, let me know and I'll gladly take a look. example1: Code: Select all - Expand View - Download - Toggle Line numbers global sock := 0 #Include complete_application\_client.ahk #Requires AutoHotkey v2.0-beta ; 32-bit g := Gui() g.OnEvent("close",gui_close) g.OnEvent("escape",gui_close) g.Add("Edit","vMyEdit Multi w500 h500 ReadOnly","") g.Show() test_client() test_send() gui_close(*) { ExitApp } example2: Code: Select all - Expand View - Download - Toggle Line numbers #Requires AutoHotkey v2.0-beta ; 32-bit ; g := Gui() ; g.OnEvent("close",gui_close) ; g.OnEvent("escape",gui_close) ; g.Add("Edit","vMyEdit Multi w500 h500 ReadOnly","") ; g.Show() ; gui_close(*) { ; ExitApp ; } print_gui(str) { } client_data := "" F1::test_google() F2::test_server() F4::{ ; clear log client_data := "" } test_error() { sock := winsock("client-err",cb,"IPV4") ; sock.Connect("www.google.com",80) ; 127.0.0.1",27015 ; www.google.com",80 result := sock.Connect("localhost",5678) ; error is returned in callback } test_google() { sock := winsock("client",cb,"IPV6") sock.Connect("www.google.com",80) ; 127.0.0.1",27015 ; www.google.com",80 ; sock.Connect("www.autohotkey.com",80) ; www.autohotkey.com/download/2.0/ print_gui("Client connecting...`r`n`r`n") } test_server() { ; server - uses async to accept sockets sock := winsock("server",cb,"IPV4") sock.Bind("0.0.0.0",27015) ; "0.0.0.0",27015 sock.Listen() print_gui("Server listening...`r`n`r`n") } test_client() { ; client sock := winsock("client",cb,"IPV4") sock.Connect("127.0.0.1",27015) ; 127.0.0.1",27015 ; www.google.com",80 print_gui("Client connecting...`r`n`r`n") } test_google_blocking() { ; this uses no async at all sock := winsock("client",cb,"IPV6") domain := "www.autohotkey.com" ; www.google.com / www.autohotkey.com port := 443 ; 443 / 80 If !(r1 := sock.Connect(domain,port,true)) { ; www.google.com msgbox "Could not connect: " sock.err return } get_req := "GET / HTTP/1.1`r`n" . "Host: " domain "`r`n`r`n" strbuf := Buffer(StrPut(get_req,"UTF-8"),0) StrPut(get_req,strbuf,"UTF-8") If !(r2 := sock.Send(strbuf)) { Msgbox "Send failed." return } While !(buf:=sock.Recv()).size ; wait for data Sleep 10 result := "" while buf.size { result .= StrGet(buf,"UTF-8") ; collect data buf:=sock.Recv() } sock.Close() A_Clipboard := result msgbox "Done. Check clipboard." } test_send() { ; the connecting client doesn't use async sock := winsock("client", cb, "IPV4") If !(r := sock.Connect("127.0.0.1", 27015, true)) { ; connect as blocking, setting param #3 to TRUE msgbox "Could not connect." return ; handle a failed connect properly } msg := "abc" strbuf := Buffer(StrLen(msg) + 1) ; for UTF-8, take strLen() + 1 as the buffer size StrPut(msg, strbuf, "UTF-8") r := sock.Send(strbuf) ; check send result if necessary sock.Close() } cb(sock, event, err) { global client_data dbg("sock.name: " sock.name " / event: " event " / err: " err " ===========================") if (sock.name = "client") { if (event = "close") { msgbox "Address: " sock.addr "`n" "Port: " sock.port "`n`n" client_data A_Clipboard := client_data client_data := "" sock.close() } else if (event = "connect") { ; connection complete, if (err = 0) then it is a success msgbox("Client...`r`nConnect Addr: " sock.addr "`r`nConnect Port: " sock.port "`r`n`r`n") ; this does not check for failure } else if (event = "write") { ; client ready to send/write get_req := "GET / HTTP/1.1`r`n" . "Host: www.google.com`r`n`r`n" strbuf := Buffer(StrPut(get_req,"UTF-8"),0) StrPut(get_req,strbuf,"UTF-8") sock.Send(strbuf) msgbox("Client sends to server:`r`n" . "======================`r`n" . Trim(get_req,"`r`n") "`r`n" . "======================`r`n`r`n") } else if (event = "read") { ; there is data to be read buf := sock.Recv() client_data .= StrGet(buf,"UTF-8") } } else if (sock.name = "server") || instr(sock.name,"serving-") { if (event = "accept") { sock.Accept(&addr,&newsock) ; pass &addr param to extract addr of connected machine msgbox("======================`r`n" . "Server processes client connection:`r`n" . "address: " newsock.addr "`r`n" . "======================`r`n`r`n" ) } else if (event = "close") { } else if (event = "read") { If !(buf := sock.Recv()).size ; get buffer, check size, return on zero-size buffer return dbg("buf size: " buf.size) msgbox("======================`r`n" . "Server recieved from client:`r`n" . Trim(strget(buf,"UTF-8"),"`r`n") "`r`n" . "======================`r`n`r`n") } } else if (sock.name = "client-err") { ; this is how you catch an error with async / non-blocking if (event = "connect") && err msgbox sock.name ": " event ": err: " err } ; dbg(sock.name ": " event ": err: " err) ; to make it easier to see all the events } ; ========================================================== ; support funcs ; ========================================================== AppendText(EditHwnd, sInput, loc := "bottom") { ; Posted by TheGood: https://autohotkey.com/board/topic/52441-append-text-to-an-edit-control/#entry328342 insertPos := (loc="bottom") ? SendMessage(0x000E, 0, 0,, "ahk_id " EditHwnd) : 0 ; WM_GETTEXTLENGTH r1 := SendMessage(0x00B1, insertPos, insertPos,, "ahk_id " EditHwnd) ; EM_SETSEL - place cursor for insert r2 := SendMessage(0x00C2, False, StrPtr(sInput),, "ahk_id " EditHwnd) ; EM_REPLACESEL - insert text at cursor } dbg(_in) { ; AHK v2 Loop Parse _in, "`n", "`r" OutputDebug "AHK: " A_LoopField } example3: Code: Select all - Expand View - Download - Toggle Line numbers #Include _socket.ahk #Requires AutoHotkey v2.0-beta ; 32-bit g := Gui() g.OnEvent("close",gui_close) g.OnEvent("escape",gui_close) g.Add("Edit","vMyEdit Multi w500 h500 ReadOnly","") g.Show() gui_close(*) { ExitApp } print_gui(str) { global g AppendText(g["MyEdit"].hwnd,str) } client_data := "" F1::test_google() F3::test_client() F4::{ ; clear log client_data := "" g["MyEdit"].Value := "" } F5::test_error() F6::test_send() F7::test_google_blocking() test_error() { sock := winsock("client-err",cb,"IPV4") ; sock.Connect("www.google.com",80) ; 127.0.0.1",27015 ; www.google.com",80 result := sock.Connect("localhost",5678) ; error is returned in callback } test_google() { sock := winsock("client",cb,"IPV6") sock.Connect("www.google.com",80) ; 127.0.0.1",27015 ; www.google.com",80 ; sock.Connect("www.autohotkey.com",80) ; www.autohotkey.com/download/2.0/ print_gui("Client connecting...`r`n`r`n") } test_server() { ; server - uses async to accept sockets sock := winsock("server",cb,"IPV4") sock.Bind("0.0.0.0",27015) ; "0.0.0.0",27015 sock.Listen() print_gui("Server listening...`r`n`r`n") } test_client() { ; client sock := winsock("client",cb,"IPV4") sock.Connect("127.0.0.1",27015) ; 127.0.0.1",27015 ; www.google.com",80 print_gui("Client connecting...`r`n`r`n") } test_google_blocking() { ; this uses no async at all sock := winsock("client",cb,"IPV6") domain := "www.autohotkey.com" ; www.google.com / www.autohotkey.com port := 443 ; 443 / 80 If !(r1 := sock.Connect(domain,port,true)) { ; www.google.com msgbox "Could not connect: " sock.err return } get_req := "GET / HTTP/1.1`r`n" . "Host: " domain "`r`n`r`n" strbuf := Buffer(StrPut(get_req,"UTF-8"),0) StrPut(get_req,strbuf,"UTF-8") If !(r2 := sock.Send(strbuf)) { Msgbox "Send failed." return } While !(buf:=sock.Recv()).size ; wait for data Sleep 10 result := "" while buf.size { result .= StrGet(buf,"UTF-8") ; collect data buf:=sock.Recv() } sock.Close() A_Clipboard := result msgbox "Done. Check clipboard." } test_send() { ; the connecting client doesn't use async sock := winsock("client", cb, "IPV4") If !(r := sock.Connect("127.0.0.1", 27015, true)) { ; connect as blocking, setting param #3 to TRUE msgbox "Could not connect." return ; handle a failed connect properly } msg := "abc" strbuf := Buffer(StrLen(msg) + 1) ; for UTF-8, take strLen() + 1 as the buffer size StrPut(msg, strbuf, "UTF-8") r := sock.Send(strbuf) ; check send result if necessary sock.Close() } cb(sock, event, err) { global client_data dbg("sock.name: " sock.name " / event: " event " / err: " err " ===========================") if (sock.name = "client") { if (event = "close") { msgbox "Address: " sock.addr "`n" "Port: " sock.port "`n`n" client_data A_Clipboard := client_data client_data := "" sock.close() } else if (event = "connect") { ; connection complete, if (err = 0) then it is a success print_gui("Client...`r`nConnect Addr: " sock.addr "`r`nConnect Port: " sock.port "`r`n`r`n") ; this does not check for failure } else if (event = "write") { ; client ready to send/write get_req := "GET / HTTP/1.1`r`n" . "Host: www.google.com`r`n`r`n" strbuf := Buffer(StrPut(get_req,"UTF-8"),0) StrPut(get_req,strbuf,"UTF-8") sock.Send(strbuf) print_gui("Client sends to server:`r`n" . "======================`r`n" . Trim(get_req,"`r`n") "`r`n" . "======================`r`n`r`n") } else if (event = "read") { ; there is data to be read buf := sock.Recv() client_data .= StrGet(buf,"UTF-8") } } else if (sock.name = "server") || instr(sock.name,"serving-") { if (event = "accept") { sock.Accept(&addr,&newsock) ; pass &addr param to extract addr of connected machine print_gui("======================`r`n" . "Server processes client connection:`r`n" . "address: " newsock.addr "`r`n" . "======================`r`n`r`n" ) } else if (event = "close") { } else if (event = "read") { If !(buf := sock.Recv()).size ; get buffer, check size, return on zero-size buffer return dbg("buf size: " buf.size) print_gui("======================`r`n" . "Server recieved from client:`r`n" . Trim(strget(buf,"UTF-8"),"`r`n") "`r`n" . "======================`r`n`r`n") } } else if (sock.name = "client-err") { ; this is how you catch an error with async / non-blocking if (event = "connect") && err msgbox sock.name ": " event ": err: " err } ; dbg(sock.name ": " event ": err: " err) ; to make it easier to see all the events } ; ========================================================== ; support funcs ; ========================================================== AppendText(EditHwnd, sInput, loc := "bottom") { ; Posted by TheGood: https://autohotkey.com/board/topic/52441-append-text-to-an-edit-control/#entry328342 insertPos := (loc="bottom") ? SendMessage(0x000E, 0, 0,, "ahk_id " EditHwnd) : 0 ; WM_GETTEXTLENGTH r1 := SendMessage(0x00B1, insertPos, insertPos,, "ahk_id " EditHwnd) ; EM_SETSEL - place cursor for insert r2 := SendMessage(0x00C2, False, StrPtr(sInput),, "ahk_id " EditHwnd) ; EM_REPLACESEL - insert text at cursor } dbg(_in) { ; AHK v2 Loop Parse _in, "`n", "`r" OutputDebug "AHK: " A_LoopField } example4: Code: Select all - Expand View - Download - Toggle Line numbers #Include _socket.ahk #Requires AutoHotkey v2.0-beta ; 32-bit g := Gui() g.OnEvent("close",gui_close) g.OnEvent("escape",gui_close) g.Add("Edit","vMyEdit Multi w500 h500 ReadOnly","") sock := test_server() g.Show()
  • Unable to retrieve string from Socket.ahk
    4 projects | /r/AutoHotkey | 21 Apr 2023
    Also, checkout the MCode for a callback in WebSockets (v2.0, v1.1 port), that is next level thinking.
  • [Script Help]: How to Correctly call an API in AutoHotkey-V2?
    1 project | /r/AutoHotkey | 8 Mar 2023
  • Chrome.ahk in Autohotkey 2.0
    1 project | /r/AutoHotkey | 13 Jan 2023
  • Neutron and Webapp.ahk. Do you have a preference? Is there something outside those two that the community likes? Looking to improve my gui has led me here.
    3 projects | /r/AutoHotkey | 10 Jul 2022
    I recently got word (thanks to u/RoughCalligrapher906) from these two projects: WebView2 (by thqby, another crazy guy of whom I have a crush #NoHomo), and Lexiko's winrt.ahk which is sort of wrapper for Windows Runtime that might be worth to look into.

What are some alternatives?

When comparing Easy-Auto-GUI-for-AHK-v2 and ahk2_lib you can also consider the following projects:

Google-Bard-for-AHK-v2 - Google Bard Chatbot for Autohotkey v2

WebSocket.ahk - Connect to a WebSocket server using AutoHotkey

AHK-v2-script-converter - AHK v1 -> v2 script converter

AHK-GDIp-Library-Compilation - Gdip_All library mega-compilation of user contributions, compatible with AHK v1.1 and AHK v2

ahk2

winrt.ahk - AutoHotkey language projection for the Windows Runtime

askai - Command Line Interface for OpenAi ChatGPT

AHKv2-Gdip - Gdip library compatiable with both AHK v1.1 and AHK v2

UIA-v2 - UIAutomation library for AHK v2, based on thqby's UIA library

Gdip - Official GDI+ library for Autohotkey

Socket_ahk2