Page 1 of 1

AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 27 Jul 2021, 18:41
by SKAN
Sample call: AhkSetIcons("DuglyIconSet.ini", A_AhkPath)

The above will copy executable to Working Directory and then apply icons available in IconSet.
Existing icons (Only numbered and under language id 1033) will be deleted before new icons are applied from set.

Note: Explorer will not depict the changes immediately, in which case, close all Explorer windows,
run once DllCall("Shell32.dll\SHChangeNotify", "Int", 0x8000000, "UInt", 0x0, "Ptr", 0, "Ptr" ,0) which will trigger a icon cache rebuild.
 
 

Sample IconSet: Edit: Improved icon set 01-Aug-2021
 
Image
 

Code: Select all

[Info]
Author=SKAN
Description=Dugly icon set v0.02 for AutoHotkey interpreter executables
Filename=DuglyIconSet.ini
Notes=Icon 10 32x32 4-bit is in .ICO format, rest are .PNG
URL=tiny.cc/ahkseticons
Bytes=10263
[159]
1=iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABsFBMVEUAAACAwP98tO1+uvZ9uPOp1f+l1P9/vPgmes9+vfpvq+l+t/CLv/Sy3P+s1/8wl/1zuf58uPJzt/yBvvyCwf+Mxv+NxP2m0v+m1P2y3P+x2/8ldcgldMam0/////8vjeorf9UwkPApe84kkf0rgtkxlfkwkfMvju0rgdcyl/wuiuctheAxk/Qpeswoecosg9stiOInd8cxk/YuiOQiZakpfdAXbMHX4O0qfdIoeMgXRnUndcMjarHV2d4shNwmcb4Xar4YSnzW2+Idfd6qv90kbLQxlPfX4vElb7ojaa4hY6YhYqQfXZ0eWpdRp/0vlfsjjfYhifAghuwfhOcegeRLktocetg8h9Qbd9Qbdc8bcsnW3ui/x9Mab8SnssBykbkgYKBuhJ9ugpobUYgaToMZTIA0V39EoP719/kgjPns8fhDnPjY5PYtkPTV2N11o9uRsNrK0NiputIbdtImetAVbMQ9eLsdVpEbUIbi6vbC1/SgxPSHtvLg5OiTt+iStueFsOd2peFnn+G1xd2Co86crsebrMQ+fcIjcL88dLJvh6d+jqVeeZpLaI0WQm8TN1zst+L+AAAAHnRSTlMA8PDw8I158P3y7+OxNQT28/Lr4+KysaGhNDT393oemb0dAAAChElEQVQ4y22TZ1vaUBSAb6siy71tGzCEQBOyCMMYTGoVioAsBRS1arVuW1tn997rL/eeG55+wL6f3ufy3pMHyEFAh22g/1oT/QO3OlCDtu6dLt8Vuna62xDQOZT3+Qq3r1Dw+fJDnXA/v1fwY1IhNpTyW4RZlg37C3t5PGO0t0iOQy+fv+U9IT/xF4evDY5NpYq9o8h2UAwDAYqivgQ9IeKHFDVDc2y4eGBDg+xRCOCeUdSaLrPgnnsUtZwIBkJH7CDqK7EEGU/4npQC4CoOnuQEjmVLfchRGiPwONjGt8BlHNyfU9SxsZIDOcpWYOBgKsE0BWUHai8HCAwESYY4TwJNDQTK7ah93kN4ZwXEJew/cqLq8cz/C7jH5BFBDwDTHqw3gpYFDpAhmIiIDMMEg5oVyBy30GIFqiwd48OV5Xg8vk/txrFvZIVGMK2qKv9mn2piOyPwqjoNgSzL7ynCo8m7hFfkcTQvyyTged57vLaCD/9MbG1ubl5ubZBAwB9AUOV5w6vMPsUDfl9EEpjZNWsCDqotqLVqGFJw3MTB5FRGpzHijDXBMIxqK2pdlCSJYeg4Dh7O0hLGS4KMiHURAgZoBAJ41Ao0rBCcBAHBCkRwmgRZBetJK+pZ8gIaBFMRDbwR6FiXepDrP8FH+KHWSeBCbvvpOEaxAgVcOIf/ImdGx0/tbmSr1aMY5QN+y7YiCjhtLlO7GzmTjtZrNjTirNvxd1fOP638ukgoNKB/+/zzMmsK9rpzBC9O5UwUBM2MzM1l0ooAKOlILpvUxbNKG6zecGV1VRF1M5lM65oIaLqZTn+NrVaGO63lddZuxGJ3gFgDrDdrTrjfWH+363oTLreNrP9fzfG5UZOC6ocAAAAASUVORK5CYII=
2=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
3=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABrVBMVEVoq+5stv9qr/RmpeS84f+94f8AAABms/9foeRpsPhmqOpqsPZprfF/vv18tu1op+aTyf+RxfeSyP6QxPhhsf9op+Zss/pssvpoqeloqOltt/9utv////8fjfz///Mhft0ed9ISbcr///sbhO4bgecVfOQWddMjd88hc8giWZD1+f8qkvsai/sylvr9+vnk7Pgmj/gXiPgxlPYaiPb69/WmzfQljfQXhPSPv/EPgPAvkO/h5evx6+UQddwnf9khfdkYeNkfetYrf9MUcc4edcwWbcQSacINZ8ICU6cASqQeWpYnXZQulv7n7/oOhPm11Pefy/eDvPeAufbY5PTC1/Mbh/P///DP3vCNve8KfO/G1+2GuO0Rfuwniuv38eo1j+kIeOklhufF0+YAcuYuh+QafeETeuA+jN/M096xxt5Rl944itwYetwAa9spfdITctAHa89glc22v8sdc8sreckMaMW5u8CHo78JYbuInrZVg7UGXbUQYLOFm7IAV7KQoLF8k6tujKsMW6tdgadQd6FAbZwyZZorYppIb5kgXJk7Z5YARJMXU5EARo4ANnFV0fNvAAAAHHRSTlPz8vLyJiIA8vL5+fPy5+fin5+cnPLy4+Pj4+LiHnnpwwAAAQdJREFUGNMNz4Niw1AUANC7rKndea9B26i2bcy2bdv2Ny/nDw5IJfpumaxJJGvp0kukgGscZl/EaRZF+no0OBi93sDg+HbY5Rsa3oo5jNA+6p8MWa4YVyyKzg+cbaCwxhcGiDfSPzONHk8DClDZ4kz/WJ0JL0fRM21VAWab3R0h3jPzqRB62bdigK2tTPQiNxIFX1kbBurU+obbcn97+ZAICrlVNUCWvEnM/dXuakuWBrUDAGxmz578JBfTHqJBZQGUhVzenqxTJOchhCKrhE6aOkGEcJyuTKGPcqEDTEWa3zz74fL04dHXBWcCXMtXqr9PpXLp+rvKa3Gxb9DJ5a3NIrnOIJH+A7G7NeJMCQN8AAAAAElFTkSuQmCC
[160]
7=iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAjVBMVEUAAAAAAAAAAAAAAAAAAAAAAADY2NjNzczQ0NC5urm+vb7BwcG2tbbJycmAgIDGxsbc3NytrKzs7Ozk5OTV1NXDw8OwsLD4+Pnp6enT09Ph4eHf39+ysrL19PTy8vLm5uZdXV38/Pzv8O9mZmYgICCYmJiOjo5ramqnp6eIiIidnp5ycnJXV1dISUg8PDyGia7TAAAABXRSTlMAv4CfcMCTpBQAAAFESURBVDjLbZDpdoIwEEal7UgWKBFFUNkUZHHp+z9eJ4HCJKfz997vcsJGnwfufW6s84adueMxz4Mg4Jw7hkc5xxNOw5vwcZ4LIZyveBNeuJSgDUdArLnQPAHb8GgecRKBua9VcHgY+r7Pvj8WIc9JPjKcsRMR1rk0c8MPRFjz0cq3ROBuHvGWCjS/cEUEYeVPE78Qwc0bTgWN7by6nPdEWOdsniOnQoI4tObIKyK4eY2zjAh/eYvHRPCdfKW5JbCZA8e5AI3jGxGWOXDMSzC8JAJy0bw6dYG+HisJMatVSQXcB+OuHc7QB+0uAdbmZVEQAfPiBdDtQWb1PYL2iTy1BNW8t++uAhlr4Q5+kVqCUk0ztGMGCQohlI+f1BLw8VHfP+qsZrcuPzRF/EzSKxHMv5sefyv15/GuVFi5wYZbAvx/WvgFc8Ms7hqq+u8AAAAASUVORK5CYII=
8=iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAkFBMVEUAAAAAAAAAAAAAAAAAAADT0tPOzs6+vr7g4OC7u7vIyMjW1tbd3N3m5ua0tLTz8/PDw8Ps7OyxsbHY2NjBwcHLy8u4uLjFxcW2traurq7a2tr6+vrp6enj4+Pv8O/29varq6vKysqQkJBeXV2Xl5d1dXWKiopZWVlMTEuioqKbnJx/fn9mZmcfHx87OzsdHR0TD2HUAAAABHRSTlMAv5+P9k/X0wAAAgpJREFUSMeFktuWmkAQRYekGAQbtcELg2AUFXQuyf//XaqrO2BXtZmzlm97Hw8FLzYRPM+Pl0Cio82bSVEUC0xVVdttmqZBI/Jw4h2eJsAMJjA+SZLgqojhC8SJt4I0omA98WsIGVF4PuLrFThDChPu5hDvBPjJham+ItwE8dUuy7LTZvMa+UJhYnGvfvePDwnuOpJHXAjyaYknnPiYC3LOIx/HXCD+6ZxYCuxlOTxz9Zg5E4h/Xj+fc0HMofrNyJclE+QcetqJr5kg50z1xCsmCN6vr5UUPNzyU71SMyaE6j2eC951PL62vBT4t4AZ6zEtE57MqUeeC44/Tf2IP/I5E5CXx3/Acy6wObxeCvRpiuOrEW8aIZz+z2smnNh1HD7xQpDzCW8dLgTvOj1UVN9BMvIHJngvq4ctzSGh0cRLgfBikZRK9YBfe9misG5c/2HJBKpf/QGAQakOvgC+4hyF2Q1SfUBeCDTn8368wR23X2v8obA6w10bXAjuOnHVQ4dC2uZwbi5wgw+sDwn0tPEVMB1dxwoAV4svfzGBrvMB19cCutYJGv/hDJnluUAva4DZDIWcrkPCLobfjcGlUCtznU8cNZCgjYD1Hbwbfr9ngv0WumE49ud83ZVaX94O2UUtm3cj7IWAuMn4qWk6PoVwKRAueTsn8A+sXhPu+OA/iPqJpwgBvo0T/gLlh2HLyaw9WgAAAABJRU5ErkJggg==
9=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAArlBMVEUAAABgYGAAAAB/f39iYmIAAACVlZUAAABoaGiBgYFycnJwcHAyMjIwMDAAAAD///8AAQDg4ODExcTBwcHX19fT09POzs60tLRwcHD8/Pz5+fnm5ubj4+PGxsaurq6sq6yPj497fHt5eXn29vbv8O/t7e3r6+rPz8+ysbKbm5uamZp2dnZra2toaGhMTEw/Pz8wMDASERHz9PTIyMi9vL28vbyIiIiAgIBgYGBISEdSeeGTAAAAD3RSTlMA8oHy8oz9efXy8vLm5gfIB1NVAAAAoUlEQVQY0z3KRxaCQBAA0UEFzN0gOecoyez9L6bMALX8rwghJ4Mb27Y8YR1AGot1nIRzLmOKgMifKdjyWF58jF6kkN01SXPdzIJ6RSFR3UpWtFdhNgxutodeqgwNXBlYqY4PcIZwBtPUsVR8LMFgAFKL3bdHfYINWBGq8EQf6gmgQhs09CCaIUAH1P+xQB4mEAcqhBT2sPSmcAx2a5bQieQHzQAQpfTh4EwAAAAASUVORK5CYII=
10=AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/LpcAFk4cgD85tQA9KY0APzOhADEjnQA1KZ8ANzCrACsmpQA/KKkAPz8+QDcmowA/Nq0ANSinADswqQAAAAAIiIiIiIiIiIiIiIgAAAABu7u7u7u7u7u7u7uIAAAAAYz3d3d3d3d3d3d3CAAAAAGMzMzMz3d3d3d3dwgAAAABjMzPT0z3d3d3d3cIAAAAAazPTMzPT3d3d3d3CAAAAAGOzszMzMz3f3d3dwgAAAABjMzMi09PT3SLf3cIAAAAAa7syItM9PTIi3d3CAAAAAGPbMiIzMzMyIt3dwgAAAABrs7IiMzM9MiL93cIAAAAAazvSIjMzPTIi3d3CAAAAAGuzsiI70z0yIjPdwgAAAABruzIiIiszMiIz3cIAAAAAazuyIiIiIiIi893CAAAAAGu7siK9siIiIjPdwgAAAABrO7Iis7MzMiI93cIAAAAAa7syIrO70zIi0z3CAAAAAGu7siLbOzsyItPfwgAAAABru7Iiuzuz0iIzPcIAAAAAa7uyIrs7O7IiM93CAAAAAGu7siu9u7OyIzs9wgAAAABruzu7u7s7vbPTPcIAAAAAa7u7u7u7s7Ozsz3CAAAAAGu7u7s7u72zs6qqwgAAAABru7u7u7u7uz9ERGIAAAAAa7uzu7u7s7O/F3QgAAAAAGu7u7u7u7s7v1HCAAAAAABru7u7u7O7uz3WIAAAAAAAa7u7u7u7u7u9cgAAAAAAAGZmZmZmZmZmZmAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAA/4AAAf+AAAP/gAAH/4AAD//////w==
[206]
4=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAn1BMVEUA/wAA/wAA/wAkmSRCuEIAAAAD+wNxiXFpgmlDW0MC+wI1SzU7VDsA/wD///93d3dqampOTk5UVFRvb29iYmJYWFhKSkpGRkY7Ozt+fn5nZ2f7+/t7e3t0dHRAQED5+flzc3NdXV01NTXy8vLi4uLf39/b29u3t7ejo6ODg4NbW1tFRUU4ODj29vbh4eHV1dXJycnAwMC8vLxfX180NDTdxkIpAAAADXRSTlPnqB3BwAD16enp9evpVG2ZTAAAAMdJREFUGNNlz8d2wjAQheGRbAwk0ahYzZKFC72k5/2fLXM47LiLf/HtLiw4A/EYML4A3tRLKTuaHJd1w4HVUvafSlIPStYMYFXKGVUppcduXAGItm0l+nuVagUIpdQJr9QRbVIEKaUvDNbaDi8pEdhfucPhPWPO2lqC6XLAfO57uctxmgicM/shOue+kUpgjNkOkbrHmzEEWuvtcKN+4J/WAmDtA+LsvT+i92sAVoVw+plDCPoYrxUD/lK9bea4ocXXquFP9/8B5q0TO2jfmFEAAAAASUVORK5CYII=
[207]
5=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEX/AAD/AAD7AgL/AAD/AAAAAABPODiJcXGCaWlbQ0O5RES2QUGbJyeVIiKXIyP/AAD/AAD///9qamp8fHxUVFRGRkZ4eHhzc3Nvb29YWFhPT09KSkp2dnY6Ojr5+flmZmZcXFz9/f1iYmJgYGBBQUE9PT3i4uKCgoJpaWlNTU01NTXz8/Pf39/b29u3t7fw8PDV1dXJycnAwMC8vLykpKShoaE0NDQoiM+SAAAAEHRSTlOoHfXn5gDq6enpwMDAwcAelLPPOAAAAMtJREFUGNM1j8dWhEAQAJsFNqv0MIHJA0jcYPb/P81+Pq1DHepWUD5BXv2RQ1ZCtjnupKsJp3bHTQZwkrJ+ZZJ8m+UJIN8rNeGslKpxUvsCqqZpHNpfM9ZUUDHGvlCQFXYzoxBjfEPRdV2NKUYKfe9GDJcW23bpewop3bCdaunGMKREQWt+DV5r/Y5kCpzzlzCQr+g5p2DMcgneGDPitzEV5AcrEFdr7R2tPRQAZyE+P1YhxHIfxBlo7nE7rP6Z8NsHmiszKP73C9r/AWulFj5Gh+QXAAAAAElFTkSuQmCC
[208]
6=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAn1BMVEX+/v79/f3///8AAAD6+vr5+fmJiYmCgoJbW1uWlpa5ubm2trabm5tLS0tUVFT////9/f3///93d3dqampOTk5UVFRzc3Nvb29YWFhKSkpGRkZmZmZhYWE8PDz5+fl9fX17e3tcXFxAQEA0NDTi4uKCgoJpaWk4ODjf39++vr63t7ejo6NFRUX29vbz8/Pw8PDb29va2trV1dXJyclfX18bqZHoAAAAEHRSTlPnqB0A9fTp6enBwMDA6+keTviNMgAAAMZJREFUGNNVzzdyAzEQRNEBlp6UhIFbeC64jk5e9z+bplRK2MEPXtbQvDAQ/wPGG+CL3UrKI03a1W7Bge2l7L6UpH5Mcs8A1taOOFlrOxztGkC0bSvR/1WpVoBQSt3wTrWYJkUQY/zGEFM6Yo2RIP3IAcurQCF0SgS1fqIYu04OJddK4Jw5l+ycuyCVwBjzXjL1jLMxBFrrtzJTB+y1FgAbHxB77/0Vvd8AsEMIt0sfQtDXfD8w4Mvt86nPJ9r8tF1yaPjj/V8PoRVXL8yuDgAAAABJRU5ErkJggg==
 
