[ Tool ] Quick Icons ( Base64 )

Post your working scripts, libraries and tools for AHK v1.1 and older
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

[ Tool ] Quick Icons ( Base64 )

09 Apr 2022, 00:26

New version available here:
https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=534042#p534041

.
Image
.

.
Icon Maker 8.gif
Icon Maker 8.gif (998.67 KiB) Viewed 1224 times
.

Here is a link to where you can find out about how to use the icons once you have created them.

https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=527471#p527471









************************************************************************************************************
************************************************************************************************************
Version 1

Quickly generate custom Base64 "Icons".

Image

Image

Get the script here:
https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=453165&hilit=icons#p453474
Last edited by Hellbent on 13 Aug 2023, 05:15, edited 2 times in total.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: [ Tool ] Quick Icons ( Base64 )

09 Apr 2022, 02:56

That's AMAZInG! :thumbup:
Is this a lossless (?) image rescaler?
What I haven't seen (being on iOS, so can't test it ATM) - where/how the frames' format (round vs square/rectangle?) is getting selected?

PS. If not embedded already, probably of use (in a stripped version?)? @AHK_user's "Color Pallet GUI"
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

09 Apr 2022, 03:36

BoBo wrote:
09 Apr 2022, 02:56
That's AMAZInG! :thumbup:
So, this is a lossless (?) image rescaler?
Thanks and lol, No!
It just squishes or stretches whatever you capture with the tool. No enhancements.

What I haven't seen (being on iOS, so can't test it ATM) - where/how the frames' format (round vs square/rectangle?) is getting selected?
It only does circles. This was a tool of need and my development of it stopped as soon as that need was met.
There are other methods available here on the forum to get the base64 of a image if you need to do rectangles , and tools like my bitmap maker can crop or resize a image. It just doesn't have the ability to do the circle crop.

This type of tool is actually pretty useful for me so I'll probably do another pass at it sooner or later, or perhaps someone else can take over.
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

09 Apr 2022, 03:40

BoBo wrote:
09 Apr 2022, 02:56
PS. If not embedded already, probably of use (in a stripped version?)? @AHK_user's "Color Pallet GUI"
Love the idea!! When do you get started? :D

I'll likely circle back around here before too long, let me know what you would like to see in this and i'll try to add it in when I swing back.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: [ Tool ] Quick Icons ( Base64 )

09 Apr 2022, 03:49

Looks interesting if used to create interface stuff for tools like…
https://matricapp.com/
https://www.touch-portal.com/
…or similar.
User avatar
SirSocks
Posts: 360
Joined: 26 Oct 2018, 08:14

Re: [ Tool ] Quick Icons ( Base64 )

12 Apr 2022, 20:05

Wow, this is incredible and extremely useful. :thumbup:
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

16 Apr 2022, 22:07

Thank you @SirSocks.
@RaptorX was adding a few new features to it yesterday, I don't know if he ended up finishing it yet but he added a switch between circle and square icons as well as the option to save to a file as a .PNG


BoBo wrote:
09 Apr 2022, 03:49
Looks interesting if used to create interface stuff for tools like…
https://matricapp.com/
https://www.touch-portal.com/
…or similar.
Probably not what you had in mind but I liked the little window design.
Animation.gif
Animation.gif (862.6 KiB) Viewed 2142 times
Saves the icon and the path to run directly to the script. (Windows 8 or higher)

Code: Select all

