AHK-GDIp-Library-Compilation VS ahk2_lib

Compare AHK-GDIp-Library-Compilation vs ahk2_lib and see what are their differences.

AHK-GDIp-Library-Compilation

Gdip_All library mega-compilation of user contributions, compatible with AHK v1.1 and AHK v2 (by marius-sucan)
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
AHK-GDIp-Library-Compilation ahk2_lib
4 9
75 166
- -
4.1 7.6
6 months ago 11 days ago
AutoHotkey AutoHotkey
- 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.

AHK-GDIp-Library-Compilation

Posts with mentions or reviews of AHK-GDIp-Library-Compilation. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-28.
  • GDIp vs GDIp_All ??
    4 projects | /r/AutoHotkey | 28 May 2023
    REF: tariqporter/Gdip mmikeww/AHKv2-Gdip marius-sucan/AHK-GDIp-Library-Compilation
  • How to send the captured image to clipboard
    1 project | /r/AutoHotkey | 1 Nov 2022
    I just googled gdip_all and found this one by marius sucan.
  • GDIP not working Win10x64/GDIP Replacement for pixel scan AHK 1.1
    1 project | /r/AutoHotkey | 29 Nov 2021
    I tracked this one, is maintained and updated. That said it has an issue on its own: I feel like is too bloated and that wouldn't be an issue if it was properly namespaced (but is not).
  • Is there a way to make aoutohotkey store screencaps in a specific folder?
    2 projects | /r/AutoHotkey | 9 May 2021
    ; Download the GDI+ library from here: https://github.com/marius-sucan/AHK-GDIp-Library-Compilation/blob/master/ahk-v1-1/Gdip_All.ahk #Include, Gdip_All.ahk ; The path where your pictures should be placed yourPath := A_Desktop ; The format, for example png or jpeg fileFormat := "png" ~PrintScreen:: Sleep, 100 If (!DllCall("IsClipboardFormatAvailable", "UInt", 2)) { Msgbox,, Error, The clipboard does not contain an image Return } ; Start gdi+ If (!pToken := Gdip_Startup()) { MsgBox, 16, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system. Return } ; Get bitmap from the clipboard pBitmap := Gdip_CreateBitmapFromClipboard() ; Save the bitmap to a file Gdip_SaveBitmapToFile(pBitmap, yourPath "\" A_Now "." fileFormat) ; The bitmap can be deleted Gdip_DisposeImage(pBitmap) ; Gdip is not needed anymore, release memory Gdip_Shutdown(pToken) Return

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 AHK-GDIp-Library-Compilation and ahk2_lib you can also consider the following projects:

ShareX - ShareX is a free and open source program that lets you capture or record any area of your screen and share it with a single press of a key. It also allows uploading images, text or other types of files to many supported destinations you can choose from.

WebSocket.ahk - Connect to a WebSocket server using AutoHotkey

PuloversMacroCreator - Automation Utility - Recorder & Script Generator

winrt.ahk - AutoHotkey language projection for the Windows Runtime

ahk - Python wrapper for AutoHotkey with full type support. Harness the automation power of AutoHotkey with the beauty of Python.

ahk2

ahk - Repository for AutoHotkey scripts including PowerTools

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

vim_ahk - Setting file to emulate vim with AutoHotkey

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

BigBagKbdTrixPKL - "DreymaR's Big Bag of Keyboard Tricks" for Windows with EPKL

Gdip - Official GDI+ library for Autohotkey