Default IconSet:
 
Image
 

Code: Select all

[Info]
Author=lexikos
Description=Default icon set of AutoHotkey interpreter executables
Filename=DefaultIconSet.ini
Notes=Icon 10 32x32 4-bit is in .ICO format, rest are .PNG
URL=tiny.cc/ahkseticons
Bytes=11049

[159]
1=iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACIlBMVEUMXgwAAAAPYQ8OXw4MXgwMXgwNXg0dbR0MXgwMXgwMXgwMXwwMXQwMXgwMXQwMXQwMXQwMXgwMXQwAAAAocygNXQ2OwY4ibyKBuIEibyIMXgwMXgwMXgwMXgwMXgwMXAwMXQwMXwwNYA3///9dj11zuXNlrWU7iDsvfC8tei11u3VpsWk3hDfY5Nio46hQm1BFkEVBjEE1czUZZhkYYxiIzYiFyYV5v3lnr2cfbh+h4qGLz4twt3BstGwmdCak46RYolhKlUo1gzUzgDMYYBgTXROw4rCr4qud4J2T1pOAxIB8wXxvtW9gqWBcpVxXn1dUnlRTnVNHk0c+ij4odigbahsOWA6Q05BNmE1Ml0wqeSojciMaWhrp9OmX2pd9w313vXdiqmJep14/iz8icSIUYBQRWxHv+O/r9+uZ3JmO0Y6BxoFDjkMlbSUZXBnm8ua9172c1Zya3ZqV2JWQyJCAvYB2tnZbpFtLlks5hDk1gDUsdiwgayAeaB4YVxj5+/nt9e3r8evn8+fg7uDd593V4tXL48vI68jI4Mi+2r6807yz4bOwy7Ck26SVzpWKxIqEvoR5uXlypnJrrmtnrGdPmU9OhU4+iz4kZyQhcCEbaxsZaBkVZRUUYhQNXQ309/Tn7ufj7+PN3M3M5MzK4sq42Li4zbiu1a6r0Kunwqeeu56ZxpmQspCEtYR0n3RysHJsoWxrp2tkk2RhoWFUm1RLi0sfdPPdAAAAI3RSTlPgAPvy3MOT/tW+rSEbuXxqUUgUCf379PTx4KGei4dbNzAsDjlXcIcAAALCSURBVDjLbZP3X1JRGMYPCrh3e9dlCjEEExIIFRwFCogIYiiKmKVU7pWjUtOy3Fvbe6//r+dcKMtP76/f73Pu+773HMLhcHIyjyUlkj2VmMQ/cQYQQio/fqhqsVdosBllOlHQ3lRprnI4i8TrcUdTqJBK9s2VlpYpLpwvb+uqvVqYf+7ipcZcoVEm8m7En+aQHP7BA/ejvLOr4g+34TC7NyE5m2TGH4rxNvC/8iJ8yhWXQfjS6PkKRSDGC3KF8z1GkR2tOP3J5PB3lk8xzFTtb949xjxdolwpTyTcz2z+MsOc/RrjtmmGYb4sg/vkXEJ66ffLWiHkLUW57DkEwZBT2e8qwUaEtH8FK1Q1gBtkukkqdCh9LpUEggH9B2ajAs2j/xes0O9SqaUQbOWdgYrZK1T4gTyd/x4VhsFX6yAY2wIVtTdZQRndT2VUUKmrxW4IMvDCqLCM/OL8+zdjVLilXhUXmyDowPOpcPfbx9eTd8BQVKgWF5f4IYjofh5iD6PjowC7ArgkBCEIfg3CnhJowKV6CHbwhu5d4cmrD89YAdydAKEJvIAKjydm3n1aWfN4rA+ooAU31UCoBG98dBtNrmg9HkvH0KD8BitI60yhTQh9dL8QMKbEpVT6ilTqaVZwm9b1GgjmgkahYe46FaodSi94M3tCiymkr9mC4MB+jT2sMIA83V9UANdsQ3CC62ICmxfLZ1gBXNtCCNcLLurFBifyBtm8vISdwgpusRLCa8cFDQZfMsxbyyDy4JKFVmZ8LQwesXLJERP+X1OfeUHg8Qy0I1+M+X8KOjxWraW+PpxGMuIcQVxwR790WIo8OOb3a6zgkfqRnXSSnax39pkdtH/kYxz90fxImJdCOKfi9T46v6u9+R8eAd+fRR/vybQ4txytgbn9IX3CxqZma7vFGgnv8LI4EPC805PIf4p3PAXwF8tJ9vaUqxERAAAAAElFTkSuQmCC
2=iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAB9VBMVEUMXgwAAAAMXQwNXg0LWwsMXQwMXQwMXgwMXQwPYQ8MXgwMXgwMXgwMXQwAAAAMXgwMXwwMXgwMXQwMXAwMXgw9gj1+tH43fjchbiEMXgwMXgwMXQwAAAD///8MXgwNVw2Gq4ZzunNwt3B6wHpKlko3hTdqs2p9wn0YYhhDj0M9ij2R1JF2vHZkrWQseSwndCeq46qY25hHk0c6iDqDx4NAi0A0gjQfbR+g4aCIzYiGyoZNmU1BjEEdax2N0I2LzosZWxlSnFJosGhUnlQuey6k46Sb3psaaRoZZBmm5Kai46KU15RGkEYaWRoYZxh/xH9nr2dYoVhQm1Cy4rJhqWFbpFswfDAibyKd4J1utG4xfjFgqGBepl4pdymv46+O0Y6CxoJ3vXdjq2NdpV0zgDMrdislciUjcSOu0q5WoFYueC6147VcpVy+376x1rGV2JV4vXgUXBQQWRDI68jB48Gq3KqfxZ+e356awJqEv4RBiUEWVxYVYxUTXxPY59jQ4NDF6MXC1sK63bq22raz17OGvIZ2oHZUnVQ/hz8RXxHL7cvH3Mes5Kyo0aiSupKPxY9+pn57t3tMj0xJgUkZXhkZVRny9vLl7uXS7tK5zrmzyrOjv6Oc0ZybzJuOsI6MwIyAtIB5p3lvm29inGJgkGBRk1E6djpeBITrAAAAHXRSTlPQAPifFvDIu3lzMdeoJwjnj4hkWUTf1dDQrzghBw8AG54AAANLSURBVEjHjdb3UxNBFMDxS6H3YjcvdEggCTW0BKQoqICUEJRiAUJHJYiKdJEmAgL23v9O7/a9vQ1kCOxMfnn7+d7kbrKTkzS4LsTrdNKRS6cLCyeIQVQwHLtiEkUQqoXZvd3pqdzcq5dLSm5eyXuQnX2norK0rPBGZurDnOTk4TV7E0BcNAUhAHtTbW23j/QpGRnNLjtAhJ4FoRC0Mkr+GvPX/Xy1xeJKa4JIJYjSwumT+O6xci0kyEEwnDqR72tvsUOQXgoH59Soj8/z8akH/XCNExKkMPir+lejuX5+emda9VXpoJPOwAr3kwaD4cMhPyTPxl1d6FvTIEQ6C1/49Q3K+nrw+mz2g3x5WpAkSTBF33+RbSat+/hbWzjzkM/XKgG/35e4aewVPuMFzZ6hbwAW0PPhQYPw1fdp5kZvYgH5vEkeCG/hwQh6Bwtk/0R5/jwwCS8C9GYWkM/mgUN41xDNPOgLWEA+e5HfYE4O880WV5caME8B+Qo1EL5PDdCns4B85SMeCN/OAxt6OwvIl/JgHf3u96HNeQMPHEWKx4B8mQh2tsaJ8mAAvZsF5AsxWFp6L6QIFN/vrmUB+bvjQvgFg+itGKDPDBR0oO9hAfljAuZtLCCf+vwQ2/y8uv+NgmL0GJC/h8E7+TP/MenPP6OykniAfpAF5HMw+PRrf8JIq75jmwJnrdUq+2IWkE9epk2vTLOcI/ai/HzTYx6gx4B8yrJ6g6ZW5bzI3sGDOvROFpBXg84Wdh7TZF+kBujrMECvnl+38GYe1KNvYgH5ajUQvuApDwY7FF/PAvLN6nEUPp0HWeizWEBenF/hRYAeA8VnNFt6h3ggfD8PZtFfkoMQ6EXftcI2V40e4Tt/02wOvRLooA9999iCvLcwYfQIX2tdwtkc+kYIluLATL69ZTvptfyzGDGZmLfL3mr7yWZz6GcgUkoEJ/c1VU7lV+Hw9baBDXnmzWK+0Qth0sUgKOK+qtzt8fhev8c20FE8O7dBfgYgStLEA6wxX1OlPM+Ggx6fP/q3ALHK324k1K2dyHshIloJ9DGwYR728QV+/g1+H204vgnogwFs5sB+xgsQcV7DAnzZAJiFwCs2WqMGGn3YOSngCgkNR/kfk7S+suwT42MAAAAASUVORK5CYII=
3=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABDlBMVEUAAABkpGQxeTEGVQY6gDo3fjf///9Dh0OAvIB4tXhhoWFam1pTlVNOkU5KjUo9gz0qdCpdnV1EikQveC8ibSIaZhoTYBO16bWv46+o3aiXuJeSy5KMxox8uXx0sHRvrm9XmVdQk1BLj0tIi0g7gjs2fTYrbisncSciaiIdaB0KWQrT7tPO3s7L58vA3sC92L287ry41rig16CgwKCb05ua0ZqVzZWOyI6IwoiHwYeEv4R0snRnp2djnWNAh0A7fjsycjIbYBsWYxYVWxUOXA7q8Orf7N/Q69DF4sXD6sO54bm01LSmzqai2KKiwaKezJ6HuoeFrIVyo3JpqGlnpGdjlGNNgk1DfkMnaichZSFmZzHVAAAABnRSTlMAw8PDw6uW0QKGAAAA60lEQVQY0xWI1UICURQAj6DnbjfbHSwsSCkqjYDdrf//I17maWYADjiVj4VElDJtKR/S9gaW7Tydnp1fMMFMqAE3sO469/t+eZxFcx1Uy+7gkPEnDCI/5xTgbecGnz8nDIu45ngFYmd0jCcLhg0Rm7xQgjAa06Gy4SsdQmqAOPZusdu/RspvqrUh9fwe7rlCbGlyAzJ/2sPu29e6ifgnFxvQpkEf3VUmiYiXhW7CMmCH6JI4kejQFRNkNnpAV04kgrgtjR3k0Uf4/rOSSL743hqNCo5EThUJIXmht9oNsw5QU5TSoL4xd1VVh39Ckh5neYnfOQAAAABJRU5ErkJggg==