/*
[Button1]
Path=
icon=
[Button2]
Path=
icon=
[Button3]
Path=
icon=
[Button4]
Path=
icon=
[Button5]
Path=
icon=
[Button6]
Path=
icon=
[Button7]
Path=
icon=
[Button8]
Path=https://www.touch-portal.com/
icon=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
[Button9]
Path=
icon=
[Button10]
Path=
icon=
[Button11]
Path=
icon=
[Button12]
Path=
icon=
[Defaults]
icon=iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAYAAAAcaxDBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACZcSURBVHhe5Z13bFxnut4p01axJbG3KZwZ9t6m9z7DJkqUZHVZjeqFksvacpVt2ZKs4rprq1iyJctyU7X3enH3Ipt7N5uKNCRBCgIE+SdBEqQAucBNu3jyvN/wjIajQ4qS7bX33gM8OMMh58x3fuet3/lmWPAT2qxUhHqGepP6zV30PnWIktf0UH/ttxZqP3Wd+u8UvgcJaIHsof5abALxCPXvKD0g36fkIl2g/krC3Uj9HUrvxJUeeughLFy4EAaDARaLBW1tbVOqvb0ddXV1MJlM6jXz5s3TPWaO5AKKN8yl/qC3JdQ/pu44SQFYVlYGm82G7u5ueDyeGcnr9erK4XCgsbERFRUVmDNnzh3vN6H/SO2g/uA2SRQSzyad0AMPPKAgNjU16cLSkx68u8nn86mLVF1djQcffHDSGCYkFisX+ye/SYyUJDPpBOSkxD3FivSg5UsP0kwkIPUk4UE8In9clIQhufg/yU1KnTsGXVNTA7vdrgsuX3qQ9KSByn18N8nfms3mqSz2W6qY+klsMpA73Lu0tBS9vb3fCVyu9CDpye/3Tyun06kSX/54qX9JiYf9qJsU1JNKIMm6HR0d9w1SD9JU0gM2lQKBwCRJ+JF4njt2SkqtfupH2SSoTyrI5crfD0g9WHrSA5WvfHBTKRgMKrW0tKhkmXselJRYv9dNupHsAGRAUrLMFKAmPWh60gOnSQ/WVNIg5qunpwezZ8/OBSq6Qv1e6lbpPrJvLNmzs7PznmGK9OBp0oOXLz1oetKDmC+324358+fnAhVJFfCDQp1kmTIAiUV6sPKlB01PeuA06cHKlR6omSoUCqljSGOQe46UlIE/yCYxM/tGksXlqurBy5UetKmkB1FTPrx86UGaqQRmrqT1zT1XSmbAvtdNsvlfUOoNFixYMC1MPVi50gOmJz1w+dIDNJ3y4U0lqZ+1853Q99ZZSZ2ZLY2kT9Zzcz1wmvRg6UkPmJ70QE0nPWDTKRwOq9dJCaidN/U/qO9cp0pAzhbtks2lR9aDpic9aCI9SNMpH9B00gOULwEmmup5TWIoc+fOzYX6r6jv1FHJrHj2gFKz6YHTpAdPpAdJT3qAZqp8OPnKhyWa7neapG3Oq1OlTb2vTeJm9kBGo1EXokgPokgPmiY9KDNRLqT8n/OlB+heFIlElKTzy2VB3Vc8zc4aFRcXzxhirr5PkCI9aNNJD9K9SAMqktkyjQf1z6l7qk+ln80ewNHpgtcXhi/Ek4qE4QkE0Rv0IxoMIOKKIu6JIBqIwe5LoC/ghy/KJBWMTYKqPRYwspcTTrpd8EcC8PiY2AJx9Zw/PIS0LwoHX+8OuBCL8z3DXkRiYQRCfoRDPkT5GvW3gRBiwTif5+9DcUSifK9oEsEA/yYeI5SoUiREOKJwkK8NqdcrRfm7CWDyWBTi34uCodswRWJEeTNV99SeZmfZS8vKeTA5aSc8fgdCPjcS/hAiTj/ccS/cfv7O4+IAvAj4I6pbCvrsCLj92eyvgdSuvGZxAW8E7miMF4m/ixBAxAMfTzgRtMMZ6UOMEEI+P2IRQuOxg4QW5IUL+AkinEQgJs/xhOOZCxaN0XN4kaMxgotHCIYXSek2KDEITZrVy5gEZjweRyKRUI/ld7lARQ0NDblA/xM1IyvNFvASjJ3OXp6AS1mGP0h3D3iRiESRIoyA10ErpXsFPYgEaU1eH8IEHIj6EYpx8BysSBu4gjgBV352R5JwRgWym8ehVVFhWmaKF1CsP+yTY2cAhglTPfYFFeg4rTUUT8EbEkuk9dKDIjI2glcXwjvZfXOlAdWsUmDJ8xq43Odzn5O/yev5Z1TwZ63TbDDA73PxhGh9rghcziB6XA5097XC3tOsSqiOzl50O2lRjh4Eu+wIOwmaJx4OZgapTmDCCsSKxGI1uPZeB9x9XQja2xBydsHj6EWPw63mUfv4OOjqmnBvhpYwYUd4UflzOCEn6EXY7oS7145gnwuuPjscvR3wOfvQ7bGjw+GCx02vmpCbcnHsIpkTFck4tJwg44vx4kpICKv3o5VPgM1Va2trLtD/TVVTU24SF9QfS7xwuMJwEoInwJrMHcP6VRvw6isv4PCxV3D0nXdx6vjreOfUcRw7dQTHj7+ED944gn179tLyaD3+NgVQwInkKufClRN64/hJvMvXHz56HG++eRInTp3Ea8d5vKOv4uSJI3jv7RMIxxMqZgvQEOWOJeCkZXa5HXj75Cs49uZrOH7yBI6cOIoTJ4/ineOv4eSbJ3DyZOZ4IvX4xAmO8bjSG28cVdp/4Als3bYDo0uXqzGJ98QZRpKJ2JRARXmTKHKnYsota51yHyYYoJnTKsIxxkqvC+O7d+DK5U/x+rlvsPG9v42dJ/4Wtr/2p9h04rfYfOo32Hn81xh68Zdo2HQSXUt2qkEKSC0JaTAFsNS0V29+g88uX8Pag2ex5fkz2Pr8OWx94QL2P/8exp8/j7XP/ALtw3vRlXoMgXBKhZpQNMVkFEVXUz1uXL+Kc5e/wNYnj2DLz45g24HXMP74y9g1/gp27nuFPz+V0fiT2LbvALbv2Y8de8axffc+bNu1G0seXY3RR1dh1boN2LR5DOvWb8Dw8LCCprl5vmKxmJpd0zjNmjXr/3CvG0uzdadYp1iXxKn+MGMj1efuwZ6dm3Hp4meE92sUP/n3UXDwz/DgE3+Ggsd/i4J9v8KcnbdQ+MRvMHv8JowrXlGuJAMTgAJVc3eRBPgvvr6G985exoOLX0fh4kMoXHIYBctfw5xlT6Ng5DXMTR1E8cjLqB8ahz8+gjStRkJJMpKAq9mKGzf/CCfOf4WH7aOY41uJgr5leMg3jEL3IhS4hzCne0Bpbmca89oTeLiN1tUSwvzmAOY3elFjbUJLtxMOb1DJ7mZIYeUQicaZ2DLJKRdkrvLaUll3cMeWvclWVVWlILgDzJR8Ix8DfR+D/Piu7fj8o0vY9O6vUPDM7/DQ038TRYT58P7fYeETf4rSvd9g9v4/xsJdn8MY3aqsUDK9ZplykQSwZFJZsHD15iVcuHgFBcvexoI1b6F05SksXHEU5qWPo3TkMEqXPI2y0WdRE18HU0MT3I5OuMMx+JJD6OjqxLWvPsIHFz/B3I4EKkMrYQysh9EziCb3KGodA6h1xrmPwmIPwdrrR123G/UddjS096KxrQt17X2wtHSjtrEd5oY21NY3w1LfhIaWduaG7mmByoS6xov6LXXHJosA1B90dTFRiFWJizFAS+Z2Oz3Ys3c7Ln3yKTaf/BYPPP438Mj4H2Pu+J9g4Z5bmE+YC3ffwCM7rqJoxxeoTm9FncWgkpUcQ1mmlC3cC9T21jblsmdp8Q8MvYKKR19F+dLnsHD0RVQvfgaVi59F+dCTKBvZB0toLayNLeju6UOQcVRqzuaOJl6QGzh37jweaB2E0b8EJv9imJ2LYLQPweJIwmRPwupMwdIbhrXLi4Yut4Joa+tFbXMXmtu7YLHWqfBWX1+PuvpG1DW1wtrcCWtrD8VEyfgdiwYZbiSmMoTRemMJlm+sw/NaUlnslt2y7i6TAQJTlAGQKV/cbm8W6JaTv0ThgT/BgnG6+b5fTwC9Rcu8SqBfomjnZ6hOjimgLpZdEcmcEvSDGSsVqG0trQromY+vYNbgS6h89GVULHkWRYufI9CfoWrkaZQPPIHyRbsJdM0koNFwAq3tt4EWNqdh8BGmdwQW5zBMfYO0zBgM3RGYu4Oo7SDIDqeCKdZZbWlEfVsPausa0djUglqLDfX0ALFMW1Ob+huBbmVD00lDktpakpTUqRIKEqmkSlx5N/kmuX12Jl7cXVmTSOq1PKCfiIWe+Aaz9v9KWeXcPd8qkGKdYpkPb7uC4q2XUZ3YhHqrEW5Xn7qy4jaqeCdYcZmujs4M0IuXMav/RVQspRY/heJFB1Gz6HFUDhFm/zitdCcswdWwNrBMI9AQKwgB2tbRnAU6qyEBk2cRzJ4BWuYATL0p1NIqTR1eWDo9Cqa4dkNrJ8x1TahvblPHE6BmWwNsvFjynPp9UyfqCdIir+ExbF0utHWxFpcKIJlg55ZEKpVSQGUFjMaNukVlt+wUXXNzcxZoMCx71mR+tpseH/bu24FLly5jyxs3Ubjvj7Bgzw3M231LWeSCnV+gaPsVzB/7BMVjF1EdXY/GOrMCqlmouIuWPTva2nHzxjWc/vgTFKSeJcynUTm8H6XDT8IwuA9VA1RyJyr6t8DqXzEB1MGL4keCXVJ7p1QJN3D+3IcosBKeux9mWqW1N06rFHmVhQnMxo4+1DW3q2Mot6bEIi0NLQwdPcpaJYaKmytL7vaoEFFjT8Dc6YOtpQsOp1vBFEkOEKAyya5xY7b/n9yrTVJ+djbe5XJNAhqeyKxeT3AC6CVsOXYNhQQpEB/eeRXF2y5h4bZPFcgFmz5GyabzMITXKKAet50Wmek2JIRIKBG4EkNv3byOMxcuoSD+NCpolVUDu1A2MA5j/05UpnegKjaGqtRGWH3LYKNlaUCTkRQ6u1pxnUA/EqAmr4JZ2xekRYUIIQgzk4/ESYHR1N7N1zeoOCmL02SigwBQUmlAXWu3SlSW1j6Y213KqhVEexSVfWlY7TFl3ZKkwlF2YYyfYhCJOEWwef29hM7J8VODmRHdfQKoh9l+z/gOfHLxEsaOfoXCXdcJ8TLm0SqLtlzAwrGPUbz5PBZsOIviDWdQE1wJq7laJSVxeYEofbcAlQGJy2eAXkRB9AlU0CIlkVWkd8GYJsjEVtRENnC/Fhb3Ylht9ejpdqgJkFQ0ja7uNgX047MEWkP37GO8pHvaOr2MmV6YCEqSS31Lh8rckpXV5Lg3c+vm2LFj2P34Mygz1aO23aHirKHDB1N3iMeKwtwTRpV9AA1uJrWWTjS3tqixC1AxjvgEUAmRGj9qFXW7d5cgKyDl5EUa0EgoCi/j6N79OxXQLUc+R+GOr1C09SPM20oX33xGwSzZeBoL1n+AkvXvM+suVxYqSUldlAmX10oQcfmvb93A6fMfoyA8rkDWJDejIrUN5uQGVMY2wBBci+rYKthygTJ8CNDunnYF9OK5cyioYILp8RGMnYmHcCgTXdxU36qSjFinWKa0tCFm57Vr1+LKlSt45+xFFC6ohK3bp+KloTOgEplUCMaeKAyuITS4EqqsklAos1gCUZtEEeVNmMhiYtXgqydkMZUGczLQ+CSgY69/jge3f0Gr/BAP082LN51G0SaxzA+wYN37KFn3c2bdUZXlO9qbWYZ1qO6it8+hTkpq0AWPzFdAzwjQ0B6C3A5DnCCTW1Abf4wxmEADq7hfCRtLISvLGw1oOtaP3lyg5Z2wEKiZsbC+jbVlqx1Gyd6sK41WujrjpZxbX18ftm3bhgsXLuDWrVvY/eRzqLS2ooGhQizS3MfY66BFuvphdQ8wyfF9+xhCGG5amhsV0GSSGT7Nrm0CaG7XRF2l1AoJ9YQ0/rlA1RQZa7BImD25l0lpzw5cvHQFY0cuY/bGcwriwo1nsHDD+yhe/3OUrn0LFSuPMWOzBBp5jlmzG88deh1Xb3yLL768gS+/uI7r177G1S+v4ca1m/joylW8df5LVLCGLIltxrzoGOZGNqE6sgXlfsL0j8LsHoGtl1ZDl5XwEQ8zjkWS6kSu3vgcp89dwqwHq/heQcZDO2y0JFtjAy26kdbJmrKhEUaLFRVVldi3bw8uXvwIF86fwcYNa1Fg7EF5F2tUWqGVMVP2Fu8gDJ4lqHAvJVxaJ8NFs9WgLkYwMYh4elCBlEwve8k5Gj/q31C3M7zEmMlAEzpAL2Pr65cxhyCLNn6Aosfep1W+h6I1b6N09UmUs9OpWH6INeXzKBp9GfOGnkNh/AAeiIzjoRgV2YMC/3YUeLfhIQ56gW81yhgrq8MbUcvKwOhfirrgCBoiw6q2NLkWKaC1dC0Vj9kpCVCx+gxQWnhhKRpb2AUxAVmbpAyiaFWWOtaVjV20WgesLU6U1nahYIEZBcUNKGPraWz3MFQEMiVWL5OPKwWbf5hJcAi1LMEk85tYVkl55PU4VGZPJNPM9Gnl9iKpqzV+hYWF/4X720DlhtSdQFn30c383gD27d2tyqax1y9iLkGWrv8Fite+h+LVb6F45UmUrHwDZSteJdCXULHs+YxYrEtJpIr1RZnasiy9B9WD4yhiJi9KjMEQJUzWmhZaZGNouWofRTWeYRboQ6jrYXFOoA5nj5psjkdTvPiduH7jS5w9c4EZ+xHUs360NTaxAbApoHX1dPk6GxoYXuo6uhhXe1HDbG7sDbEciqCGbalYpJGdVDVrV5HJlUY9fydllq2+Di02I4v9VnTZXYgFvRiMS3GfRDhO64xlgAonjd/ERMnte+5SV0kG0ySTumFmVYlbMrGrAd16+GPMWfcuyth/l6w6haJHj6F4+WsoWcb2kdZZufwFBbN8yZPsyfejeGgvSgd3o2JwF+vK7ShLbFYyR9bBnN4AIyFWBZegKsBux78M1YEVqHGtgIEnW2tPoa4rADNLnlygPT1dmdaVWX5WwUMTdaWVqmX7yHqzsYMhoJcZuhf1LIestFI5jkVKIrH47jBqHGlUu8UTRlHjXcqfBxgzI0xsPTCaTXD2yLJMl2KRjjEZxqQpSahuKR2PZa1U4zeh20BVi5UDVJKRAJWyJ+gPqRikgL56AXMIs2LVSZQKzKWHUTL6EsrY7Ug/Xr70IC3zGRgWH1QdT9XQ4zAOHUBNejeq4ttUfVkZ3gCbJJ/IatRSpezDS91sGd2LWKTT7XoGYOTJWXp4gh0edjR1sDu6FdBELM3k1p2ZvjtzVo29rqE+A7Sxnu5NV28hlEaWTgokszhB1rb7YWFZVGePK0l7KgnIIvMAgWWoIlRD4FGYgytQxdhtjw6qMmk4Gc7MkSbE3VnYs2RKxTK3TPSAZidF7gTKdnECqNzTUUA/vohtL5/D3FXHUbbyKEqXH0bZ6CGUMWaKe1cSZPnIz1BG9y5J71WFenn/XlWoG0RJ1pexjawx19MqeQKRlTwZnoR3FCbHMOoI1cwEUe+OwdzL+NbFYr3dmQFq76V1skuJ9zNJ9OD69eu00LN0tUJloaqdlEQkExttLKF67Kjvc8PWxxbUTit3RmF0J2FwpxlOBlWIMTJOS9w2h1fBFF2nxlad3Ibq1A7UpzfBnViEOK1T1Z/JIcQTKQVTZve1mSeN34Sms9AMUOl0ZLJZA7r15dOYt+INlK54jS7+CspHX1AgVZxk61gx+DhK0+Mw9LO2ZDlUERGAtMjUJg58jXIva4huzeBvpXWIq5ntg2iUCQ7JrHRJA8sVUzd7anFRwjFZLbeBJgbUYwGqZptmzWbhLjG0B5Zmlk1sH6XIt9CtbT1ijUm6MkMHLd/UwxbVzvrSt5QhZrVSdXAN4/hjMMU3K6CV0U2oYWyv7t+DhsR6WuowQrGkskbJ7PFoLFtP6wHNfiBLSgANprxgKqDbDp3G3BVHFNCyZS8pN68aPYiaxU8p95bEU5KkVQ7tRjmBVrIDqkpsQgWtoCZES4isUnFTrLKyK4VKWqX04jU9IRjtLH/o4vU9bAEFSjstLAdojPFTA3rtBi1UgBbORUNTHxOTTIK41YSIXIwqxk6bPcx4yYzOECAdj6VZ5j2bVJyV+GkOLud4eJGl0ohvRWViG7VDwawefkLtG+Nr4Y8k0M8EnWT7GY2lVBwVmMJK4zeh21leim4BqUniRXLianiY5aRs+uzTzzH24s9RPMpYyexdteg5lC56CpUjB9iDs+MZ2M/EsxUmz4iCpsBFVsASXoHaEF2bScco7k0LaXNE6JKZfrmBQKWIttFNpUg3djlUfy3uK92OzAxJY6CNTcZ648Y1XDj7AQpmm9HYRZi05upesWoph1JoZrFu6YnB2BFQJVUzM3cT61JpI01si+1sQ+s9y1AmnpPYrSyzNr0FVYNPoXxwP6pHXkD1oj2Ynz6AJrsfEY+T8XMAXrr9IEtJGYe0sRo/9vX/lfvbK0SkWNYGrMx5GqBFjJflS2iRw8+oGaLK4X0wDtAqGS8r0psZq4ZhqTXAajFmZKqBxVgNm9mA+lqj0pyiUpTUshCnFakemrJ2uWFudaq99OIyuSHTa9J6SnGtuZnAzQKdU6smjyXeVjFeWrv87HrSsHmYcJyDyu0tdc2qjk0mM27rdfTim5tf4JVT5zE7yNiZ3KNmuSokeQ6yvGMekEnuqhGe48jT9JxF8PZ2kQnrclqlTNAIl9wZJwL9D9yr/lM9ITPX2oBzgcpjbzCggF65/BnGXngXRXwTNUPEq1nKmlLc25jaicrULlSxFzc5B2hV9Wjp6ERnbx86enrR2dWj5jRl39zShm3bN2P1JnZFzMZGljS1BGFtc6G2mRm6niBpmTKDLtNtVquVbm7PZtY+u1MBPf8hs/wj9UxAXlUKVTuDrBDYRjImV/qWo4wZu5RjqWaM9ThoYXIfPxjDqpXr8M3VS5l7WgG2vOn9KBs8gAX0uCpWJjXLMxVLFauXqtGfodyzDt1t7OcjTqTDAe4HFFBphjR+s2fP/gfcq5lm9YQsMp0SKHv6fXt34vNPPsOW59/BQsaX8kHGmX4OhIV6Vf82mJjBZZaoMr4GJpYlTSxhZHZHSo4ULUOUTjGoh0Nw9vbglze+wukPz+HBYhMhBDOTuo29auZc6kjJ3Eoy7WathUOSkgCly9kdLpWUPvzwQ3Y+bSpcWHqTqGF1ICHEyPLL4GLY8S5TlYP09Z1tjSonrNn4GE689SZj8FXsfvlNFKf2oGL4KSxgIi1azBp65CAMy15EJcvByhWHUbyEgD3L0drQAl/Aj1Q0BB/ziwDNmxw5Q6mPP6sn5E5eLlAZvACVfS7QsWc5CFqlFOk1yV0oV2XGRphjDOzRDaiKMG4ywdTZLFmgqm2T+k1cjnuB8w17einMH5hXAxPjpZq/FKtssKCpJTMJrAdULrQG9Nx5FvaVvZn5UHZVBh+Lc2c/98tg8qbZgS1WfXq1yYzHVi7GiWOHVWL94pNPcODoL1C/dD+tkx7GpFpGVzdJQ8LKpUzywtLX2U6/hlLW15LY6ukpMkkUSRJmMHNvLO9DZOqDubLyQT0hN53kjzSYuUB9fF4Bvfwpxg6eQHE/i/TUZhhiW1ER26TmLVVJFJIyhOVPl4chpAGBQIhxK824leJxE6oXTqb64XR58O2Nb+mylzFrThn75i4W5s2oZ9tosZmo2jtcXouhMh5x+WvXeEEufIRZJjeMbBvN7iUwstuysGWV+VhjlO4eXYtS1rqVLhbkK8awYf8rGHvmLYyMHUTd0E7MHngCRlpn6WgmXlYT5IJHj6BKmhTW2AtWHoaJsVTev5EeFwj44KOXpdn0CKu8RQ/Zz41mFzjIoDWYMnjVERCGl/t947vwuXRKz7A7YuFbxU7HEN2MClUQr2IWX6lOpDrAhET3tVmsbFlZasSlGM+UGXJcSQp2pwNf3/wG589/yvd9CI0sacQC6uqsBNisbk+ou4+SmJiU5O6kjE3cTNTTa1dAZYL6AWtAFeq13uUwBEdhZStZzVLIEpHsvZcXe58qhWTeoJCdWkFsG+YMSJjaj6IVh5iInmXVchC1qw6hZPGLmDt6mCXhEZStPoH5q47xuIOwMqF2dbZDVgL6aRQD7NhknYHGjfq/VHbBQ/aevMwbzhzoOhjZQlaG17LjeRS1geWo8VN0O5nsrbc1qJY1GWftKLM0E32wWKnco7l58zre/+AcCh6YhcaGVl6AOu7rYK2jtUqBPlE2WRtb1c00rWwSy5APa127dgMffESgthCqvawp/bRKlmnWwFJUx9YS6DJ2PZvZrWXq4arkdlVbyu3pmkVPwsRmZD4rlYpRwlv5IhPRISxceQol699EyZq3UbHxNIpXn0KVpRT1FhO8TtbpshCOpVMqHlLrDjRuTEj/jPvslp21l094aED70/EMgP4h+P1BZvld+OizL7HhuWN0ozUc/Bo1kaFax8Aor+SI6o1r7QlmbWZbuonUaXIsmZgVGPJY5hIlY3996xrOnX2frSMrDFqn3KqQetFYJ7dy7eqWhNznkRpTrFTWQ8lFlpAh1cKXV7/CObnJ1xRn9zXCGL6ORfoK1MVWKu8RmFWpMcZIwhzYRUtk3GdlUj7ypKqhpW2WKcaiZez2VryOmtXHULmK4WzlScxf/TYMi57nGGaj2TAH3S0e9IXoIQkvUuG0uqjyeXyNG3WUym6yED97o04tw+GJJ+Jhdes3muxX01QH9u/DRyybNj/LN2ehbpJ4yeAvszVmL+Omi27nTKpJB1VXWiyqThOQAlS7UPKz1Lw3v76F02fP0EILUccOxmBjTcqORjqjhs7MDTO519PQ6cgU9izmtfUCctPs+o1b6ibfvC62sBGOJczQE1mv2shyunhNalypmoV55QBr5cGDrJefI1S5Zf0STCueg2Hlq6hYeVxBFGssXXNCgS4dOYTK1k4YTVa08gKLR/kiLmZ4ZnnCDIQT+Usb7/jcfbbAl/svyqomJlTFIqLhCHaMbcLJN09h3d6nYPbJ5MISNTMkNafcOjDJ7FAvu5PeoLpzKNlZ4oxYlcRNgap6YR5bQL/7/gc4dPgIHpw3X01qGGx0e8Js6ZN6lJ0SOx4p2Js67VkLVUmTWV6S2runT+P5IyexsG8Q5ij78vhGGNJjMA/vYkjaxQ5uPKORxxkbn0TJ6NMqVhYtfR7Fy1gerTqpphxlcYXMltUsexmWwb2ZdpWdVH3NArRZPejtZiIKOlT7HQ3QICIBtHe05cKUDxHfsWXdXr4URU5cakZZUq3cXu7yRWShbAB9zNx98SHUO6OqfpSSwkKLkrhp62BP3WFXy1gEqFi7HCsXqLi8QHW5vfAxlPQ6PWoxgbp3ziRkaWIN2sYyqoXPyWoPWoqEBPl8lHiKXCBZ1OXoc8Lu4ViSK9DEyqLOPwoDOyODaxiVHnpNYDWMwQmFMvFeJIlUZExsVDcDK/2rMst22GzYaqtgMVUxl1jgaK9DwBFWdyuiHGeIVumWxR9kUllWmgVaWFj4Fvd3bJKhslN50gHIrLRAGBgYQH+/TEpEFNhIIolwmpmPyUJughmYTIwiUy1MtWbU1nJvMmVuHTCGahYqkscicXu5EyAXTX4WWNJYSDavMZjU8pgqupscXxKStJ6ay8vFkNekAj3oZysoCcLFPttSW8P3roS5tpqvr2G7W6ZkM1UqWc3c8280VRpqUGM0qEQsybCttZGZvFXNtTrp4rLcPRhjvUnrTAciiMfScCaisLunX9eUu2WzvSSndDKVtSZxNbkDKvejBbJkbVnp6/d5JuRiEe/k1XSpdfg+V+ZrMcSiBJ4AkOOI5Gd5XmZupGuSiyS3d6UJkDuLXu5lptzj9bOQDqi9hAh1X5zHkQuTOVaSLXFKzZ77wkm1UlneX8YT5ng8HIcmr99zhxxOr3ofn9ehlrcHvR6EAnK3N7MmwRsLwhfvhz/CxBp2qPWprlAEJTlrmhhH/wn3U25S5GeTUzMtTGKnwIywbJLVxBK/xHLTfCzWJTC01lLriETK+tJS0GcsUCDKcTSoGTBywfoz64b4nPa3Cb5eTig35srz8npl2RPHCsZScCUWK4Ce2FBmtSDHFkwPwM8LJTf0MuLrJiTr7zOS8OVCIswELEuOwnF4oiwPE/1q7jNBcLG4E6HIMILhIRqAW1lqT+8dn1lyUdNu2fv0c5jFYhyknJDAjDDbx1IDBJpkpstYioCW2WxZkSaLqaRmFegSZ9TveeIaULnyk35mTIpEOfjkAILRBCW3GZIKTJTeIcuz5cLI7LiMQVuEIccQ7+iXJYaEuiRizxw36EU/XVItSgv51PGC9ALtQwrq0yb0Mk1yXFleI7+TuxKJcIDH8NFKZSknLzwtVmJnLEzIMvawDyXFxVmYdPu/y/1dt0mxVOKgnIxmJfcrzbLuVQJqphLY96uMm08vWaChcaH+kpoyduZv2Q8vSPDVYtf9Sg/UdNKDdTfpQZqp9ODp6ZFHHskF+iU1402sNHuvSbKgHqippAdpJtIDdTfpAbqb9GBNJzGo3Gm6WbNm/T/up/04jd6WrUtFUrLowcuVHiQ96YGZqfQAzVR6sPQkAHMlDUXussW5c+e+zf19bdkbeHJA6XpywfwQIHMBTPX8dMoFo/fcdMoHKZI6+uGHH87CpOSLCLKzSve6SdDNJig5sLyJHqzplAtGT7lA7ld6gGaqfIi5KikpycKkq0siClHfaZOmP1ubype36EHLlR40PemBuVfpAbqb9MDpSXKHdt4iJujv7asy5UDZA8sb6YEU6YGbSnqANMmJ6z2vKR/STKUHTk+5c50idkSfcP+9bpO+fVHeUA+SJjlpvefuRXpA7lV6sPQk3ZommcfI7dXp6v+I+x9kyy6KEMkEcj60XHB6z92L9ABpEgh6z4vyYU2nXJAiWfqdC7OwsPC/cf+DfRXmpK8cEpWXl6uT0IN2PyDz4eQrF8Z0v5tO+RA15X0NhlimfHz7B/8KTClos+WUSO78yWyQHqCZKB+MnvTA3Iv0AGqSsU/x1ZfqYzK/j03qsElfQSR1qhT/esBypQcrX3pAZio9YFNJJr9lHjavpRSX/xfc/2BuPt0m2f9/UdpA1O0TGayAuReQenCmk7xH7uOZSADmSuJlbgck+iGy+b1usvJEvtAkOyj5AJn2iRI9eJpyAc1UeqDupnyQ8j1M+VZJ/eX3WWd+1006qju+r15iq3xUXA+mSA/YdNKDNZXyIYrkXn5u56OJyefPuf/OHdAPscm033+mJg1Yuiv1OR8dSDPVTKHlS+YfZHKjsrJy0phE0krSxT/g4x8lXs50k8HJx8Wl5Jh0ApJJpSGQE9WDpic9kJry4WkSiCKZEBaQuXWlJsL8hvt7noL7MTcZ7KTuSpMkAvnQqcDVbr7dDV6u9CCKZEm7HFPunk717yv43v+Q+x/969W/yybxNbuIQk+yDkCKalnwKytKBMzdAMqF0P7JiswtyF1avWNrIsh/zX2K+iuzicXup6v9W+51T/oH0J8T5Mfc/0Fb5Ew26UCeIdzfca8H4r7FePnv2X9/yMc/2hf8/xQ2mXNV/zqNQP4e9/JpCl1gOfoLXpB/Sgu8yceSBAXgj5ytCwr+P5aXjDim/6NAAAAAAElFTkSuQmCC

*/
;****************************************************************************************************************************************************************************
#Include <My Altered GDIP lib> ;<<<<<<<<<<<<<<<<<<---------------------------     gdip.ahk
;~ #Include <PopUpWindow_V2> ; At the bottom of the script 
;****************************************************************************************************************************************************************************
#SingleInstance, Force
SetBatchLines, -1
#NoEnv
Gdip_Startup()
Buttons := []
loop, 12	{
	iniRead, path , % A_ScriptFullPath , % "Button" A_Index , Path , ""
	iniRead, icon , % A_ScriptFullPath , % "Button" A_Index , icon , ""
	Buttons[ A_Index ] := { Path: path , Icon: icon , pBitmap: "" }
	
}
iniRead, dIcon , % A_ScriptFullPath , Defaults , icon , ""
DefaultIcon := { Icon: dIcon , pBitmap: B64ToPBitmap( dIcon ) }
Loop 12	{
	if( Buttons[ A_Index ].Path ){
		if( !Buttons[ A_Index ].Icon )
			Buttons[ A_Index ].pBitmap := DefaultIcon.pBitmap
		else
			Buttons[ A_Index ].pBitmap := B64ToPBitmap( Buttons[ A_Index ].Icon )
	}
}
ScaleFactor := 1 ;1.25 ;2
Gui1 := New PopUpWindow( { AutoShow: 1 , X: 1200 , Y: 100 , W: 290 * ScaleFactor  , H: 559 * ScaleFactor , Options: " -DPIScale +AlwaysOnTop +ToolWindow " } )
Gui1.DrawBitmap( MenuPanel( Gui1.ScaleFactor := ScaleFactor ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
Gui1.Buttons := []
Gui1.Handles := []
Gui1.Index := 0
Gui1.MoveButton := { X: 115 , Y: 481 , W: 61 , H: 61 , Label: "MoveWindow" , Hwnd: "" , Parent: Gui1.Hwnd }
_AddControl( Gui1 , Gui1.MoveButton )
y := 29
Loop, 4	{
	x := 29
	Loop, 3	{
		Gui1.Buttons[ ++Gui1.Index ] := { X: x , Y: y , W: 71 , H: 71 , Label: "Launch" , Hwnd: "" , Parent: Gui1.Hwnd , Index: Gui1.Index }
		_AddControl( Gui1 , Gui1.Buttons[ Gui1.Index ] )
		Gui1.DrawBitmap( Buttons[ Gui1.Index ].pBitmap , { X: ( x  ) * Gui1.ScaleFactor , Y: ( y  ) * Gui1.ScaleFactor , W: 71 * Gui1.ScaleFactor , H: 71 * Gui1.ScaleFactor } , dispose := 0 , AutoUpdate := 1 )
		x += 80
	}
	y += 120
}
tog := 1
return
GuiClose:
*ESC::ExitApp

!RButton::
GuiContextMenu:
	if( tog := !Tog ){
		CoordMode, Mouse, Screen
		MouseGetPos, x , y 
		Gui1.UpdateSettings( { X: x - ( Gui1.W / 2 * Gui1.ScaleFactor ) , Y: y - ( Gui1.H / 2 * Gui1.ScaleFactor ) } )
		Gui1.ShowWindow()
	}else
		Gui1.HideWindow()
	return

MoveWindow:
	PostMessage, 0xA1 , 2
	While( GetKeyState( "LButton" ) )
		Sleep, 30
	WinGetPos, x , y ,,, % "ahk_id " Gui1.Hwnd 
	Gui1.UpdateSettings( { X: x , Y: y } )
	return


_AddControl( Window , control ){
	local hwnd 
	Gui, % Window.Hwnd ":Add", Text, % "x" control.X * Window.ScaleFactor " y" control.Y * Window.ScaleFactor " w" control.W * Window.ScaleFactor " h" control.H * Window.ScaleFactor " hwndhwnd g" control.Label
	control.Hwnd := hwnd
	Window.Handles[ hwnd ] := control
}

Launch:
	MouseGetPos,,,, ctrl , 2 
	if( Buttons[ Gui1.Handles[ ctrl ].Index ].Path && !GetKeyState( "Shift" ) ){
		try
			Run, % Buttons[ Gui1.Handles[ ctrl ].Index ].Path
		catch
			gosub, NewItem
	}else
		gosub, NewItem
	return

NewItem:
	While( !GetKeyState( "ctrl" ) ){
		ToolTip, Select a file / folder or highlight a url and then press "ctrl"
		sleep, 100
	}
	ToolTip,
	Backup := ClipboardAll
	sleep, 100
	Clipboard := ""
	Sleep, 30
	Send, ^c 
	sleep, 100
	Buttons[ Gui1.Handles[ ctrl ].Index ].Path := Clipboard
	sleep, 30
	Clipboard := Backup
	While( GetKeyState( "ctrl" ) )
		sleep, 30
	gosub, CaptureScreen
	return

CaptureScreen:
	CoordMode, Mouse, Screen
	CoordMode, ToolTip, Screen
	MouseGetPos, x, y
	Output := { X: 5 , Y: 5 , W: 100 , H: 100 , pBitmap: "" }
	Gui2 := New PopUpWindow( { AutoShow: 1 , X: x - Output.W / 2 - 5  , Y: y - Output.W / 2 - 5 , W: 500  , H: 500 , Options: " -DPIScale +AlwaysOnTop " } )
	Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
	Active := 1
	While( !GetKeyState( "ctrl" ) ){
		ToolTip, Press "Ctrl" to capture icon. `nUse Shift + mousewheel to adjust size by 2`nUse Alt + mousewheel to adjust size by 10 , % x + Output.W / 2 + 25 
		MouseGetPos, x, y
		Gui2.UpdateSettings( { X: x - Output.W / 2 - 5 , Y: y - Output.W / 2 - 5 } )
		Gui2.ShowWindow()
	}
	ToolTip,
	Gui2.DeleteWindow()
	InputPBitmap := Gdip_BitmapFromScreen( Gui2.X "|" Gui2.Y "|" Output.W + 10 "|" Output.H + 10 ) 
	Buttons[ Gui1.Handles[ ctrl ].Index ].pBitmap := CreateCroppedIconBitmap( InputPBitmap , Output ) 
	Buttons[ Gui1.Handles[ ctrl ].Index ].Icon := Gdip_EncodeBitmapTo64string( Buttons[ Gui1.Handles[ ctrl ].Index ].pBitmap , "Png" , 100 )
	IniWrite, % Buttons[ Gui1.Handles[ ctrl ].Index ].Icon , % A_ScriptFullPath , % "Button" Gui1.Handles[ ctrl ].Index , Icon
	IniWrite, % Buttons[ Gui1.Handles[ ctrl ].Index ].Path , % A_ScriptFullPath , % "Button" Gui1.Handles[ ctrl ].Index , Path
	Gui1.ClearWindow()
	Gui1.DrawBitmap( MenuPanel( Gui1.ScaleFactor := ScaleFactor ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 0 )
	Loop, % Buttons.Length()
		Gui1.DrawBitmap( Buttons[ A_Index ].pBitmap , { X: Gui1.Buttons[ A_Index ].X , Y: Gui1.Buttons[ A_Index ].Y , W: Gui1.Buttons[ A_Index ].W , H: Gui1.Buttons[ A_Index ].H } , dispose := 0 , AutoUpdate := 0 )
	Gui1.UpdateWindow()
	Active := 0
	return
	
;******************************************************************************************************************
;******************************************************************************************************************
Gdip_EncodeBitmapTo64string(pBitmap, ext, Quality=75) { ;Excised from https://www.autohotkey.com/boards/viewtopic.php?t=36047
	if Ext not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
        return -1
	Extension := "." Ext
	DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
	VarSetCapacity(ci, nSize)
	DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, Ptr, &ci)
	if !(nCount && nSize)
		return -2
	Loop, % nCount {
		sString := StrGet(NumGet(ci, (idx := (48+7*A_PtrSize)*(A_Index-1))+32+3*A_PtrSize), "UTF-16")
		if !InStr(sString, "*" Extension)
			continue
		pCodec := &ci+idx
		break
	}
	if !pCodec
		return -3
	if (Quality != 75){
		Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
		if Extension in .JPG,.JPEG,.JPE,.JFIF
		{
			DllCall("gdiplus\GdipGetEncoderParameterListSize", Ptr, pBitmap, Ptr, pCodec, "uint*", nSize)
			VarSetCapacity(EncoderParameters, nSize, 0)
			DllCall("gdiplus\GdipGetEncoderParameterList", Ptr, pBitmap, Ptr, pCodec, "uint", nSize, Ptr, &EncoderParameters)
			Loop, % NumGet(EncoderParameters, "UInt") {
				elem := (24+(A_PtrSize ? A_PtrSize : 4))*(A_Index-1) + 4 + (pad := A_PtrSize = 8 ? 4 : 0)
				if (NumGet(EncoderParameters, elem+16, "UInt") = 1) && (NumGet(EncoderParameters, elem+20, "UInt") = 6){
					p := elem+&EncoderParameters-pad-4
					NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20, "UInt")), "UInt")
					break
				}
			}
		}
	}
	DllCall("ole32\CreateStreamOnHGlobal", "ptr",0, "int",true, "ptr*",pStream)
	DllCall("gdiplus\GdipSaveImageToStream", "ptr",pBitmap, "ptr",pStream, "ptr",pCodec, "uint",p ? p : 0)
    DllCall("ole32\GetHGlobalFromStream", "ptr",pStream, "uint*",hData)
	pData := DllCall("GlobalLock", "ptr",hData, "uptr")
	nSize := DllCall("GlobalSize", "uint",pData)
	VarSetCapacity(Bin, nSize, 0)
	DllCall("RtlMoveMemory", "ptr",&Bin , "ptr",pData , "uint",nSize)
	DllCall("GlobalUnlock", "ptr",hData)
	DllCall(NumGet(NumGet(pStream + 0, 0, "uptr") + (A_PtrSize * 2), 0, "uptr"), "ptr",pStream)
	DllCall("GlobalFree", "ptr",hData)
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint",0x01, "ptr",0, "uint*",base64Length)
	VarSetCapacity(base64, base64Length*2, 0)				
	;*************************	
	;https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=453367#p453387
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint", 0x40000001 , "ptr",&base64, "uint*",base64Length) ; [ 0x40000001 = CRYPT_STRING_NOCRLF ( 0x40000000 ) And CRYPT_STRING_BASE64 ( 0x00000001 ) ]
	;*************************
	Bin := ""
	VarSetCapacity(Bin, 0)
	VarSetCapacity(base64, -1)
	return  base64
}
;******************************************************************************************************************
;******************************************************************************************************************	
CreateCroppedIconBitmap( InputPBitmap , Output ){ ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=453285#p453292 
	OutputpBitmap := Gdip_CreateBitmap( 71 , 71 ) , G := Gdip_GraphicsFromImage( OutputpBitmap )
	Gdip_SetSmoothingMode( G , 4 ) , Gdip_SetInterpolationMode( G , 7 )
	Gdip_DrawImage( G , InputPBitmap , 0 , 0 , 71 , 71 )
	HBM1 := Gdip_CreateHBITMAPFromBitmap( OutputpBitmap )
	HDC1 := CreateCompatibleDC()
	OBM1 := SelectObject( HDC1 , HBM1 )
	HBM2 := CreateDIBSection( 71 , 71 )
	HDC2 := CreateCompatibleDC()
	OBM2 := SelectObject( HDC2 , HBM2 )
	G1 := Gdip_GraphicsFromHDC( HDC2 )
	Gdip_SetSmoothingMode( G1 , 4 ) , Gdip_SetInterpolationMode( G1 , 7 )
	Brush := Gdip_BrushCreateSolid( "0xFFFFFFFF" ) , Gdip_FillRoundedRectangle( G1 , Brush , 1 , 1 , 69 ,  69 , 10 ) , Gdip_DeleteBrush( Brush )
	BitBlt( HDC1 , 0 , 0 , 71 , 71 , HDC2 , 0 , 0 , 0x008800C6 ) ;SRCAND
	SelectObject( HDC1 , OBM1 ) , SelectObject( HDC2 , OBM2 )
	DeleteDC( HDC1 ), DeleteDC( HDC2 ) , DeleteObject( HBM2 )
	Gdip_DisposeImage( OutputpBitmap )
	VarSetCapacity(BITMAP, size := 16 + A_PtrSize*2, 0)
	DllCall("GetObject", "Ptr", HBM1 , "UInt", size, "Ptr", &BITMAP)
	pPix := NumGet(BITMAP, 16 + A_PtrSize)
	OutputpBitmap := Gdip_CreateBitmap( 71 , 71 ), G := Gdip_GraphicsFromImage( OutputpBitmap )
	Gdip_SetSmoothingMode( G , 2 ) , Gdip_SetInterpolationMode( G , 7 )
	Gdip_LockBits( OutputpBitmap , 0 , 0 , 71 , 71 , Stride , Scan0 , data )
	Loop % 71
	   DllCall("RtlMoveMemory", "Ptr", Scan0 + Stride * ( ( 71 ) - A_Index ) , "Ptr" , pPix + Stride*(A_Index - 1), "Ptr", Stride)
	Gdip_UnlockBits( OutputpBitmap , data )
	DeleteObject( HBM1 )
	Pen := Gdip_CreatePen( "0xFFD8DADE" , 3 ) , Gdip_DrawRoundedRectangle( G , Pen , 1 , 1  , 69  , 69  , 10  ) , Gdip_DeletePen( Pen )
	Pen := Gdip_CreatePen( "0x99000000" , 1 ) , Gdip_DrawRoundedRectangle( G , Pen , 1 , 1  , 69  , 69  , 10  ) , Gdip_DeletePen( Pen )
	return OutputpBitmap
}	
;******************************************************************************************************************
;******************************************************************************************************************
#If ( Active )
	+WheelUp::
		( ( Output.W -= 2 ) < 10 ) ? ( Output.W := 10 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return 
	!WheelUp::	
		( ( Output.W -= 10 )  < 10 ) ? ( Output.W := 10 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	!WheelDown::
		( ( Output.W += 10 ) > 300 ) ? ( Output.W := 300 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	+WheelDown::
		( ( Output.W += 2 ) > 300 ) ? ( Output.W := 300 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	
	*Up::
		if( GetKeyState( "Shift" ) )
			MouseMove, 0, -10, 0, R
		else
			MouseMove, 0, -1, 0, R
		return
	*Down::
		if( GetKeyState( "Shift" ) )
			MouseMove, 0, +10, 0, R
		else
			MouseMove, 0, +1, 0, R
		return	
	*Left::
		if( GetKeyState( "Shift" ) )
			MouseMove, -10, 0, 0, R
		else
			MouseMove, -1, 0, 0, R
		return	
	*Right::
		if( GetKeyState( "Shift" ) )
			MouseMove, +10, 0, 0, R
		else
			MouseMove, +1, 0, 0, R
		return				
#If

;******************************************************************************************************************
;******************************************************************************************************************

B64ToPBitmap( Input ){
	local ptr , uptr , pBitmap , pStream , hData , pData , Dec , DecLen , B64
	VarSetCapacity( B64 , strlen( Input ) << !!A_IsUnicode )
	B64 := Input
	If !DllCall("Crypt32.dll\CryptStringToBinary" ( ( A_IsUnicode ) ? ( "W" ) : ( "A" ) ), Ptr := A_PtrSize ? "Ptr" : "UInt" , &B64, "UInt", 0, "UInt", 0x01, Ptr, 0, "UIntP", DecLen, Ptr, 0, Ptr, 0)
		Return False
	VarSetCapacity( Dec , DecLen , 0 )
	If !DllCall("Crypt32.dll\CryptStringToBinary" (A_IsUnicode ? "W" : "A"), Ptr, &B64, "UInt", 0, "UInt", 0x01, Ptr, &Dec, "UIntP", DecLen, Ptr, 0, Ptr, 0)
		Return False
	DllCall("Kernel32.dll\RtlMoveMemory", Ptr, pData := DllCall("Kernel32.dll\GlobalLock", Ptr, hData := DllCall( "Kernel32.dll\GlobalAlloc", "UInt", 2,  UPtr := A_PtrSize ? "UPtr" : "UInt" , DecLen, UPtr), UPtr) , Ptr, &Dec, UPtr, DecLen)
	DllCall("Kernel32.dll\GlobalUnlock", Ptr, hData)
	DllCall("Ole32.dll\CreateStreamOnHGlobal", Ptr, hData, "Int", True, Ptr "P", pStream)
	DllCall("Gdiplus.dll\GdipCreateBitmapFromStream",  Ptr, pStream, Ptr "P", pBitmap)
	return pBitmap
}
HB_BITMAP_MAKER( obj := "" , ScaleFactor := 1 ){
	pBitmap := Gdip_CreateBitmap( 500 * ScaleFactor , 500 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 3 )
	Pen := Gdip_CreatePen( "0xFFff0000" , 1 ) , Gdip_DrawRectangle( G , Pen , 1 * ScaleFactor , 1 * ScaleFactor , ( obj.W + 8 ) * ScaleFactor , ( obj.H + 8 ) * ScaleFactor ) , Gdip_DeletePen( Pen )
	Gdip_SetSmoothingMode( G , 2 )
	Pen := Gdip_CreatePen( "0xFF000000" , 1 ) , Gdip_DrawRoundedRectangle( G , Pen , 5 * ScaleFactor , 5 * ScaleFactor , obj.W * ScaleFactor , obj.H * ScaleFactor , 10 * ScaleFactor ) , Gdip_DeletePen( Pen )
	Gdip_DeleteGraphics( G )
	return pBitmap
}

MenuPanel( ScaleFactor := 1 ){
	;Bitmap Created Using: HB Bitmap Maker
	local x , y , pBitmap , G , Brush , Pen 
	pBitmap := Gdip_CreateBitmap( 290 * ScaleFactor , 559 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 2 )
	Brush := Gdip_CreateLineBrushFromRect( 2 * ScaleFactor , 4 * ScaleFactor , 284 * ScaleFactor , 548 * ScaleFactor , "0x99C1BFC1" , "0x66000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 1 * ScaleFactor , 1 * ScaleFactor , 287 * ScaleFactor , 556 * ScaleFactor , 25 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99F9F7F9" ) , Gdip_FillRoundedRectangle( G , Brush , 5 * ScaleFactor , 5 * ScaleFactor , 279 * ScaleFactor , 548 * ScaleFactor , 25 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99E6F1FE" ) , Gdip_FillRoundedRectangle( G , Brush , 19 * ScaleFactor , 19 * ScaleFactor , 250 * ScaleFactor , 450 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xaaD4D4D4" )
	y := 29
	Loop 4	{
		x := 29
		Loop, 3	{
			Gdip_FillRoundedRectangle( G , Brush , ( x - 3 ) * ScaleFactor , ( y - 3 ) * ScaleFactor , 77 * ScaleFactor , 77 * ScaleFactor , 10 * ScaleFactor )
			x += 80
		}
		y += 120
	}
	Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99E6E6E6" ) , Gdip_FillEllipse( G , Brush , 115 * ScaleFactor , 481 * ScaleFactor , 61 * ScaleFactor , 61 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Gdip_DeleteGraphics( G )
	return pBitmap
}
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
class PopUpWindow	{
;PopUpWindow v2.2
;Date Written: Oct 28th, 2021
;Last Edit: Feb 7th, 2022 :Changed the trigger method.
;Written By: Hellbent aka CivReborn
;SpcThanks: teadrinker , malcev 
	static Index := 0 , Windows := [] , Handles := [] , EditHwnd , HelperHwnd
	__New( obj := "" ){
		This._SetDefaults()
		This.UpdateSettings( obj )
		This._CreateWindow()
		This._CreateWindowGraphics()
		if( This.AutoShow )
			This.ShowWindow( This.Title )
	}
	_SetDefaults(){
		This.X := 10
		This.Y := 10
		This.W := 10
		This.H := 10
		This.Smoothing := 2
		This.Options := " -DPIScale +AlwaysOnTop "
		This.AutoShow := 0
		This.GdipStartUp := 0
		This.Title := ""
		
		This.Controls := []
		This.Handles := []
		This.Index := 0 
	}
	UpdateSettings( obj := "" , UpdateGraphics := 0 ){
		local k , v
		if( IsObject( obj ) )
			for k, v in obj
				This[ k ] := obj[ k ]
		( This.X = "Center" ) ? ( This.X := ( A_ScreenWidth - This.W ) / 2 ) 	
		( This.Y = "Center" ) ? ( This.Y := ( A_ScreenHeight - This.H ) / 2 ) 	
		if( UpdateGraphics ){
			This._DestroyWindowsGraphics()
			This._CreateWindowGraphics()
		}
	}
	_CreateWindow(){
		local hwnd
		Gui , New, % " +LastFound +E0x80000 hwndhwnd -Caption  " This.Options
		PopUpWindow.Index++
		This.Index := PopUpWindow.Index
		PopUpWindow.Windows[ PopUpWindow.Index ] := This
		This.Hwnd := hwnd
		PopUpWindow.Handles[ hwnd ] := PopUpWindow.Index
		if( This.GdipStartUp && !PopUpWindow.pToken )
			PopUpWindow.pToken := GDIP_STARTUP()
	}
	_DestroyWindowsGraphics(){
		Gdip_DeleteGraphics( This.G )
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
	}
	_CreateWindowGraphics(){
		This.hbm := CreateDIBSection( This.W , This.H )
		This.hdc := CreateCompatibleDC()
		This.obm := SelectObject( This.hdc , This.hbm )
		This.G := Gdip_GraphicsFromHDC( This.hdc )
		Gdip_SetSmoothingMode( This.G , This.Smoothing )
	}
	ShowWindow( Title := "" ){
		Gui , % This.Hwnd ":Show", % "x" This.X " y" This.Y " w" This.W " h" This.H " NA", % Title
	}
	HideWindow(){
		Gui , % This.Hwnd ":Hide",
	}
	UpdateWindow( alpha := 255 ){
		UpdateLayeredWindow( This.hwnd , This.hdc , This.X , This.Y , This.W , This.H , alpha )
	}
	ClearWindow( AutoUpdate := 0 ){
		Gdip_GraphicsClear( This.G )
		if( Autoupdate )
			This.UpdateWindow()
	}
	DrawBitmap( pBitmap , obj , dispose := 1 , AutoUpdate := 0 ){
		Gdip_DrawImage( This.G , pBitmap , obj.X , obj.Y , obj.W , obj.H )
		if( dispose )
			Gdip_DisposeImage( pBitmap )
		if( Autoupdate )
			This.UpdateWindow()
	}
	PaintBackground( color := "0xFF000000" , AutoUpdate := 0 ){
		if( isObject( color ) ){
			Brush := Gdip_BrushCreateSolid( ( color.HasKey( "Color" ) ) ? ( color.Color ) : ( "0xFF000000" ) ) 
			if( color.Haskey( "Round" ) )
				Gdip_FillRoundedRectangle( This.G , Brush , color.X , color.Y , color.W , color.H , color.Round )
			else
				Gdip_FillRectangle( This.G , Brush , color.X , color.Y , color.W , color.H ) 
		}else{
			Brush := Gdip_BrushCreateSolid( color ) 
			Gdip_FillRectangle( This.G , Brush , -1 , -1 , This.W + 2 , This.H + 2 ) 
		}
		Gdip_DeleteBrush( Brush )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DeleteWindow( GDIPShutdown := 0 ){
		Gui, % This.Hwnd ":Destroy"
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
		Gdip_DeleteGraphics( This.G )
		hwnd := This.Hwnd
		for k, v in PopUpWindow.Windows[ Hwnd ]
			This[k] := ""
		PopUpWindow.Windows[ Hwnd ] := ""
		if( GDIPShutdown ){
			Gdip_Shutdown( PopUpWindow.pToken )
			PopUpWindow.pToken := ""
		}
	}
	_OnClose( wParam ){
		if( wParam = 0xF060 ){	;SC_CLOSE ;[ clicking on the gui close button ]
			Try{
				Gui, % PopUpWindow.HelperHwnd ":Destroy"
				SoundBeep, 555
			}
		}
	}
	CreateCachedBitmap( pBitmap , Dispose := 0 ){
		local pCachedBitmap
		if( This.CachedBitmap )
			This.DisposeCachedbitmap()
		DllCall( "gdiplus\GdipCreateCachedBitmap" , "Ptr" , pBitmap , "Ptr" , this.G , "PtrP" , pCachedBitmap )
		This.CachedBitmap := pCachedBitmap
		if( Dispose )
			Gdip_DisposeImage( pBitmap )
	}
	DrawCachedBitmap( AutoUpdate := 0 ){
		DllCall( "gdiplus\GdipDrawCachedBitmap" , "Ptr" , this.G , "Ptr" , This.CachedBitmap , "Int" , 0 , "Int" , 0 )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DisposeCachedbitmap(){
		DllCall( "gdiplus\GdipDeleteCachedBitmap" , "Ptr" , This.CachedBitmap )
	}
	Helper(){
		local hwnd , MethodList := ["__New","UpdateSettings","ShowWindow","HideWindow","UpdateWindow","ClearWindow","DrawBitmap","PaintBackground","DeleteWindow" , "AddTrigger" , "DrawTriggers", "CreateCachedBitmap" , "DrawCachedBitmap" , "DisposeCachedbitmap" ]
		Gui, New, +AlwaysOnTop +ToolWindow +HwndHwnd
		PopUpWindow.HelperHwnd := hwnd
		Gui, Add, Edit, xm ym w250 r1 Center hwndhwnd, Gui1
		PopUpWindow.EditHwnd := hwnd
		loop, % MethodList.Length()	
			Gui, Add, Button, xm y+1 w250 r1 gPopUpWindow._HelperClip, % MethodList[ A_Index ]
		Gui, Show,,
		OnMessage( 0x112 , This._OnClose.Bind( hwnd ) )
	}
	_HelperClip(){
		local ClipList 
		
		GuiControlGet, out, % PopUpWindow.HelperHwnd ":", % PopUpWindow.EditHwnd	
		
		ClipList := 		{ 	__New: 					" := New PopUpWindow( { AutoShow: 1 , X: 0 , Y: 0 , W: A_ScreenWidth , H: A_ScreenHeight , Options: "" -DPIScale +AlwaysOnTop "" } )"
							,	UpdateSettings:			".UpdateSettings( { X: """" , Y: """" , W: """" , H: """" } , UpdateGraphics := 0 )"
							,	ShowWindow:				".ShowWindow( Title := """" )"
							,	HideWindow:				".HideWindow()"
							,	UpdateWindow:			".UpdateWindow()"
							,	ClearWindow:			".ClearWindow( AutoUpdate := 0 )"
							,	DrawBitmap:				".DrawBitmap( pBitmap := """" , { X: 0 , Y: 0 , W: " Out ".W , H: " Out ".H } , dispose := 1 , AutoUpdate := 0 )"
							,	PaintBackground:		".PaintBackground( color := ""0xFF000000"" , AutoUpdate := 0 )  "  ";{ Color: ""0xFF000000"" , X: 2 , Y: 2 , W: " Out ".W - 4 , H: " Out ".H - 4 , Round: 10 }"
							,	DeleteWindow:			".DeleteWindow( GDIPShutdown := 0 )"
							,	AddTrigger:				".AddTrigger( { X: """" , Y: """" , W: """" , H: """" , Value: """" , Label: """" } )"	
							,	DrawTriggers:			".DrawTriggers( color := ""0xFFFF0000"" , AutoUpdate := 0 )"	
							,	CreateCachedBitmap:		".CreateCachedBitmap( pBitmap , Dispose := 0 )"	
							,	DrawCachedBitmap: 		".DrawCachedBitmap( AutoUpdate := 0 )"	
							,	DisposeCachedbitmap:	".DisposeCachedbitmap()"	}
							
		clipboard := Out ClipList[ A_GuiControl ]
		
	}
}
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: [ Tool ] Quick Icons ( Base64 )

16 Apr 2022, 22:59

:o R-E-S-P-E-C-T :clap:
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

17 Apr 2022, 02:12

It felt like it was missing something.
Animation.gif
Animation.gif (903.97 KiB) Viewed 2111 times

Code: Select all

/*
[Button1]
Path=https://www.youtube.com/user/CivReborn/featured
icon=iVBORw0KGgoAAAANSUhEUgAAAEcAAABHCAYAAABVsFofAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABsxSURBVHhe3ZxXlBT3lcaxfLRWAgYmp57unthh8nSaznESwxCHIEASSOQ4hAGEEDBkCZOEUCSDJFu2LEuyJFuW1nsc1utdy2vLAmEhHv24j3789rvVU1A0/0nY+7Cec77TXd1VXXV/dWNNV48b7u/mzZtZV7/6+vGvrn/zzrXr33xG4Z9AYsdnV69/8+HV618v/+KLmwWD5o7uj1Ae+Oov3xz44svr+P4PfoSBfQfQv3U7eufM+38vsUP07K4BvPnW2/jDf/9ZgJ0VRxg0f+i/L6/f9F69fuPq+x98jKXLVmhgBNBHP/155hn4fymxQ/TOu+/jwMHDmo0C6dr1G3+9du0v7YMY7v67du3r9UJSNnp6x0785+//iHd//AHWrVuPmTNnobqqakTVVOuqVkj9uq2m5m7Zbstus8FuH5Q815X5mr5MOex2OBx3q3fOHE2r16zBhYtXNM8x2kuAZwdx3P4Tj5EV163v00j+/vM/oW/jJrhcrlHL7XaPWR6PRymv1ztm+Xy+Uam1tfWWFixchF/++reQSOnbuAX//h//BclFg1jSOUZCSQgKmPc/+AiJRFIJQKQblrk8lHSDM5dVUhltlG6g6jWVjCBU8vv9SCaTmhdJuEk+uvrVjb9dvXrTrMGR5CvkxLXEY1RgjMYOJ5XBKhmNG0kqozOlMtwogaBSIBDQFI1G8bNPPsPJU6fx6mtnJbw+GyelTKqSJCaJOWMoqYwfTioIKqkAZEoFQCUVCKOGA5Kp2bN78flgavnlr36LcRJfEkoSUm//8N3/MzAqAENJBUElFQyjxgImGAxqOvXiS5rniAcRzjcfSs2X0rZy5Sql4bpURg8lldEqqYweSioARo0Ggi4dRqYee/wJfPaLX2neM471/fNVq9dqbtTR0fl3QVEZP5RUxhslxuqPw8kI5O+BYpSkmUcfXShwvtE6R3mUnmOsQHSpABiVafxQUgHQlQlCpXuBoSsUCmnSmdwBR5ovleG6VEYPJZXhulSG61IZrCvT8EypDDZKN34kjQmOyniVVCCMUsEw6l6AiFQgdKmMH0mjhqOCMJRUQIxSARGpoIhUIIxSwTBKZbhR4XBY+ZoSjswkKqOHkwqCLhUIo8YKRAVgKGUaPZwEiFEjwjEa+Y+AoQKhSwVCl8pwlVRGD6VMGJlSw+FkOxIAlcYKQ6QCYZQKQKZUhmdKZfxwikQiajgy0quMN0oFIlP3AkOkAmCUynhdunGq11QSCKLM5VHBMRrrMzy/S/60RgIhxgUyjB1KunHp52ooRkNHI6PxI2kMcHzw89Hf6udzisb7NCCEwOWgn8ZTraIA4QwBRjM0KM/5mrYsxoc1acshvkelYVBhHZTuDfJ42zPuBpB+TYy7+z01HJnEVa8PC8foGV4/4fh5kL4ovIQRCIl3BOAliGAgiLCHBxuIoMUfgSfo0dYViHeDCSIqn0kArQIkLEbE+BkBeEKtiIT9CEcIjEbKumJQIMR1KAElxgejhMPnkVhU21beCxNYOCLG83Vur4MQw6PRGJ9zH1wnE0D6fbWUcJwOxx1gxGNaefA+HqxfIAXcDDEXYq001OMnIC/X89J73Ah4BYiHIAIaPAGjn+W0B4QILwa3GErAoWArofoR8bdwe4Ih3HAwznUpPo8SeJjG+QgxIB7H/YdlfQ00PY5gxOi0QoTN/QzuTwcUi8U0ZYIRqaCIZH0lnFqng4bdzh0SOiE5+34vQ4jyReDy0Zt8TQh6GuBzNROWG2EuJ908ePEweoYcnISAdva5vQ7K46O3tTYjGWhCjCAlVAM+r/Y8qgGTbbm+5h0hRINcn9CjPBlBH9fxcxvxPHpsVNbRPCq9TwlJ8a4YDUx7qyynvSkqyoCQKR3kkHDqap13wAloOSQCL/ODm4ZEQ23YuGED9hzah2cPH8WBgSPYs/957D9wEHt3HkD7zAXw0JvkwILMGwInDYpg2CLsfGYnjhw+gl0DB7B3/yE8u+cA9g8MYN++fUh2TaMnisH01ngCDrcXi594FCdOHMaevfuxe2APDg7sxr69+zBA7d03gL17BzDA1wf27KZ28fN3YOmyleidOx+dnZ1IpZJIJug5hBaNqr3FCGVEOPqZvnXGAyHEmQ8CQZ7teBCnjh3B/vOfInb4dwgN/Ab+Pb9BYOBf4d/1KUo3/BDls7akoRCObK+HVF1dHc6cPYu9p9+G66nj8K96AaG1J5FYcxytXLb2bENDagGS0TjPfgINdie2bViHy+/+FMnF2+Cb14fIo+sQnr8WwbkrEZrzFMKzn0R45uOITl9ELUSoaxb80RTau6dh+sxeTOnuQSKZpMHxUUHRpYRTX1d7C4qeSKWSROhBPp75SDyGU88dxLrTn2Dcll9j3MZ/w7h1v8J9az7Bfas/wrfXf4yCKZvR1NiohYhAEQ+Ug2lqasLZMyex4vBFjOs8iG/POIT7pz+L73Rvw/0dO5DV8zTKAjPgaq5n0o2iocmF/r41eO2NtzHe3YP7m2fioeYpmNjcgUfqE5hQF8VEZwhZtlZkV7mQU9GIXGstSiocsNrqYa2pQ0WNA466RjS7PLfyjAqGrng8rkkJp6G+7hYUXX7mjgDl8/iQ4IYnjx7G+tMf4V82fooH1v0c49d+jAlrP8D4Ve9i/Mp3kJdahuqKMuYTj+ZBkjDlsYVwLrx+Gqufu4D7ugeQO2s3sqc/gyJ6TM7UrcjtXoeSpgRqaqq1kKxtaMKGTetw/vIbyHFNQ2HrNJR5emBu7qKSKGtJwNwUQnm9F5W1LRqQcqqi2oEysxVmSznM5ZUoq7ShrLoOtoYWQg8hER0MMXpTnCEX5wnXoYwZjhgnH9rKhJvgB5049hzWv/ghHtjwUzyw5mM8vPo9TFj1IzyygmeYymtbrsEJMHnKmUr3MkE0a3BewapDZ3FfxzPIm74dkwmlYOoW5HRtQl7XKphotM1mp8cFUV9fj75NGwjnLWQ396DAMwVl7ikobW5HSWMEJXVBlNV6YHU0a1BMFTaYqxwwWys1MOUVVSivtmvQzFzHXOdBXbObrYM/DSHBfJS8E4quEeFISGgiGOkt/G4/k1scJ44Szgsf0Gt+ggdXvUdv+SEmrvg+xi97ExOWvoH8xJOwVVl4EF4NjvQZ4tLuFhcunnkFKw+9jm+l6ClTNyNnyiYUdq1Hbvta5LUvQ1ljXIMjVaexvgF9mwnn0huYXN+JwpYU4aVQ2pCAqa4VZqcb5c5mWKqd9JAqWCiTpQJlFdUor3HCUmWHhWAsThfB+FBMoGX2JjTxOGJM+IlkCqkkH+k9iYQ83taQcG5BGZTWOwgcX4CkU/QchtWJH+PB1e/iQXrKBEKZuPQyJiy5hIlLLqIg+rgGJxT0aXBC0sTxM1qamnHp7KtYtf8VfCu2Aflda5DXsRaF7SuRl1iKwuQTKKuPwFZj16pLC8Nq85Y+XBI4jjiKGkMw14dgqg2i1NEES009Ku119JBKVFAmkwnZOXkoLa9BRW0TymyNXM/N9X2EHibcNpicXtictJEnKyZewmYywRM+KjiNDUyGBjBppXsJgZNIEQ5zzobj72hgHiSU8U+eR9aSs5j4xOuY8PgZFIQXMKxMrHI+LcmFmVzFc7weDy6dew2r9r6Eb4VXo6B9KfLblqEwtUQDWhhfQEMCsFXb2JeE4SLMzf19uHzxCrKrQyiq9cLMMDI5PSiprk17DEOnqqqKBYDHzQIgJb5zxjxMKmWuqW/lNn6USgg2RlHs6oSloZU5qYYFp1WDE9Pg3Alm1HDSfYo8suttDSHZ1oaT4jlHf4AHl7+Jhwhm/JLXMWnxq5jw2MuYuOhVFAbnoNpazLCwo7mxAS0tLcw3jbCUmXCJYbVm/0sYF1iOouRiestiFMcfQ0FoAYqi85lDBuEQqLu5Bf39G9Nwqmgo84aFKrM3o5hJtrS8WsstFgtDmGC2b9uKn3z4MWYtfBJZJVVM2hEU0xNLmcdMEpJe5qxahmJFhdbQJtkDSZkfNZwmGpMGclsRHmiIZ1LGh7ZUgp7zPDYc+z4eprc8/MRr9JaXkbXoRUx69Diy5zyPnPhyNLhbsbH/aTZuh7CLjd6u3fuwbdszWv5Y+swRPOCbj4lxGhEloPAi5Admo1SqEcPA4bAhRk9rbmxhWG3AuQuXkVPMhFvjZg6ht1RWa3mljF5TWGJCZXU1tmzZggvnz2D1OoarM4CShiDhRJnAkyj1daPQN4OVME6YVjhsrIbso5Jt7dr/yAXGqBKy9Cd3w4lpMepn9Wlndj9OOH1H38IjhDJ+0WlMWHgKE+cTzNznkDt7D3KmSSXaAev8fSifN4CKebtRPnsHm8MdKOpkGCWeQH54IYqoksAsWIJTUOyfilLXFJjoFc5agRNDE0vvpi3rceb8ReTkVcJSSe+rZuKtZJm2VvORCZd5p8xGb2IuKSS83GoP8uxeeksUpQLD2waLr5OeE0cJc1EZ4bhaGrXCEk+2M7SSd4EZOxxOwwHmkDZJyEePYMPRNwjmRUI5iay5R5HVexiTZ+9Hzuxn2b/sQPaM7ZjQ1YcJHeuQ1b4G4+PL6ClLMZGekh1dhJLwXJgC02Fm01fk60Ehy7SppYOGNsFBOHF2yc2NLmxhWJ07dwE5OSUos1Ywx5hhrayApaKGYOwodzTCxFArsLuR5/QzaUdR4m5DobsLBVL2XSkmZxesllI4KstQ19TCESiADpnbYgQTYxiNHk46rPTJVRPhRBhWQQ6B7XTFE8e+i74jTMQLjmMSwyhr1gFkzdiNyTOeRc7MHcgjmPwelmmW6LyutcjXqtFTyGXSNcUWojQ+H/nBGcj20WN801Dsnk6XT7GixGCqrofdWUM4MbSwJ+nv34zzZ88hOzsXpRYTQ8lM72E/U92AspomWJmczQ4fS3UAFiZeMz+jmPmllMCL/TMJvQelnk7mniBcHIpT8TDaE+yS6TFSzpMsGDocY6eshCON2h1gNDhSbUIcIwROh5Zz+g6fx4R5z2MSvSWbYLKnEcq0bcjt6dd6l1x6jPQuBW0rUcKKVBST3CKhNBvF4V6USA5wd6PM1c5Ol1DY6ZpooKnSCTtzjniOu8VDOFvoOefoOXkMiXKUVbHbtTUQCDviBuagpgDKmHhLXEmUeDq0/FLaSjCt01EanoOiyAIUxFkNk+zaUwsRYeOXiNOeZCcf6TWMCKlYRjBjhhOOSKdMd2zvGoRzFuPnHEbW7AHkzNjJHLONne5m5HVuxOT29cjvWI28JEt17AmUxBehODQXpSGC8fegiCFUxLJqdtOY5hjKmDxLG9iLsB8prbDD5hDPScLt8mHrVoFzAXk5hcwzbOyqW1jKXeyOPdwuQjhMugwlUwNzTG2YsDuQ55/DijmP1W8RiggmjyemILWc/dRqVMfnIRBLIUlACQEhQ24GmCHhtDQ3a41burNNw5Grafo1klRbCi8wrDYdPsNwYigx+eZwNpIwKmSOyelYg/woS3PiceoxFCcW0WN4oCzvJYRjIZTiRimr7UyYNKaBYVHP3oWzkZnJuJQjgM3h0A66pZmDJz3nwrnzyC1gnqnm+wwjE7td8TJpCEvr/BwZnLCyPFusVpisZnpSnPt8lGCeYu9Ej6X35nVuQEE3xxQeny3QgSS791g8pYGIKy5ljAhHlzRLCSYugZNo41R+/KgGJ3vaVoYQd8gpPG+KdLprGUorUMwYN1WyMrDZMssjk6eZfYkk0ZxiM4psBKF5DDte9h2lHAPK7FKJnEy6lQwrp3Yymngs/Vv7cVHCqqhWa/4KG+ld9QTD+Uo8r4STeQXHhFZ3C5tMN/NJCEe/ewz2WSwEEXbd9OACgsnt7ucJ5IDbw1mutRfeliZE4xHEI8w3GfaKRoRzy80G4UhTmGxL4tSxo9h48DVM7iGYTnoLd57XuZKdLs9Q6il2om2oKLdycKxFU1ODluSb2VzW2W1YtmwJ2mf2YnIF23sx0uaCqYqDYaUD1io2dWYL5Dq2JMgWl5thtRUXLrBamTgKONkINjM3NbG5c3UzfHqRK+FJqD42mqFQFJv6NuBnH74Hz2Pb8UB4ObJ48iZP6UfhjKdZKJ5F3sxnkBtejNraesTDbrYMCYTppUYwEi3DwrkFRoPDjK7D6UjhRYFz4BXudD1y2lYhN7UK+RwBijhw5sWZdHnw9ppq7jjEBJ6kEkhxuAt43Xj7yiWs7duC7+RYYaHXmJmAK9i7VLCxkxnJYi6DUxIy4bjcXg3O+QuXkF3hQ0m9lGmGJFXs6WZSn0pQMVRWlmN2Two7n9mGK5cuYOexl2GZtgETO/owqWszciUnTiOcWftYXQeQF+hFTbWD9gQ0EOFwOqz0NDIkHBfPwB1gKDlQKXnyIanONrx4nDln32lkd9BT2OXmSzVILECJVAZWomLmhBqGVIy5SgbVuDYBJ7ULaN+7+CbWrO3H/RMKtTCyVrD9Ly9lQ1fF/oUl2mzWvj8s+xXP6e/vx7lLVzDZHkGhXKpoZbPonYri4CwURnqR7e1GuSeCJ9dsxq7nXsaKbQdhndnH3orezLAv7GZLQY/Jnk7N2ovJcw8w+Yc5+1ngZ3uiXSGkXUYwo4IjULT6r8GRikVjp3RocDbvPYlslmhJvvmsCoXRuUy4c1HA/qXE2cL5iHAYz6mEJD35nAT8gSDeuPIWVq3qw4OPTEJlVQ2sVgvzDEcBJlUzh0kTy7Xd7uCZjDDnNGljwdnLb2FyfRIF7KBLAjNRysaxODIfJTH2TklWRU70OW0rMJ7JdiI9OYuFYRILRS5DqXDWTjwyfQCTeg9yxDmFbLYZZfTOBkcVgux5EtIhZ4CRPm/UcOJstZMMLYnNZGc7Xjh+DH37XkBOcgnyQ/NRSBWHZqHUL91uF4odLm14lBEgRc9Jw0lqcC5fvogVK5bjoQcfRiXnI2t5FRM25ya7S7vWIlftHM46bf/NHDw3b96Ms1e+h6zGduR7p2m9iykym30TK2BiIXJYAARMDrvwSYSSy4qUPf1pTJy+C3kcZfLn7EfWPHbwC08jd8F3kU/gFcV5cHvZKbOcSz8lVwCMYIaE43a5bkMZlFy9l7wjw1pnRztOnjqF9QdfoLfMRwGTYiE7URkaTVKl2IwV1bbSK6oY00FtsNM/R77r8+abV7B69Up856GHWYLt9JZ6WAmllD2OXHeRWcnhrNUOtFEbPPtx6XvvINczHQXMFUVRhi+77Hw2dQX0kvy2NSwGhMKkmzt1O3Kn70R+L+e73gOYNPcIsh89hsnzj2LirEPIY+tgKX4EDfYGeCMepDhCSEIOaf9cvHNkGjUcuTQqYREhnK62Njy782k8uXE7zMEeJsVpTJJdnGHatGGvjAdQwiGwpsam7UQmXh2QXGg/8NzzmLNgER6ZnMsqVcv2vwWV9V42gB7tWrBcFHfW1rHxDDMhe7B0+Ursfu4EijigFjKnFSafRFH7ckzuWMsWYiNyujchm+U5mwl3kpZXBpA/9yAmsWufRO8p6NlOb5uLYiZga2E+nEzsHp9HKy6xkHiLXI4ZJRyP233HdQ3NOEoDxdZbqk4iFoafoVIf5gzj8KCIM04RPaCY5dhU5UCJtYpwarSzL2CMlwVC3LFcrK/nAFjGkCq2VMNUbuPELNtKn1MFB5tAOXi5AB5o9XFsCcEV70aFJ4lCNn/5VEFDjFUxwdIuamfH3YFCVxcHzm562RRkN3ewMARQzkpYbi5ChbkULrYWQV8QMfl3Ez3GywoVZ6hHb123Sv9/TTRqODKDpGigdMdxxmk0GtKqT5jlXc6yncZod6rYqlFrr2EZr2JIpKd7zfP4GZJDBFYsLMMfyyYfnexnpDLJXTE1TMI1znp2x7XctknbVvYR59gSk/DkNk1NjXDUmLmPcvZMVjhrWPZrLKi18bn2WgUctgqttNtrytHgrIarsQ5et0v717aPMAIxNrIhdsfMNS5W02iAJ4Gfr0O5JzgyJYtxIekHuJyk2vheKilTLUs8J92kPGpJTsIpPbPojZVAkkf5LDkwmfI1b2TIRgaHPwndWxD5KK9FeAJ8sU4EOd/5I0muy1DgftNfHEivG9VFoNEwe5eQn1D5yHAJMBWEOEvFZH2CCUS7CN7PddzwypceNBjpa9z3DCdBF9cOnKEVTbZzmZ5EI6WSxRhq+iXHOEt3VF6n4Toc8QIdUpjlXWYaMTrMz4xokpAjDBoeN2wjEk+TapeK0KCw/M+JcLiO9h8R7fOYL2i4fDtD3hePjBK2QBOQUbnEy7AUALFAK6JB7lcG6VArt2lFgJ4pCdkIRsakIeDcnZAzlT6ro5MOZTTSDBpWtxPmSJLcZjQ4U/q/n0SZyyIlHFW1GgsQldFDSQ3gbqmMVykTwFDKBKHSiHBUxg8nFQCjVIYPJZXxw0kFQZfKeJX07wiIhoWjMl6X0eDMZZVUxuvSjVO9ppLR6MxllVQQjDICMUoJRzV4jgaALqORKmUaOxqpjFZJZbxKKhgi4/eSRg1HBWEoqYAYNZTxqtdFmQCGkwpEpkaCMio4KsN1qYw2SozKXB5JKmNHksp4o1QgRCoYuvTvQg4JRwXEKKPhmdKNzVweSSrjRWKk6rWRNFYoIh1MBpwbf1285Cnt5tf29o5Rg9ClMnYkZRpslMrY4fT3glDpt7/7fRqO3E8udwbLzeZTu6eOyUNGKxUEXSqDh5IKRKbGCkKX/uV00Z/+fO1WWH0m95PLfeXLly1XwjBKZbwu3eDM5UypDFdJjNUfh9O9ADHCMEqiR+53lftex1396sYu/VbhV149M2YgulQQMpVpvEoq4zOVCcOooSBkLqskdwzt3LlL+1UGuZV83LVrN2skpISU3HA+Z85cpfG6VEYPJxWA4XSvEFRSAciU8V4y2b/8roV+K7n2cw3Xvrrxm9MvvQrRhx/9TJvGVWBEKgBGyQ6Mz0crI5Th4KggqKQCoZIRzmuvn7v1e0FSqNJw6D1//OLa3+RHLj759Bc4fuKFOwweSSpjM6UyPlP3AkJl8HAywjBq7br1WsWWCJJfg/nyq6/nanDk78trN7ZKItJ/x+EH7/wYU6Z0K2HoUkHQpTLeqEwQmfpHgBCpQOiSi/5yLC+efkUDI84x+CNKd/+GjoSXeI4AkiT9+R++wP4Dh9DbO2dUQESZENJK32J0JwC5ge1OqYCIVEanlb7l0miw/p7xNU1ypzOl3/WcSrVh46bN+OwXv9Tyi3hMGsyNm8qfqDL+VpdULyEpmXvwF4n+KfTe+x+CKUQLHT2/SAKWZb7/xoi/3aX/bpeQlJImHbQ0Rf9Meuzxxbd+j4wR8z/yq3aD5g/+jRv3v5TV8PiFbsGLAAAAAElFTkSuQmCC
[Button2]
Path=
icon=
[Button3]
Path=
icon=
[Button4]
Path=
icon=
[Button5]
Path=
icon=
[Button6]
Path=
icon=
[Button7]
Path=
icon=
[Button8]
Path=https://www.touch-portal.com/
icon=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
[Button9]
Path=
icon=
[Button10]
Path=
icon=
[Button11]
Path=
icon=
[Button12]
Path=https://www.autohotkey.com/boards/index.php
icon=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
[Defaults]
icon=iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADdSURBVChTY0ACAkBcwc7OfpyHh+eMoKDgXCBfAyyDBDyYmZlfA+n/yJiVlfWvmppaN5ANBhLYFCFjT0/PFCDN0A4TkJCQ+L98+fL/27dv/29gYABXqKWl9YkBaPxVmABIEQzcv38frpCDg+M/Axsb2zOYwPHjx6HK/v///v07RAFUjkFAQGAtjOPh4fH//fv3YIUFBQVwRRoaGiCawREmAMMoJgFxVlbWUyDNwCAtLb0UJoiOTU1N/+7atcseyIYACwuLZnFx8e9AJlgB0En/ExMTn+7du9eJgYGBAQCNp34tLgEGCwAAAABJRU5ErkJggg==
*/
;****************************************************************************************************************************************************************************
#Include <My Altered GDIP lib> ;<<<<<<<<<<<<<<<<<<---------------------------     gdip.ahk
;~ #Include <PopUpWindow_V2> ; At the bottom of the script 
;****************************************************************************************************************************************************************************
#SingleInstance, Force
SetBatchLines, -1
#NoEnv
Gdip_Startup()
Buttons := []
loop, 12	{
	iniRead, path , % A_ScriptFullPath , % "Button" A_Index , Path , ""
	iniRead, icon , % A_ScriptFullPath , % "Button" A_Index , icon , ""
	Buttons[ A_Index ] := { Path: path , Icon: icon , pBitmap: "" }
	
}
iniRead, dIcon , % A_ScriptFullPath , Defaults , icon , ""
DefaultIcon := { Icon: dIcon , pBitmap: B64ToPBitmap( dIcon ) }
Loop 12	{
	if( Buttons[ A_Index ].Path ){
		if( !Buttons[ A_Index ].Icon )
			Buttons[ A_Index ].pBitmap := DefaultIcon.pBitmap
		else
			Buttons[ A_Index ].pBitmap := B64ToPBitmap( Buttons[ A_Index ].Icon )
	}
}
ScaleFactor := 1 ;1.25 ;2



parent := New PopUpWindow( { AutoShow: 1 , X: 1200 , Y: 100 , W: 290 * ScaleFactor  , H: 559 * ScaleFactor , Options: " -DPIScale +AlwaysOnTop +ToolWindow " } )
parent.PaintBackground( { Color: "0x01000000" , X: 2 , Y: 2 , W: parent.W - 4 , H: parent.H - 4 , Round: 10 } , 1 )
parent.ScaleFactor := ScaleFactor
;~ Gui1 := New PopUpWindow( { AutoShow: 1 , X: 1200 , Y: 100 , W: 290 * ScaleFactor  , H: 559 * ScaleFactor , Options: " -DPIScale +AlwaysOnTop +ToolWindow " } )
Gui1 := New PopUpWindow( { AutoShow: 1 , X: 0 , Y: 0 , W: 290 * ScaleFactor  , H: 559 * ScaleFactor , Options: " -DPIScale +Parent" parent.Hwnd } )
Gui1.DrawBitmap( MenuPanel( Gui1.ScaleFactor := ScaleFactor ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
Gui1.Buttons := []
Gui1.Handles := []
Gui1.Index := 0
Gui1.MoveButton := { X: 115 , Y: 481 , W: 61 , H: 61 , Label: "MoveWindow" , Hwnd: "" , Parent: Gui1.Hwnd }
_AddControl( Gui1 , Gui1.MoveButton )
y := 29
Loop, 4	{
	x := 29
	Loop, 3	{
		Gui1.Buttons[ ++Gui1.Index ] := { X: x , Y: y , W: 71 , H: 71 , Label: "Launch" , Hwnd: "" , Parent: Gui1.Hwnd , Index: Gui1.Index }
		_AddControl( Gui1 , Gui1.Buttons[ Gui1.Index ] )
		Gui1.DrawBitmap( Buttons[ Gui1.Index ].pBitmap , { X: ( x  ) * Gui1.ScaleFactor , Y: ( y  ) * Gui1.ScaleFactor , W: 71 * Gui1.ScaleFactor , H: 71 * Gui1.ScaleFactor } , dispose := 0 , AutoUpdate := 1 )
		x += 80
	}
	y += 120
}
tog := 1

Bubbles := []

;~ Colors := ["CF65EC","3BC8FC","FE59B0","D1216B","DA6214","0BEAA8","CED614","8C3AE2","E52BE5","FE59B0","A0C9C6","5230E9","94D82F","A01AEB","2243AD","940D32"]
Colors := ["7526F2","CF65EC","AA1CBC"]


Loop, 330	{
	Bubbles[ A_Index ] := { Y: Random( 0 , gui1.H ) , Speed: Random( 1 , 10 ) , Dia: dia := Random( 3 , 45 ) , X: Random( 10 , gui1.W - dia - 10 ) , Color: Colors[ random( 1 , Colors.Length() ) ] }

}
SetTimer, Bubbles, 30

return
;~ GuiClose:
;~ *!ESC::ExitApp

RALT::PopUpWindow.Helper()

Bubbles:
	Loop, % Bubbles.Length()	{
			if( ( Bubbles[ A_Index ].Y -= Bubbles[ A_Index ].Speed ) < ( Bubbles[ A_Index ].Dia * -1 ) ){
				Bubbles[ A_Index ] := { Y: gui1.H + 10 , Speed: Random( 1 , 10 ) , Dia: dia := Random( 3 , 45 ) , X: Random( 10 , gui1.W - dia - 10 ) , Color: Colors[ random( 1 , Colors.Length() ) ] }
				
			}
			( Random( 0 , 1 ) ) ? ( Bubbles[ A_Index ].X += Bubbles[ A_Index ].Speed / 3 ) : ( Bubbles[ A_Index ].X -= Bubbles[ A_Index ].Speed / 3 )
		}
	parent.ClearWindow( AutoUpdate := 0 )
	parent.PaintBackground( { Color: "0x01000000" , X: 2 , Y: 2 , W: parent.W - 4 , H: parent.H - 4 , Round: 10 }  )
	parent.DrawBitmap( BubbleBitmap( Bubbles , Gui1.ScaleFactor ) , { X: 10 , Y: 10 , W: parent.W - 20 , H: parent.H - 20 } , dispose := 1 , AutoUpdate := 0 )
	parent.UpdateWindow()
	return

BubbleBitmap( Bubbles , ScaleFactor ){
	
	;Bitmap Created Using: HB Bitmap Maker
	;~ pBitmap := Gdip_CreateBitmap( 300 * ScaleFactor , 300 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 2 )
	pBitmap := Gdip_CreateBitmap( 300 * ScaleFactor , 500 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 2 )
	;~ Brush := Gdip_BrushCreateSolid( "0x99AA1CBC" )
	
	Loop, % Bubbles.Length()	{
		;~ Brush := Gdip_BrushCreateSolid( "0x99" Bubbles[ A_Index ].Color )
		Brush := Gdip_BrushCreateSolid( "0xFF" Bubbles[ A_Index ].Color )
		Gdip_FillEllipse( G , Brush , Bubbles[ A_Index ].X * ScaleFactor , Bubbles[ A_Index ].Y * ScaleFactor , Bubbles[ A_Index ].Dia * ScaleFactor , Bubbles[ A_Index ].Dia * ScaleFactor )
		Gdip_DeleteBrush( Brush )
	}
	
	
	Gdip_DeleteGraphics( G )
	return pBitmap
}

Random( Min := 0 , Max := 100 ){
	local out
	Random, out , Min , Max
	return out
}

!RButton::
GuiContextMenu:
	if( tog := !Tog ){
		CoordMode, Mouse, Screen
		MouseGetPos, x , y 
		parent.UpdateSettings( { X: x - ( parent.W / 2 * parent.ScaleFactor ) , Y: y - ( parent.H / 2 * parent.ScaleFactor ) } )
		parent.ShowWindow()
		SetTimer, Bubbles, 30
	}else{
		parent.HideWindow()
		SetTimer, Bubbles, off
	}
	return

MoveWindow:
	SetTimer, Bubbles, off
	PostMessage, 0xA1 , 2 ,,, % "ahk_id " parent.hwnd
	While( GetKeyState( "LButton" ) )
		Sleep, 30
	WinGetPos, x , y ,,, % "ahk_id " parent.Hwnd 
	parent.UpdateSettings( { X: x , Y: y } )
	SetTimer, Bubbles, on
	return


_AddControl( Window , control ){
	local hwnd 
	Gui, % Window.Hwnd ":Add", Text, % "x" control.X * Window.ScaleFactor " y" control.Y * Window.ScaleFactor " w" control.W * Window.ScaleFactor " h" control.H * Window.ScaleFactor " hwndhwnd g" control.Label
	control.Hwnd := hwnd
	Window.Handles[ hwnd ] := control
}

Launch:
	MouseGetPos,,,, ctrl , 2 
	if( Buttons[ Gui1.Handles[ ctrl ].Index ].Path && !GetKeyState( "Shift" ) ){
		try
			Run, % Buttons[ Gui1.Handles[ ctrl ].Index ].Path
		catch
			gosub, NewItem
	}else
		gosub, NewItem
	return

NewItem:
	While( !GetKeyState( "ctrl" ) ){
		ToolTip, Select a file / folder or highlight a url and then press "ctrl" `nPress "Esc" to cancel
		sleep, 100
		if( GetKeyState( "ESC" ) ){
			ToolTip,
			return
		}
	}
	ToolTip,
	Backup := ClipboardAll
	sleep, 100
	Clipboard := ""
	Sleep, 30
	Send, ^c 
	sleep, 100
	Buttons[ Gui1.Handles[ ctrl ].Index ].Path := Clipboard
	sleep, 30
	Clipboard := Backup
	While( GetKeyState( "ctrl" ) )
		sleep, 30
	gosub, CaptureScreen
	return

CaptureScreen:
	CoordMode, Mouse, Screen
	CoordMode, ToolTip, Screen
	MouseGetPos, x, y
	Output := { X: 5 , Y: 5 , W: 100 , H: 100 , pBitmap: "" }
	Gui2 := New PopUpWindow( { AutoShow: 1 , X: x - Output.W / 2 - 5  , Y: y - Output.W / 2 - 5 , W: 500  , H: 500 , Options: " -DPIScale +AlwaysOnTop " } )
	Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
	Active := 1
	While( !GetKeyState( "ctrl" ) ){
		MouseGetPos, x, y
		ToolTip, Press "Ctrl" to capture icon. `nUse Shift + mousewheel to adjust size by 2`nUse Alt + mousewheel to adjust size by 10`nPress "Esc" to cancel , % x + Output.W / 2 + 25 
		sleep, 30
		if( GetKeyState( "ESC" ) ){
			ToolTip,
			Active := 0
			Gui2.DeleteWindow()
			return
		}
		Gui2.UpdateSettings( { X: x - Output.W / 2 - 5 , Y: y - Output.W / 2 - 5 } )
		Gui2.ShowWindow()
	}
	ToolTip,
	Gui2.DeleteWindow()
	InputPBitmap := Gdip_BitmapFromScreen( Gui2.X "|" Gui2.Y "|" Output.W + 10 "|" Output.H + 10 ) 
	Buttons[ Gui1.Handles[ ctrl ].Index ].pBitmap := CreateCroppedIconBitmap( InputPBitmap , Output ) 
	Buttons[ Gui1.Handles[ ctrl ].Index ].Icon := Gdip_EncodeBitmapTo64string( Buttons[ Gui1.Handles[ ctrl ].Index ].pBitmap , "Png" , 100 )
	IniWrite, % Buttons[ Gui1.Handles[ ctrl ].Index ].Icon , % A_ScriptFullPath , % "Button" Gui1.Handles[ ctrl ].Index , Icon
	IniWrite, % Buttons[ Gui1.Handles[ ctrl ].Index ].Path , % A_ScriptFullPath , % "Button" Gui1.Handles[ ctrl ].Index , Path
	Gui1.ClearWindow()
	Gui1.DrawBitmap( MenuPanel( Gui1.ScaleFactor := ScaleFactor ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 0 )
	Loop, % Buttons.Length()
		Gui1.DrawBitmap( Buttons[ A_Index ].pBitmap , { X: Gui1.Buttons[ A_Index ].X , Y: Gui1.Buttons[ A_Index ].Y , W: Gui1.Buttons[ A_Index ].W , H: Gui1.Buttons[ A_Index ].H } , dispose := 0 , AutoUpdate := 0 )
	Gui1.UpdateWindow()
	Active := 0
	return
	
;******************************************************************************************************************
;******************************************************************************************************************
Gdip_EncodeBitmapTo64string(pBitmap, ext, Quality=75) { ;Excised from https://www.autohotkey.com/boards/viewtopic.php?t=36047
	if Ext not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
        return -1
	Extension := "." Ext
	DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
	VarSetCapacity(ci, nSize)
	DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, Ptr, &ci)
	if !(nCount && nSize)
		return -2
	Loop, % nCount {
		sString := StrGet(NumGet(ci, (idx := (48+7*A_PtrSize)*(A_Index-1))+32+3*A_PtrSize), "UTF-16")
		if !InStr(sString, "*" Extension)
			continue
		pCodec := &ci+idx
		break
	}
	if !pCodec
		return -3
	if (Quality != 75){
		Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
		if Extension in .JPG,.JPEG,.JPE,.JFIF
		{
			DllCall("gdiplus\GdipGetEncoderParameterListSize", Ptr, pBitmap, Ptr, pCodec, "uint*", nSize)
			VarSetCapacity(EncoderParameters, nSize, 0)
			DllCall("gdiplus\GdipGetEncoderParameterList", Ptr, pBitmap, Ptr, pCodec, "uint", nSize, Ptr, &EncoderParameters)
			Loop, % NumGet(EncoderParameters, "UInt") {
				elem := (24+(A_PtrSize ? A_PtrSize : 4))*(A_Index-1) + 4 + (pad := A_PtrSize = 8 ? 4 : 0)
				if (NumGet(EncoderParameters, elem+16, "UInt") = 1) && (NumGet(EncoderParameters, elem+20, "UInt") = 6){
					p := elem+&EncoderParameters-pad-4
					NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20, "UInt")), "UInt")
					break
				}
			}
		}
	}
	DllCall("ole32\CreateStreamOnHGlobal", "ptr",0, "int",true, "ptr*",pStream)
	DllCall("gdiplus\GdipSaveImageToStream", "ptr",pBitmap, "ptr",pStream, "ptr",pCodec, "uint",p ? p : 0)
    DllCall("ole32\GetHGlobalFromStream", "ptr",pStream, "uint*",hData)
	pData := DllCall("GlobalLock", "ptr",hData, "uptr")
	nSize := DllCall("GlobalSize", "uint",pData)
	VarSetCapacity(Bin, nSize, 0)
	DllCall("RtlMoveMemory", "ptr",&Bin , "ptr",pData , "uint",nSize)
	DllCall("GlobalUnlock", "ptr",hData)
	DllCall(NumGet(NumGet(pStream + 0, 0, "uptr") + (A_PtrSize * 2), 0, "uptr"), "ptr",pStream)
	DllCall("GlobalFree", "ptr",hData)
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint",0x01, "ptr",0, "uint*",base64Length)
	VarSetCapacity(base64, base64Length*2, 0)				
	;*************************	
	;https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=453367#p453387
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint", 0x40000001 , "ptr",&base64, "uint*",base64Length) ; [ 0x40000001 = CRYPT_STRING_NOCRLF ( 0x40000000 ) And CRYPT_STRING_BASE64 ( 0x00000001 ) ]
	;*************************
	Bin := ""
	VarSetCapacity(Bin, 0)
	VarSetCapacity(base64, -1)
	return  base64
}
;******************************************************************************************************************
;******************************************************************************************************************	
CreateCroppedIconBitmap( InputPBitmap , Output ){ ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=101960&p=453285#p453292 
	OutputpBitmap := Gdip_CreateBitmap( 71 , 71 ) , G := Gdip_GraphicsFromImage( OutputpBitmap )
	Gdip_SetSmoothingMode( G , 4 ) , Gdip_SetInterpolationMode( G , 7 )
	Gdip_DrawImage( G , InputPBitmap , 0 , 0 , 71 , 71 )
	HBM1 := Gdip_CreateHBITMAPFromBitmap( OutputpBitmap )
	HDC1 := CreateCompatibleDC()
	OBM1 := SelectObject( HDC1 , HBM1 )
	HBM2 := CreateDIBSection( 71 , 71 )
	HDC2 := CreateCompatibleDC()
	OBM2 := SelectObject( HDC2 , HBM2 )
	G1 := Gdip_GraphicsFromHDC( HDC2 )
	Gdip_SetSmoothingMode( G1 , 4 ) , Gdip_SetInterpolationMode( G1 , 7 )
	Brush := Gdip_BrushCreateSolid( "0xFFFFFFFF" ) , Gdip_FillRoundedRectangle( G1 , Brush , 1 , 1 , 69 ,  69 , 10 ) , Gdip_DeleteBrush( Brush )
	BitBlt( HDC1 , 0 , 0 , 71 , 71 , HDC2 , 0 , 0 , 0x008800C6 ) ;SRCAND
	SelectObject( HDC1 , OBM1 ) , SelectObject( HDC2 , OBM2 )
	DeleteDC( HDC1 ), DeleteDC( HDC2 ) , DeleteObject( HBM2 )
	Gdip_DisposeImage( OutputpBitmap )
	VarSetCapacity(BITMAP, size := 16 + A_PtrSize*2, 0)
	DllCall("GetObject", "Ptr", HBM1 , "UInt", size, "Ptr", &BITMAP)
	pPix := NumGet(BITMAP, 16 + A_PtrSize)
	OutputpBitmap := Gdip_CreateBitmap( 71 , 71 ), G := Gdip_GraphicsFromImage( OutputpBitmap )
	Gdip_SetSmoothingMode( G , 2 ) , Gdip_SetInterpolationMode( G , 7 )
	Gdip_LockBits( OutputpBitmap , 0 , 0 , 71 , 71 , Stride , Scan0 , data )
	Loop % 71
	   DllCall("RtlMoveMemory", "Ptr", Scan0 + Stride * ( ( 71 ) - A_Index ) , "Ptr" , pPix + Stride*(A_Index - 1), "Ptr", Stride)
	Gdip_UnlockBits( OutputpBitmap , data )
	DeleteObject( HBM1 )
	Pen := Gdip_CreatePen( "0xFFD8DADE" , 3 ) , Gdip_DrawRoundedRectangle( G , Pen , 1 , 1  , 69  , 69  , 10  ) , Gdip_DeletePen( Pen )
	Pen := Gdip_CreatePen( "0x99000000" , 1 ) , Gdip_DrawRoundedRectangle( G , Pen , 1 , 1  , 69  , 69  , 10  ) , Gdip_DeletePen( Pen )
	return OutputpBitmap
}	
;******************************************************************************************************************
;******************************************************************************************************************
#If ( Active )
	+WheelUp::
		( ( Output.W -= 2 ) < 10 ) ? ( Output.W := 10 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return 
	!WheelUp::	
		( ( Output.W -= 10 )  < 10 ) ? ( Output.W := 10 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	!WheelDown::
		( ( Output.W += 10 ) > 300 ) ? ( Output.W := 300 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	+WheelDown::
		( ( Output.W += 2 ) > 300 ) ? ( Output.W := 300 ) 
		Output.H := Output.W
		Gui2.ClearWindow()
		Gui2.DrawBitmap( HB_BITMAP_MAKER( Output ) , { X: 0 , Y: 0 , W: Gui2.W , H: Gui2.H } , dispose := 1 , AutoUpdate := 1 )
		sleep, 30
		return
	
	*Up::
		if( GetKeyState( "Shift" ) )
			MouseMove, 0, -10, 0, R
		else
			MouseMove, 0, -1, 0, R
		return
	*Down::
		if( GetKeyState( "Shift" ) )
			MouseMove, 0, +10, 0, R
		else
			MouseMove, 0, +1, 0, R
		return	
	*Left::
		if( GetKeyState( "Shift" ) )
			MouseMove, -10, 0, 0, R
		else
			MouseMove, -1, 0, 0, R
		return	
	*Right::
		if( GetKeyState( "Shift" ) )
			MouseMove, +10, 0, 0, R
		else
			MouseMove, +1, 0, 0, R
		return				
#If

;******************************************************************************************************************
;******************************************************************************************************************

B64ToPBitmap( Input ){
	local ptr , uptr , pBitmap , pStream , hData , pData , Dec , DecLen , B64
	VarSetCapacity( B64 , strlen( Input ) << !!A_IsUnicode )
	B64 := Input
	If !DllCall("Crypt32.dll\CryptStringToBinary" ( ( A_IsUnicode ) ? ( "W" ) : ( "A" ) ), Ptr := A_PtrSize ? "Ptr" : "UInt" , &B64, "UInt", 0, "UInt", 0x01, Ptr, 0, "UIntP", DecLen, Ptr, 0, Ptr, 0)
		Return False
	VarSetCapacity( Dec , DecLen , 0 )
	If !DllCall("Crypt32.dll\CryptStringToBinary" (A_IsUnicode ? "W" : "A"), Ptr, &B64, "UInt", 0, "UInt", 0x01, Ptr, &Dec, "UIntP", DecLen, Ptr, 0, Ptr, 0)
		Return False
	DllCall("Kernel32.dll\RtlMoveMemory", Ptr, pData := DllCall("Kernel32.dll\GlobalLock", Ptr, hData := DllCall( "Kernel32.dll\GlobalAlloc", "UInt", 2,  UPtr := A_PtrSize ? "UPtr" : "UInt" , DecLen, UPtr), UPtr) , Ptr, &Dec, UPtr, DecLen)
	DllCall("Kernel32.dll\GlobalUnlock", Ptr, hData)
	DllCall("Ole32.dll\CreateStreamOnHGlobal", Ptr, hData, "Int", True, Ptr "P", pStream)
	DllCall("Gdiplus.dll\GdipCreateBitmapFromStream",  Ptr, pStream, Ptr "P", pBitmap)
	return pBitmap
}
HB_BITMAP_MAKER( obj := "" , ScaleFactor := 1 ){
	pBitmap := Gdip_CreateBitmap( 500 * ScaleFactor , 500 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 3 )
	Pen := Gdip_CreatePen( "0xFFff0000" , 1 ) , Gdip_DrawRectangle( G , Pen , 1 * ScaleFactor , 1 * ScaleFactor , ( obj.W + 8 ) * ScaleFactor , ( obj.H + 8 ) * ScaleFactor ) , Gdip_DeletePen( Pen )
	Gdip_SetSmoothingMode( G , 2 )
	Pen := Gdip_CreatePen( "0xFF000000" , 1 ) , Gdip_DrawRoundedRectangle( G , Pen , 5 * ScaleFactor , 5 * ScaleFactor , obj.W * ScaleFactor , obj.H * ScaleFactor , 10 * ScaleFactor ) , Gdip_DeletePen( Pen )
	Gdip_DeleteGraphics( G )
	return pBitmap
}

MenuPanel( ScaleFactor := 1 ){
	;Bitmap Created Using: HB Bitmap Maker
	local x , y , pBitmap , G , Brush , Pen 
	pBitmap := Gdip_CreateBitmap( 290 * ScaleFactor , 559 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 2 )
	Brush := Gdip_CreateLineBrushFromRect( 2 * ScaleFactor , 4 * ScaleFactor , 284 * ScaleFactor , 548 * ScaleFactor , "0x99C1BFC1" , "0x66000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 1 * ScaleFactor , 1 * ScaleFactor , 287 * ScaleFactor , 556 * ScaleFactor , 25 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99F9F7F9" ) , Gdip_FillRoundedRectangle( G , Brush , 5 * ScaleFactor , 5 * ScaleFactor , 279 * ScaleFactor , 548 * ScaleFactor , 25 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99E6F1FE" ) , Gdip_FillRoundedRectangle( G , Brush , 19 * ScaleFactor , 19 * ScaleFactor , 250 * ScaleFactor , 450 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xaaD4D4D4" )
	y := 29
	Loop 4	{
		x := 29
		Loop, 3	{
			Gdip_FillRoundedRectangle( G , Brush , ( x - 3 ) * ScaleFactor , ( y - 3 ) * ScaleFactor , 77 * ScaleFactor , 77 * ScaleFactor , 10 * ScaleFactor )
			x += 80
		}
		y += 120
	}
	Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x99E6E6E6" ) , Gdip_FillEllipse( G , Brush , 115 * ScaleFactor , 481 * ScaleFactor , 61 * ScaleFactor , 61 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Gdip_DeleteGraphics( G )
	return pBitmap
}
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
class PopUpWindow	{
;PopUpWindow v2.2
;Date Written: Oct 28th, 2021
;Last Edit: Feb 7th, 2022 :Changed the trigger method.
;Written By: Hellbent aka CivReborn
;SpcThanks: teadrinker , malcev 
	static Index := 0 , Windows := [] , Handles := [] , EditHwnd , HelperHwnd
	__New( obj := "" ){
		This._SetDefaults()
		This.UpdateSettings( obj )
		This._CreateWindow()
		This._CreateWindowGraphics()
		if( This.AutoShow )
			This.ShowWindow( This.Title )
	}
	_SetDefaults(){
		This.X := 10
		This.Y := 10
		This.W := 10
		This.H := 10
		This.Smoothing := 2
		This.Options := " -DPIScale +AlwaysOnTop "
		This.AutoShow := 0
		This.GdipStartUp := 0
		This.Title := ""
		
		This.Controls := []
		This.Handles := []
		This.Index := 0 
	}
	UpdateSettings( obj := "" , UpdateGraphics := 0 ){
		local k , v
		if( IsObject( obj ) )
			for k, v in obj
				This[ k ] := obj[ k ]
		( This.X = "Center" ) ? ( This.X := ( A_ScreenWidth - This.W ) / 2 ) 	
		( This.Y = "Center" ) ? ( This.Y := ( A_ScreenHeight - This.H ) / 2 ) 	
		if( UpdateGraphics ){
			This._DestroyWindowsGraphics()
			This._CreateWindowGraphics()
		}
	}
	_CreateWindow(){
		local hwnd
		Gui , New, % " +LastFound +E0x80000 hwndhwnd -Caption  " This.Options
		PopUpWindow.Index++
		This.Index := PopUpWindow.Index
		PopUpWindow.Windows[ PopUpWindow.Index ] := This
		This.Hwnd := hwnd
		PopUpWindow.Handles[ hwnd ] := PopUpWindow.Index
		if( This.GdipStartUp && !PopUpWindow.pToken )
			PopUpWindow.pToken := GDIP_STARTUP()
	}
	_DestroyWindowsGraphics(){
		Gdip_DeleteGraphics( This.G )
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
	}
	_CreateWindowGraphics(){
		This.hbm := CreateDIBSection( This.W , This.H )
		This.hdc := CreateCompatibleDC()
		This.obm := SelectObject( This.hdc , This.hbm )
		This.G := Gdip_GraphicsFromHDC( This.hdc )
		Gdip_SetSmoothingMode( This.G , This.Smoothing )
	}
	ShowWindow( Title := "" ){
		Gui , % This.Hwnd ":Show", % "x" This.X " y" This.Y " w" This.W " h" This.H " NA", % Title
	}
	HideWindow(){
		Gui , % This.Hwnd ":Hide",
	}
	UpdateWindow( alpha := 255 ){
		UpdateLayeredWindow( This.hwnd , This.hdc , This.X , This.Y , This.W , This.H , alpha )
	}
	ClearWindow( AutoUpdate := 0 ){
		Gdip_GraphicsClear( This.G )
		if( Autoupdate )
			This.UpdateWindow()
	}
	DrawBitmap( pBitmap , obj , dispose := 1 , AutoUpdate := 0 ){
		Gdip_DrawImage( This.G , pBitmap , obj.X , obj.Y , obj.W , obj.H )
		if( dispose )
			Gdip_DisposeImage( pBitmap )
		if( Autoupdate )
			This.UpdateWindow()
	}
	PaintBackground( color := "0xFF000000" , AutoUpdate := 0 ){
		if( isObject( color ) ){
			Brush := Gdip_BrushCreateSolid( ( color.HasKey( "Color" ) ) ? ( color.Color ) : ( "0xFF000000" ) ) 
			if( color.Haskey( "Round" ) )
				Gdip_FillRoundedRectangle( This.G , Brush , color.X , color.Y , color.W , color.H , color.Round )
			else
				Gdip_FillRectangle( This.G , Brush , color.X , color.Y , color.W , color.H ) 
		}else{
			Brush := Gdip_BrushCreateSolid( color ) 
			Gdip_FillRectangle( This.G , Brush , -1 , -1 , This.W + 2 , This.H + 2 ) 
		}
		Gdip_DeleteBrush( Brush )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DeleteWindow( GDIPShutdown := 0 ){
		Gui, % This.Hwnd ":Destroy"
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
		Gdip_DeleteGraphics( This.G )
		hwnd := This.Hwnd
		for k, v in PopUpWindow.Windows[ Hwnd ]
			This[k] := ""
		PopUpWindow.Windows[ Hwnd ] := ""
		if( GDIPShutdown ){
			Gdip_Shutdown( PopUpWindow.pToken )
			PopUpWindow.pToken := ""
		}
	}
	_OnClose( wParam ){
		if( wParam = 0xF060 ){	;SC_CLOSE ;[ clicking on the gui close button ]
			Try{
				Gui, % PopUpWindow.HelperHwnd ":Destroy"
				SoundBeep, 555
			}
		}
	}
	CreateCachedBitmap( pBitmap , Dispose := 0 ){
		local pCachedBitmap
		if( This.CachedBitmap )
			This.DisposeCachedbitmap()
		DllCall( "gdiplus\GdipCreateCachedBitmap" , "Ptr" , pBitmap , "Ptr" , this.G , "PtrP" , pCachedBitmap )
		This.CachedBitmap := pCachedBitmap
		if( Dispose )
			Gdip_DisposeImage( pBitmap )
	}
	DrawCachedBitmap( AutoUpdate := 0 ){
		DllCall( "gdiplus\GdipDrawCachedBitmap" , "Ptr" , this.G , "Ptr" , This.CachedBitmap , "Int" , 0 , "Int" , 0 )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DisposeCachedbitmap(){
		DllCall( "gdiplus\GdipDeleteCachedBitmap" , "Ptr" , This.CachedBitmap )
	}
	Helper(){
		local hwnd , MethodList := ["__New","UpdateSettings","ShowWindow","HideWindow","UpdateWindow","ClearWindow","DrawBitmap","PaintBackground","DeleteWindow" , "AddTrigger" , "DrawTriggers", "CreateCachedBitmap" , "DrawCachedBitmap" , "DisposeCachedbitmap" ]
		Gui, New, +AlwaysOnTop +ToolWindow +HwndHwnd
		PopUpWindow.HelperHwnd := hwnd
		Gui, Add, Edit, xm ym w250 r1 Center hwndhwnd, Gui1
		PopUpWindow.EditHwnd := hwnd
		loop, % MethodList.Length()	
			Gui, Add, Button, xm y+1 w250 r1 gPopUpWindow._HelperClip, % MethodList[ A_Index ]
		Gui, Show,,
		OnMessage( 0x112 , This._OnClose.Bind( hwnd ) )
	}
	_HelperClip(){
		local ClipList 
		
		GuiControlGet, out, % PopUpWindow.HelperHwnd ":", % PopUpWindow.EditHwnd	
		
		ClipList := 		{ 	__New: 					" := New PopUpWindow( { AutoShow: 1 , X: 0 , Y: 0 , W: A_ScreenWidth , H: A_ScreenHeight , Options: "" -DPIScale +AlwaysOnTop "" } )"
							,	UpdateSettings:			".UpdateSettings( { X: """" , Y: """" , W: """" , H: """" } , UpdateGraphics := 0 )"
							,	ShowWindow:				".ShowWindow( Title := """" )"
							,	HideWindow:				".HideWindow()"
							,	UpdateWindow:			".UpdateWindow()"
							,	ClearWindow:			".ClearWindow( AutoUpdate := 0 )"
							,	DrawBitmap:				".DrawBitmap( pBitmap := """" , { X: 0 , Y: 0 , W: " Out ".W , H: " Out ".H } , dispose := 1 , AutoUpdate := 0 )"
							,	PaintBackground:		".PaintBackground( color := ""0xFF000000"" , AutoUpdate := 0 )  "  ";{ Color: ""0xFF000000"" , X: 2 , Y: 2 , W: " Out ".W - 4 , H: " Out ".H - 4 , Round: 10 }"
							,	DeleteWindow:			".DeleteWindow( GDIPShutdown := 0 )"
							,	AddTrigger:				".AddTrigger( { X: """" , Y: """" , W: """" , H: """" , Value: """" , Label: """" } )"	
							,	DrawTriggers:			".DrawTriggers( color := ""0xFFFF0000"" , AutoUpdate := 0 )"	
							,	CreateCachedBitmap:		".CreateCachedBitmap( pBitmap , Dispose := 0 )"	
							,	DrawCachedBitmap: 		".DrawCachedBitmap( AutoUpdate := 0 )"	
							,	DisposeCachedbitmap:	".DisposeCachedbitmap()"	}
							
		clipboard := Out ClipList[ A_GuiControl ]
		
	}
}

User avatar
RaptorX
Posts: 390
Joined: 06 Dec 2014, 14:27
Contact:

Re: [ Tool ] Quick Icons ( Base64 )

17 Apr 2022, 15:20

Hellbent wrote:
16 Apr 2022, 22:07
Thank you @SirSocks.
@RaptorX was adding a few new features to it yesterday, I don't know if he ended up finishing it yet but he added a switch between circle and square icons as well as the option to save to a file as a .PNG
Yes, I did finish it.
As it was done during the live stream with Joe, we linked the download to this page:
https://www.the-automator.com/downloads/updated-to-hellbents-quick-icons-maker/
Projects:
AHK-ToolKit
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: [ Tool ] Quick Icons ( Base64 )

18 Apr 2022, 00:50

JFTR:
https://www.youtube.com/watch?v=jduDzikota4 (Touch Portal: Create Your Own Custom Buttons - using MS PowerPoint)
https://www.youtube.com/watch?v=-OQNqPI39Yc (Touch Portal: How to Create Professional Looking Custom Buttons - using MS PowerPoint & MS Paint3D)
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

26 Jun 2023, 14:10

.

New version available. See OP for the link.

***Requires Windows 8 or higher***


.
20230626144906.png
20230626144906.png (267.43 KiB) Viewed 1224 times
.
User avatar
Hellbent
Posts: 2112
Joined: 23 Sep 2017, 13:34

Re: [ Tool ] Quick Icons ( Base64 )

13 Aug 2023, 05:14

New update. See the top of OP for the link.

**Update**

1. Added the ability to change the background color. Works with images that have transparency that are loaded from the clipboard.

2. Added the ability to draw text. Use `n to create a new line.

.
Image
.

Return to “Scripts and Functions (v1)”

Who is online

Users browsing this forum: chogus, Gewerd_Strauss, jjaysreicarnten and 113 guests