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
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:
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
}