[160]
7=iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA2FBMVEUAAABvP19yOFl2eqlcdq1tbJ+Los10jsRyOFlyOVlyOFlyOFl0jsTQ6P3L5fyMmtycotTY7P3N5/3G4/zs9v7J5Pzb7f3z+f7q9P7g8P3d7v3A4Pzo9P7m8/7i8f293/zS6f3w+P7u9/7V6v3D4vzk8v3e7/263fz2+v632/z6/P74+/7U6f3C4Pz9/v+kovyHXny3s8mLYX6lzPRxtfNfpvFfnd+7vNOEXHyDVnSv0/aIw/OnxelkremUu+V3qd/ByN7CuMqqrMisobmhj6qagJuPb4uQbonQAxXuAAAAC3RSTlMAEL/y8vLvyMiPUGYvLOEAAAFuSURBVDjLjY/ZdoJQDEVr5zaiRcChiKIXqzgVce489///qCe3rJpbfTAvZN29c0gO9qv8dv0TxuNxvz/o9SqVVqvtutWH04ucIQBnvN12q9V6/HR0mJMC8AAY3GUe3N0/G0ZextfrQWc6e1wcCyMv44Og05jO5vPFCeX+BDkOXhveoopCkPHgtZvrctku0uYXMr4BzNwQeJzSV3Aep2Ri27aSAscTpRjneKLEVmooBY4noiwenVJhKAXeDs81zW104JYUeHsW9PYshJZVkgJvh+ff7RU6cEPg4/GM+OX7Z8pCqVCQAm+H5+81ZQXuGQIfp2v99bHEB9yRAjgfN3kZYjsLnec5hgCurwfHdujAIymA6+PA8Xd0ThSNpIDjWLA099BFke9LAcerhI9j7q2IRr7flAJ4OEkImLd7WxG4ISi9fcYRD9zsSkFvx9wBRzxw1xTEeMbjWAoYl/HMTWErPjaFs6udtREuz2lnAf0AyU9DpSAT7VkAAAAASUVORK5CYII=
8=iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAABXFBMVEUAAAByRWp0rOJnfLJxOFhseapxbJcAAACOteFdmd9enNufv+V/lNtrn9h5erKZtNtefbR8hrNxRWt3VHeGk7x1hLV0jsR0jsRyOFmGga1uaZVyP1lyOFnO5/10jsTT6f3q9P7K5fzQ6P3s9v7o9P7i8f3g8P3e7/3c7v3m8/7Y7P2IXnz1+v6Mmtzw+P7V6v3I5PycotTa7f3D4fzu9/7k8v3F4vzH4/zy+f7B4PzW6/2/3/y93vzM5vy73fz3+/6EXXz6/P622/y53PyLYHz7/f6GXXykovz9/v7///+Co/aqzvOhy/KJv/Fiqe7H0ea6utCjj6iXf5xus/Jfo+epmLGRcIuNa4mLZIKMYHyCVXN3Q2J0PF28xPzO4vikwfi22PeJqPew1PaSxvN5uvCBn/DP2u2YnuynxenZ2ujN1Oe5y+aVnte3rsSnm7SxnbKflLGjhp2eg51/UG8vQeRGAAAAHHRSTlMA5P7n0UgvBv39/fv7+/n39vbx7ufnyHhQNTUUYt1IgAAAAlZJREFUSMed02dTGlEUxnFRo+m95yJEEWmBxBJAIygqUUApsaf33r//TM65zw677LPBGe8rXvx/zJlz7w4c74z1OaOBYGNjfX1tbXm5XC5nMplCIZvNzs5OTESjny5cuRUIJLd9Br3m2sfqZ66GTgQAT19AL7n0sVeNk5dCI6MEJKde8ljyTWNz8FpohACPjz5Zf/tu8NwQTTUWML7mybnG5pOt7dMXQ7d9IGh8yecm6wK2tk8NXb7TC3gc9JOll69rtdr7s+eHewGPgz4eef5Yz8d7hgCPI318aiqRSExPpwjw+JKjlzxFIGh8zZ1+fp4A8gPz+7MdH33a/PmCPucH6KMHxvx0xxdgdtAzwDirxqx6xheQTqUkz0X8wNmmAnd8C/TvIxEC2I4Fnm0qQD9OANu0wN2mAvQEsE0L3N4Cm4fDBPAYBKQ92weQnoFzWQo0R6+gip4Btp9WgFy22TwUYPvFu36APq5A+w+t9q78NgLCtieAy1Vw+L29/9S2AOjvE8D2BXjOX4FLkktPAI+hC57td360XoxXBSxqns8TwGNIS7vbbjVz2L4C9A/9AJflPh5sf0kAega4LLwFpwdAP+MHnseD3G5TgeTSE0jQ49FtWqD5TJGBvVwBVe2xfAu0LxYJOI9hTwH+XrezJ8D2CwsE8OXuCHD7/C8B6B/5AfpIs2Oqbp//2hFgewL40rvjo7fjoy/5Qfey0CPH+LYnwL3mGEf7FQL9xpGeAPrAcTRfqRDoM47kFQL/60voGfQbv6LnWy+4fuPBUacX3Bw2R56BY55/TKEY7eJF1WcAAAAASUVORK5CYII=
9=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAkFBMVEUAAAB0jsRyOFlyOFl0jsTs9v7O5/3E4vz7/f7w+P7n8/7i8f2/4Pz////X6/3T6f3S6f3L5fz3+/70+v7f7/3b7f3I5Py73fzp9P622/y3orSvnbOrlaulkaqjkKqgj6qcjaqMaIZ4QmLo9P7U4/WRwvXm6PHY4fBepfCPv+93s+/M0OG4r8WehJ2Rb4t/Tm2GS6jQAAAAA3RSTlMAvr6s6dljAAAAmklEQVQY003L2RaCMAwE0GpMawsUC5RVZXHf///vTM3RY97mZkYIsfjdjFKAJEmWyyzXeDl8IUSN9fU8/wC/cWeiAhiy9ohoulPhGXINbW0i6Lxl0AjrUN/YlAEJotsdtivJUBuYptcTeukYaP7YU713JUOYp1QflGLwfqS5GwcVM1ibSulKFccVA9VlqUJuGKgeclU1DPB/4g24bwrB8/iU6AAAAABJRU5ErkJggg==
10=AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/LpcAFk4cgD85tQA9KY0APzOhADEjnQA1KZ8ANzCrACsmpQA/KKkAPz8+QDcmowA/Nq0ANSinADswqQAAAAAIiIiIiIiIiIiIiIgAAAABu7u7u7u7u7u7u7uIAAAAAYz3d3d3d3d3d3d3CAAAAAGMzMzMz3d3d3d3dwgAAAABjMzPT0z3d3d3d3cIAAAAAazPTMzPT3d3d3d3CAAAAAGOzszMzMz3f3d3dwgAAAABjMzMi09PT3SLf3cIAAAAAa7syItM9PTIi3d3CAAAAAGPbMiIzMzMyIt3dwgAAAABrs7IiMzM9MiL93cIAAAAAazvSIjMzPTIi3d3CAAAAAGuzsiI70z0yIjPdwgAAAABruzIiIiszMiIz3cIAAAAAazuyIiIiIiIi893CAAAAAGu7siK9siIiIjPdwgAAAABrO7Iis7MzMiI93cIAAAAAa7syIrO70zIi0z3CAAAAAGu7siLbOzsyItPfwgAAAABru7Iiuzuz0iIzPcIAAAAAa7uyIrs7O7IiM93CAAAAAGu7siu9u7OyIzs9wgAAAABruzu7u7s7vbPTPcIAAAAAa7u7u7u7s7Ozsz3CAAAAAGu7u7s7u72zs6qqwgAAAABru7u7u7u7uz9ERGIAAAAAa7uzu7u7s7O/F3QgAAAAAGu7u7u7u7s7v1HCAAAAAABru7u7u7O7uz3WIAAAAAAAa7u7u7u7u7u9cgAAAAAAAGZmZmZmZmZmZmAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAA/4AAAf+AAAP/gAAH/4AAD//////w==

[206]
4=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABCFBMVEUAAABkpGQxeTEGVQY6gDo3fjf///+h2KFdnl1SlVJLj0shbCGo3qiNx41vrW9Zm1k9gz2Sy5J+un5Okk5IjEhEikQtdS0ocigfZx8aZhoTYBPu9u616bWa0ZqEwIR8t3x3tHd0snRop2hlpWVXmVdUl1RBh0E2fDYweDAucC4mcSYmbSYcYRwKWQr6+/rs8uzl8eXU5NS87ryv46+u4q6oz6ib05uVzZWIwoiCvYJyrnJrqmtio2JhoWFhlWFgoWBHgkc7ezs6gjoWYxYOXA71+fXq9ern7ufh6uHM3czA4sC23rasx6ygy6CcwpyYuJiQv5CPwY+Ps4+GroZ7sXttmW1oomgaXxqcRpW0AAAABnRSTlMAw8PDw6uW0QKGAAAA6UlEQVQY003L11bCQBSF4SPoSWbSeyMQSUghiYCKBaRj7/3938RZXPnffXutDbA345WkRwxqWqm6z6wdt05E7uxcurjsHJIGLP5b7ubAt05F7vEGcfjMPLNBYX7AXS/xQnEgEbkwwPlqNccBVUgJhAu1IT69daZKURAqgBFq0viIHa7HPKGWC1ST2vrkY8S2e9NSPTCZo0lMs+UAl2q2Aautv2PwxSc/ARZ57kOqR/IId73+2o4PaiRP4887xNvvynWELazl7hXfU0u3qsq+4NVwYDAbZrrObGa/CdCwnb4guN7G39Z1E/4A4rMejOEMY5sAAAAASUVORK5CYII=

[207]
5=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABDlBMVEUAAACYCwu+QUF1AACbEBD///+7PT2sJyepJCSUBQWFAACCAADebGy1NDSKAAB7AADZZmbTXl64NzexLCyuKSmkHR2hFhaeFBSRAAB+AAD4w8PkqKj+mZnNj4/icnLXYmLSW1vPWFjJU1PHTEyyMDCmICCjGRmaDw+IAgJ4AADwt7fqr6//oKD3kZHyiorFhITtgYHqfX3oe3vkd3fNVlbLUFDBRESiHx+aFhaOAADz5uby19flxsbjxMTzvb3hsrL5ra3ho6PyoqL4kpLej4/0iorHhobuhITehIS8b2/PbGy3V1eoSEjCR0e9RkaxRUW0PT2XPDy0OTmkJCSWIiKcGxuNEBCMDAyJCQl3AACgvdOZAAAABXRSTlMAw8PDq5Spka0AAADqSURBVBjTFchVYsIAFAXRR+mNC/EEixteitbd3bv/jRDm7wzRDqPrcmKwXGrZTq1yd9C+vL7d25cafhAZNWIG7bPmxdZ3V/N4wZPeHjbR0qSGBnwsGJ7k4aiJzktDC4FfRnYpGU1O0GG0cA78ycaaksm0h85bGD0AhcEqZE67PRydHqJKYFOB2K7Ux7YDQLRskTjJ7+P4/umnqIadi5T6QQs3q0+OBbyc9ygLZi2Ml7LJASrvqmTP4nOMv00uA0pXUcmJn6PHrxWXOa/v/4pQ0i7L6ObSspycVwTBqxPVeHetFIIoeqpa1mkDFc8b4jADegUAAAAASUVORK5CYII=

[208]
6=iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABCFBMVEUAAACYCwu+QUF1AACbEBD///98AACwLCysJyeKAACGAADpfHzebGzAQ0O4ODizMTGpJSWhFxftgoLicnLNVVXITU27PT22NTWnICCfFRWQAACOAACDAACAAAD46uryiorYY2PTXFzRWlrFSkqkHR2VFxeVBgaSBAR5AAD8+fn06en23t7qzMz/oKD+mJj4kpL3kZH0ioruhITkd3fZZ2fVYGDLUVHDR0eqRka9PDyaJyeaDw+LCAj68/P55OTx5OTu3NzkwsLxra3voKDSnZ3+mprbmZnhi4vFiorch4fRh4fCenrSdnbWdHS/bm7NX1/HXl6rW1vEVFS5SEi3OjqzNjaJFxeTCgr4h/q9AAAABXRSTlMAw8PDq5Spka0AAADoSURBVBjTTc3VcsMwEAXQddO1ZJRktmM7ZGqSMgTLzNz+/59U0750n/bcuTMXYCWwQ8YI5VEhYkXaXd/Y3N4xds29/b5HFAj++WBgVWBfbnWc8yPE0a10UEMofYa/d2cFYQKs4xg5TstyikMekjYQx3BHePHwPPhcLgnVgBqueb2GiIdXH4RGOlDX7Pbe7scyO+WFSIFLe77Fy/kQ52KRQtTtPWL+YrP3HL++qwxE3/PHf7M3ap2oEHv+xHo6QTx+VdNEk4E/mdlE6Jmqam1Nb2CVzmxGoyJeVNJZC0CpE/npqaw0TQt+AISNHCudffknAAAAAElFTkSuQmCC
  
 
 
 
The function: Dependencies included.
 

Code: Select all

AhkSetIcons(IniFile, Exe) {              ; v0.1 by SKAN on D47R/D47R @ tiny.cc/ahkseticons
Local
    SrcFile := AhkSetIcons_PathX(Exe).Full
    TrgFile := A_WorkingDir . "\" . AhkSetIcons_PathX(SrcFile).File
    IniFile := AhkSetIcons_PathX(IniFile).Full

    FileCopy, %SrcFile%, %TrgFile%, 1 ; Overwrite
    If ( ErrorLevel )
         Return 0

    AhkSetIcons_DeleteAllIcons(TrgFile)
    hUpdate := DllCall("Kernel32.dll\BeginUpdateResource", "Str",TrgFile, "Int",False)
    
    IniRead, IconGroups, %IniFile%
    Loop, Parse, IconGroups, `n, `r
    {
       If ! ( RT := Format("{:d}", A_LoopField) )
              Continue

       IniRead, Icons, %IniFile%, %RT%

       Count := 0
       If ( StrLen(Icons) )
       {
           StrReplace(Icons, "`n", "`n", Count)
           Count +=1
       }

       If ! ( Count )
              Continue

       nSize := 6 + (14 * Count)
       VarSetCapacity(GROUPICON, nSize, 0)
       NumPut(65536, GROUPICON, 0, "Int")
       NumPut(Count, GROUPICON, 4, "Short")
       pPtr := &GROUPICON + 6

       Count := 0
       Loop, Parse, Icons, `n, `r
       {
             Value    := StrSplit(A_LoopField, "=", A_Space, 2)
             Base64   := Value.2

             Value.1  := Format("{:d}", Value.1)
             If ! ( Value.1 )
                    Continue

             nBytes   := AhkSetIcons_IconData(Base64, ICONDATA)
             If ! ( nBytes )
                    Continue

             DllCall("Kernel32.dll\RtlMoveMemory", "Ptr",pPtr, "Ptr",&ICONDATA+6, "Ptr",14)
             pPtr += 14
             Count += 1
             NumPut(Value.1, pPtr-2, "UShort")
             DllCall("Kernel32.dll\UpdateResource", "Ptr",hUpdate, "Int",3, "Int",Value.1, "Short",1033, "Ptr",&ICONDATA+22, "Int",nBytes-22)
       }

       nSize := 6 + (14 * Count)
       DllCall("Kernel32.dll\UpdateResource", "Ptr",hUpdate, "Int",14, "Int",RT, "Short",1033, "Ptr",&GROUPICON, "Int",nSize)
    }

    DllCall("Kernel32.dll\EndUpdateResource", "Ptr",hUpdate, "Int",False)
}


AhkSetIcons_IconData(Base64, ByRef ICONDATA) {
Local
    VarSetCapacity(Bin,128)
    VarSetCapacity(Bin,0)
    VarSetCapacity(Bin, nBytes := Floor((B64Len := StrLen(Base64 := RTrim(Base64,"=")))*3/4))
    If ! DllCall("Crypt32.dll\CryptStringToBinary"
               , "Str",Base64, "Int",B64Len, "Int",1, "Ptr",&Bin
               , "UIntP",nBytes, "Int",0, "Int",0)
         Return 0

    Hdr := NumGet(Bin, 0, "UInt64")
    If ( Hdr & 0xFFFFFFFFFFFF = 4295032832 )
    {
        VarSetCapacity(ICONDATA, nBytes, 0)
        DllCall("Kernel32.dll\RtlMoveMemory", "Ptr",&ICONDATA, "Ptr",&Bin, "Ptr",nBytes)
        Return nBytes
    }

    If ( Hdr & 0xFFFFFFFF != 0x474E5089 )
         Return 0


    W := NumGet(Bin,16,"UInt")
    W := ( (W & 255)<<24 | (W>>8 & 255)<<16 | (W>>16 & 255)<<8 | W>>24 )
    H := NumGet(Bin,20,"UInt")
    H := ( (H & 255)<<24 | (H>>8 & 255)<<16 | (H>>16 & 255)<<8 | H>>24 )

    ICOFILE := A_WorkingDir . "\ico.tmp"
    hicon := DllCall("User32.dll\CreateIconFromResourceEx"
                   , "Ptr",&Bin, "Int",nBytes, "Int",True
                   , "Int",0x30000, "Int",0, "Int",0, "Int",0, "Ptr")

    If ( hicon = 0 )
         Return  0

    AhkSetIcons_SaveHICONtoFile(hicon, ICOFILE)
    DllCall("User32.dll\DestroyIcon", "Ptr",hicon)

    If ( W>255 && H>255 )
    {
         VarSetCapacity(ICONDATA, nBytes+22, 0)
         FileRead, ICONDATA, *c *m100 %ICOFILE%
         NumPut(nBytes, ICONDATA, 14, "UInt")
         DllCall("Kernel32.dll\RtlMoveMemory", "Ptr",&ICONDATA+22, "Ptr",&BIN, "Ptr",nBytes)
         Return nBytes+22
    }

    FileGetSize, nBytes, %ICOFILE%
    FileRead, ICONDATA, *c %ICOFILE%
    FileDelete, %ICOFILE%
    Return nBytes
}

AhkSetIcons_DeleteAllIcons(P*) {
Local 
Static Data:=""
    If ! ( IsObject(P) )
    {
        RT := NumGet(P+A_PtrSize, "Ptr") + 0
        RN := NumGet(P+(A_PtrSize*2), "Ptr")
        If ( RN <= 0xFFFF )
             Data .= RT . A_Tab . RN . "`n"
        Return 1
    }

    hModule := DllCall("Kernel32.dll\LoadLibraryEx", "Str",P.1, "Ptr",0, "Int",0x02, "Ptr")
    hGlobal := RegisterCallback( A_ThisFunc, "F", 4)
    DllCall("Kernel32.dll\EnumResourceNamesEx", "Ptr",hModule, "Int",14, "Ptr",hGlobal, "Int",0, "Int",0, "Short",1033)
    DllCall("Kernel32.dll\EnumResourceNamesEx", "Ptr",hModule, "Int", 3, "Ptr",hGlobal, "Int",0, "Int",0, "Short",1033)
    DllCall("Kernel32.dll\GlobalFree", "Ptr",hGlobal)
    DllCall("Kernel32.dll\FreeLibrary", "Ptr",hModule)

    List := RTrim(Data, "`n"), Data := ""
    hUpdate := DllCall("Kernel32.dll\BeginUpdateResource", "Str",P.1, "Int",False)
    Loop, Parse, List, `n
       F := StrSplit(A_LoopField, A_Tab)
    ,  DllCall("Kernel32.dll\UpdateResource", "Ptr",hUpdate, "Int",F.1, "Int",F.2, "Short",1033, "Ptr",0, "Int",0)
    DllCall("Kernel32.dll\EndUpdateResource", "Ptr",hUpdate, "Int",False)

Return List
}


AhkSetIcons_PathX(S, P*) {                                ; PathX v0.67 by SKAN on D34U/D35I @ tiny.cc/pathx
Local K,V,N,  U:={},   T:=Format(A_IsUnicode ? "{1:260}" : "{1:520}", ""),   dr:=di:=fn:=ex := T

  For K,V in P
      N := StrSplit(V,":",,2),  K := SubStr(N[1],1,2),  U[K] := N[2]

  DllCall("GetFullPathName", "Str",Trim(S,Chr(34)), "UInt",260, "Str",T, "Ptr",0)
  DllCall("msvcrt\_wsplitpath", "WStr",T, "WStr",dr, "WStr",di, "WStr",fn, "WStr",ex)

Return { "Drive"  : dr := u.dr ? u.dr : dr
       , "Dir"    : di := (u.dp) (u.di="" ? di : u.di) (u.ds)
       , "Fname"  : fn := (u.fp) (u.fn="" ? fn : u.fn) (u.fs)
       , "Ext"    : ex := u._e!="" ? (ex ? ex : u._e) : u.ex="" ? ex : u.ex
       , "Folder" : (dr) (di)
       , "File"   : (fn) (ex)
       , "Full"   : (u.pp) (dr) (di) (fn) (ex) (u.ps) }
}

AhkSetIcons_SaveHICONtoFile(hicon, iconFile) {                      ; By SKAN | 06-Sep-2017 | goo.gl/8NqmgJ
Static CI_FLAGS:=0x2008                                             ; LR_CREATEDIBSECTION | LR_COPYDELETEORG
Local  File, Var, mDC, sizeofRGBQUAD, ICONINFO:=[], BITMAP:=[], BITMAPINFOHEADER:=[]

  File := FileOpen( iconFile,"rw" )
  If ( ! IsObject(File) )
       Return 0
  Else File.Length := 0                                             ; Delete (any existing) file contents

  VarSetCapacity(Var,32,0)                                          ; ICONINFO Structure
  If ! DllCall( "GetIconInfo", "Ptr",hicon, "Ptr",&Var )
    Return ( File.Close() >> 64 )

  ICONINFO.fIcon      := NumGet(Var, 0,"UInt")
  ICONINFO.xHotspot   := NumGet(Var, 4,"UInt")
  ICONINFO.yHotspot   := NumGet(Var, 8,"UInt")
  ICONINFO.hbmMask    := NumGet(Var, A_PtrSize=8 ? 16:12, "UPtr")
  ICONINFO.hbmMask    := DllCall( "CopyImage"                       ; Create a DIBSECTION for hbmMask
                                , "Ptr",ICONINFO.hbmMask
                                , "UInt",0                          ; IMAGE_BITMAP
                                , "Int",0, "Int",0, "UInt",CI_FLAGS, "Ptr" )
  ICONINFO.hbmColor   := NumGet(Var, A_PtrSize=8 ? 24:16, "UPtr")
  ICONINFO.hbmColor   := DllCall( "CopyImage"                       ; Create a DIBSECTION for hbmColor
                                , "Ptr",ICONINFO.hbmColor
                                , "UInt",0                          ; IMAGE_BITMAP
                                , "Int",0, "Int",0, "UInt",CI_FLAGS, "Ptr" )

  VarSetCapacity(Var,A_PtrSize=8 ? 104:84,0)                        ; DIBSECTION of hbmColor
  DllCall( "GetObject", "Ptr",ICONINFO.hbmColor, "Int",A_PtrSize=8 ? 104:84, "Ptr",&Var )

  BITMAP.bmType       := NumGet(Var, 0,"UInt")
  BITMAP.bmWidth      := NumGet(Var, 4,"UInt")
  BITMAP.bmHeight     := NumGet(Var, 8,"UInt")
  BITMAP.bmWidthBytes := NumGet(Var,12,"UInt")
  BITMAP.bmPlanes     := NumGet(Var,16,"UShort")
  BITMAP.bmBitsPixel  := NumGet(Var,18,"UShort")
  BITMAP.bmBits       := NumGet(Var,A_PtrSize=8 ? 24:20,"Ptr")

  BITMAPINFOHEADER.biClrUsed := NumGet(Var,32+(A_PtrSize=8 ? 32:24),"UInt")

  File.WriteUINT(0x00010000)                                        ; ICONDIR.idReserved and ICONDIR.idType
  File.WriteUSHORT(1)                                               ; ICONDIR.idCount (No. of images)
  File.WriteUCHAR(BITMAP.bmWidth  < 256 ? BITMAP.bmWidth  : 0)      ; ICONDIRENTRY.bWidth
  File.WriteUCHAR(BITMAP.bmHeight < 256 ? BITMAP.bmHeight : 0)      ; ICONDIRENTRY.bHeight
  File.WriteUCHAR(BITMAPINFOHEADER.biClrUsed < 256                  ; ICONDIRENTRY.bColorCount
                ? BITMAPINFOHEADER.biClrUsed : 0)
  File.WriteUCHAR(0)                                                ; ICONDIRENTRY.bReserved
  File.WriteUShort(BITMAP.bmPlanes)                                 ; ICONDIRENTRY.wPlanes
  File.WriteUSHORT(BITMAP.bmBitsPixel)                              ; ICONDIRENTRY.wBitCount
  File.WriteUINT(0)                                                 ; ICONDIRENTRY.dwBytesInRes (filled later)
  File.WriteUINT(22)                                                ; ICONDIRENTRY.dwImageOffset


  NumPut( BITMAP.bmHeight*2, Var, 8+(A_PtrSize=8 ? 32:24),"UInt")   ; BITMAPINFOHEADER.biHeight should be
                                                                    ; modified to double the BITMAP.bmHeight

  File.RawWrite( &Var + (A_PtrSize=8 ? 32:24), 40)                  ; Writing BITMAPINFOHEADER (40  bytes)

  If ( BITMAP.bmBitsPixel <= 8 )                                    ; Bitmap uses a Color table!
  {
      mDC := DllCall( "CreateCompatibleDC", "Ptr",0, "Ptr" )
      DllCall( "SaveDC", "Ptr",mDC )
      DllCall( "SelectObject", "Ptr",mDC, "Ptr",ICONINFO.hbmColor )
      sizeofRGBQUAD := ( BITMAPINFOHEADER.biClrUsed * 4 )           ; Colors used x UINT (0x00bbggrr)
      VarSetCapacity( Var,sizeofRGBQUAD,0 )                         ; Array of RGBQUAD structures
      DllCall( "GetDIBColorTable", "Ptr",mDC, "UInt",0, "UInt",BITMAPINFOHEADER.biClrUsed, "Ptr",&Var )
      DllCall( "RestoreDC", "Ptr",mDC, "Int",-1 )
      DllCall( "DeleteDC", "Ptr",mDC )
      File.RawWrite(Var, sizeofRGBQUAD)                             ; Writing Color table
  }

  File.RawWrite(BITMAP.bmBits, BITMAP.bmWidthBytes*BITMAP.bmHeight) ; Writing BITMAP bits (hbmColor)

  VarSetCapacity(Var,A_PtrSize=8 ? 104:84,0)                        ; DIBSECTION of hbmMask
  DllCall( "GetObject", "Ptr",ICONINFO.hbmMask, "Int",A_PtrSize=8 ? 104:84, "Ptr",&Var )

  BITMAP := []
  BITMAP.bmHeight     := NumGet(Var, 8,"UInt")
  BITMAP.bmWidthBytes := NumGet(Var,12,"UInt")
  BITMAP.bmBits       := NumGet(Var,A_PtrSize=8 ? 24:20,"Ptr")

  File.RawWrite(BITMAP.bmBits, BITMAP.bmWidthBytes*BITMAP.bmHeight) ; Writing BITMAP bits (hbmMask)
  File.Seek(14,0)                                                   ; Seeking ICONDIRENTRY.dwBytesInRes
  File.WriteUINT(File.Length()-22)                                  ; Updating ICONDIRENTRY.dwBytesInRes
  File.Close()
  DllCall( "DeleteObject", "Ptr",ICONINFO.hbmMask  )
  DllCall( "DeleteObject", "Ptr",ICONINFO.hbmColor )
Return True
}

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 28 Jul 2021, 03:22
by hasantr
Thanks for the effort. Can you explain a little more?

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 28 Jul 2021, 04:58
by SKAN
Hi @hasantr,

I'm planning/preparing to setup .ah2 file extension for AutoHotkey V2.
My editor PSPad supports both .ahk and .ah2 extensions (Thanks to @toralf).
To avoid confusion, I need to replace the default icon set in V2 executables.
It will be cumbersome to do it every time a new version of of AHK V2 is released and hence I have opted automation.

Current Versions of AutoHotkey exe's have 10 icons in 5 icon groups and can be inspected with a tool like ResHacker
 
image.png
image.png (43.38 KiB) Viewed 2327 times
 
 

For example, if you need to replace the Icon 2 from icon group 159 which is 48x48 pixels,
You first design one and save it as .png, something like this:
 
image.png
image.png (3.05 KiB) Viewed 2327 times
 
You may edit the above icon @ imagefu.com
 
Make the PNG file smaller by using https://tinypng.com/
Convert the PNG file to base64 text (maybe) using https://base64.guru/converter/encode/file
Copy/paste the base64 text into DefaultIconSet.ini in section 159 as value of key 2

Use this function to to apply the edited DefaultIconSet.ini to any Autohotkey.exe.
You may do icons one at a time, the reason why I have provided DefaultIconSet.ini.
Leave Icon #10 as is. It is 4 bit and cannot be done in png format.

:thumbup:

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 28 Jul 2021, 06:36
by hasantr
This is a great description. Thank you so much. :)

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 28 Jul 2021, 08:47
by SKAN
I forgot.
If you want to add higher/other resolution versions, just add them under appropriate group using a number greater than 10.
:arrow: Ordinals 1 to 10 are already in use and I suggest not to mess it up.

For example to add a 256x256 version to Main icon (ICON GROUP 159), add it as 11th icon:

Code: Select all

[159]
1=iVBOR...
2=iVBOR...
3=iVBOR...
11=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

 
256x256, 6949 bytes:
Image

Note: Any PNG larger than 255x255 will be added as PNG, while smaller PNG's will be converted to ICO format before adding it to PE file.

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 31 Jul 2021, 22:20
by SKAN
Dugly iconset has been updated.

You can find a couple of IconSets here: New Icons for V2

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 31 Jul 2021, 23:15
by joedf
This is pretty neat SKAN! :+1:

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 01 Aug 2021, 08:29
by SKAN
joedf wrote:
31 Jul 2021, 23:15
This is pretty neat SKAN! :+1:
:thumbup: :)

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 19 Aug 2022, 15:40
by Ben the Coder
How would I download and use them?

Re: AhkSetIcons() : Icon updater for AutoHotkey interpreters.

Posted: 06 Sep 2022, 12:14
by BuggyB
Hi SKAN ,
SKAN wrote:
28 Jul 2021, 04:58
I'm planning/preparing to setup .ah2 file extension for AutoHotkey V2.
My editor PSPad supports both .ahk and .ah2 extensions (Thanks to @toralf).
I'm a PsPad user and I'm planning to start using AHK V2. Do you know if PsPad supports syntax highlighting for V2? And if yes, how?
Thank you