Compare commits
456 Commits
22000.556.
...
master
| Author | SHA1 | Date |
|---|---|---|
|
|
738479020b | 1 month ago |
|
|
48e1de3379 | 1 month ago |
|
|
df7d604169 | 1 month ago |
|
|
75178ec35c | 1 month ago |
|
|
a80d9dc844 | 1 month ago |
|
|
80414f5a80 | 1 month ago |
|
|
47b44ccc45 | 2 months ago |
|
|
206dcf5d6c | 2 months ago |
|
|
c08b0a6a6b | 2 months ago |
|
|
891edc2cdd | 2 months ago |
|
|
f5eddacd10 | 3 months ago |
|
|
9e9103004f | 3 months ago |
|
|
f4e9faf876 | 3 months ago |
|
|
afd109f340 | 3 months ago |
|
|
6d946bd4de | 3 months ago |
|
|
18dfcd02ce | 3 months ago |
|
|
4434d10445 | 3 months ago |
|
|
465117e3d7 | 3 months ago |
|
|
f873888a3b | 3 months ago |
|
|
79f8dd3265 | 3 months ago |
|
|
201a7e5bed | 3 months ago |
|
|
caa2452872 | 3 months ago |
|
|
f1127191e6 | 3 months ago |
|
|
6959c699d9 | 3 months ago |
|
|
9abef1f986 | 3 months ago |
|
|
aa1a240d4a | 3 months ago |
|
|
1b977ad3ad | 3 months ago |
|
|
84aeeaca76 | 3 months ago |
|
|
ad2fa72c02 | 3 months ago |
|
|
72c6983947 | 3 months ago |
|
|
1bbe207c83 | 3 months ago |
|
|
ab99f26687 | 3 months ago |
|
|
ff30457ff5 | 3 months ago |
|
|
0beace9080 | 4 months ago |
|
|
fa19402bff | 4 months ago |
|
|
66818fed7d | 4 months ago |
|
|
2633903d19 | 4 months ago |
|
|
ab8f507ffe | 4 months ago |
|
|
583fa534d7 | 4 months ago |
|
|
9106226861 | 4 months ago |
|
|
c3c83ffab5 | 4 months ago |
|
|
14807a50a8 | 7 months ago |
|
|
3a93b76032 | 7 months ago |
|
|
ab2a4f3575 | 7 months ago |
|
|
3f1176600e | 7 months ago |
|
|
44c670bfe8 | 7 months ago |
|
|
97f8d519fd | 7 months ago |
|
|
207f669a62 | 7 months ago |
|
|
b72a8052c0 | 7 months ago |
|
|
1b20cbd342 | 7 months ago |
|
|
858b634067 | 8 months ago |
|
|
65d8b53697 | 8 months ago |
|
|
115b462f96 | 9 months ago |
|
|
0e55f304c4 | 9 months ago |
|
|
8b4d8db628 | 10 months ago |
|
|
80b5d73d22 | 10 months ago |
|
|
1edb989406 | 10 months ago |
|
|
c64a17e78f | 10 months ago |
|
|
48f3873e1c | 11 months ago |
|
|
1f53188b55 | 12 months ago |
|
|
6e4c69cc61 | 12 months ago |
|
|
123ea8b12c | 12 months ago |
|
|
4ef3667bd4 | 1 year ago |
|
|
aec8c7036f | 1 year ago |
|
|
9f71a5c885 | 1 year ago |
|
|
1be66581c1 | 1 year ago |
|
|
33c4611b4c | 1 year ago |
|
|
f80478b2f4 | 1 year ago |
|
|
6add2999ab | 1 year ago |
|
|
5451e1e28a | 1 year ago |
|
|
b93337a98b | 1 year ago |
|
|
4978024ea4 | 1 year ago |
|
|
ac10697103 | 1 year ago |
|
|
fc25c25df9 | 1 year ago |
|
|
cc9b6b3fd0 | 1 year ago |
|
|
78e6248c60 | 1 year ago |
|
|
107219d27a | 1 year ago |
|
|
194b881bff | 1 year ago |
|
|
90c52c430c | 1 year ago |
|
|
2a6fb1507d | 1 year ago |
|
|
2bd624096a | 1 year ago |
|
|
eb1f1ec95b | 1 year ago |
|
|
41877b694b | 1 year ago |
|
|
92fce8c902 | 1 year ago |
|
|
98118101e6 | 1 year ago |
|
|
ac14c75e49 | 1 year ago |
|
|
5fb1241dff | 1 year ago |
|
|
5094108275 | 1 year ago |
|
|
2188f0ac87 | 1 year ago |
|
|
77c6a8c23e | 1 year ago |
|
|
beeca29d45 | 1 year ago |
|
|
c89705e5e2 | 1 year ago |
|
|
3885b97bdb | 1 year ago |
|
|
2ea3894bcf | 1 year ago |
|
|
0f38628355 | 1 year ago |
|
|
060066cd53 | 1 year ago |
|
|
351a0207a4 | 1 year ago |
|
|
a8bd290977 | 1 year ago |
|
|
3c50ea3c68 | 1 year ago |
|
|
c127c0573c | 1 year ago |
|
|
ab5862b863 | 1 year ago |
|
|
ab389ed6ef | 1 year ago |
|
|
b4731146a2 | 1 year ago |
|
|
d9595fccc6 | 1 year ago |
|
|
7e0f7ebc22 | 1 year ago |
|
|
755f101285 | 1 year ago |
|
|
e60c5ff596 | 1 year ago |
|
|
bfca879e68 | 1 year ago |
|
|
39609e4b54 | 1 year ago |
|
|
23b44a2f23 | 1 year ago |
|
|
ea5881f177 | 1 year ago |
|
|
de2532ddcd | 1 year ago |
|
|
c8434659cc | 1 year ago |
|
|
7444c7cb52 | 1 year ago |
|
|
c0201ff442 | 1 year ago |
|
|
126c024628 | 1 year ago |
|
|
db54ce9d4b | 1 year ago |
|
|
04fd2b7647 | 1 year ago |
|
|
b253625cdf | 1 year ago |
|
|
30579b0238 | 1 year ago |
|
|
1fcd7d7322 | 1 year ago |
|
|
19177e4f72 | 1 year ago |
|
|
214ad2bd18 | 1 year ago |
|
|
48c2a7551e | 1 year ago |
|
|
a9b089a86a | 1 year ago |
|
|
e771264a28 | 1 year ago |
|
|
c69eb5f11a | 1 year ago |
|
|
8c16a9a0d9 | 1 year ago |
|
|
5d0d218d38 | 1 year ago |
|
|
2b9c747212 | 1 year ago |
|
|
4799b4bf25 | 1 year ago |
|
|
78788ec461 | 1 year ago |
|
|
57f63ad56f | 1 year ago |
|
|
c9884b2ba3 | 1 year ago |
|
|
b76c0e420f | 1 year ago |
|
|
2e4e4f5f2b | 1 year ago |
|
|
992b3a60cd | 1 year ago |
|
|
016214a381 | 1 year ago |
|
|
51f06243e6 | 1 year ago |
|
|
0b86e55059 | 1 year ago |
|
|
146070da76 | 1 year ago |
|
|
9844324b5e | 1 year ago |
|
|
62dcb98cb2 | 1 year ago |
|
|
61c984fec1 | 1 year ago |
|
|
6f6666b527 | 2 years ago |
|
|
2112a18876 | 2 years ago |
|
|
57b44d2355 | 2 years ago |
|
|
3a9fe99c95 | 2 years ago |
|
|
4794713603 | 2 years ago |
|
|
80592f666d | 2 years ago |
|
|
c41b93b6b4 | 2 years ago |
|
|
5ed503e451 | 2 years ago |
|
|
d398195298 | 2 years ago |
|
|
6d22947e36 | 2 years ago |
|
|
c245b8f0b3 | 2 years ago |
|
|
d11445afda | 2 years ago |
|
|
097666676a | 2 years ago |
|
|
bae9fd612d | 2 years ago |
|
|
31f1b6db0e | 2 years ago |
|
|
e59c34c06e | 2 years ago |
|
|
232fe6b148 | 2 years ago |
|
|
e57a6b0aeb | 2 years ago |
|
|
24e019d484 | 2 years ago |
|
|
47cc16552b | 2 years ago |
|
|
45bd735856 | 2 years ago |
|
|
c286ab5610 | 2 years ago |
|
|
5e25663c87 | 2 years ago |
|
|
699ef06734 | 2 years ago |
|
|
52cd4f0072 | 2 years ago |
|
|
913b2d03db | 2 years ago |
|
|
9e9c016733 | 2 years ago |
|
|
bdc0212d92 | 2 years ago |
|
|
ecf3ea9d54 | 2 years ago |
|
|
623eceedd0 | 2 years ago |
|
|
0589a251c1 | 2 years ago |
|
|
95ea9e740b | 2 years ago |
|
|
5e7bad22cd | 2 years ago |
|
|
5c35f5862f | 2 years ago |
|
|
fe7f8005fb | 2 years ago |
|
|
fc61884c83 | 2 years ago |
|
|
0791bd7ccf | 2 years ago |
|
|
8f84a965a6 | 2 years ago |
|
|
a0885c6494 | 2 years ago |
|
|
91aaa82767 | 2 years ago |
|
|
fdc357b23f | 2 years ago |
|
|
cb3f9670d9 | 2 years ago |
|
|
1517de005e | 2 years ago |
|
|
9f9acfc74e | 2 years ago |
|
|
08dec82aec | 2 years ago |
|
|
dfe340d2f8 | 2 years ago |
|
|
438eb1d443 | 2 years ago |
|
|
fb28688bb8 | 2 years ago |
|
|
610ba7f919 | 2 years ago |
|
|
399324131d | 2 years ago |
|
|
22d9e3c6ac | 2 years ago |
|
|
35e31b91e2 | 2 years ago |
|
|
13dc90cfcd | 2 years ago |
|
|
90666d5723 | 2 years ago |
|
|
36ebe5a7e5 | 2 years ago |
|
|
88212b32c3 | 2 years ago |
|
|
3a882c7745 | 2 years ago |
|
|
982fe56eb3 | 2 years ago |
|
|
d4f36622c5 | 2 years ago |
|
|
30eb7b2bb0 | 2 years ago |
|
|
3c8809eaa8 | 2 years ago |
|
|
0c5021b376 | 2 years ago |
|
|
0157ecc330 | 2 years ago |
|
|
1f2e2c4821 | 2 years ago |
|
|
79b0f68aff | 2 years ago |
|
|
97fd4831a8 | 2 years ago |
|
|
e0b97e2be6 | 2 years ago |
|
|
296c6a0fed | 2 years ago |
|
|
61d9715439 | 2 years ago |
|
|
8c1fc0e499 | 2 years ago |
|
|
026f81695f | 2 years ago |
|
|
1939de5e97 | 2 years ago |
|
|
6779365927 | 2 years ago |
|
|
9b68cc0635 | 2 years ago |
|
|
702b2a76d9 | 2 years ago |
|
|
4bea5f688d | 2 years ago |
|
|
ce9f973167 | 2 years ago |
|
|
9444eee9be | 2 years ago |
|
|
ee06d36c57 | 2 years ago |
|
|
3a1b8b8296 | 2 years ago |
|
|
bff76da2bf | 2 years ago |
|
|
3c0b4a9b72 | 2 years ago |
|
|
ec68783677 | 2 years ago |
|
|
a7a3d2727c | 2 years ago |
|
|
72f1458afe | 2 years ago |
|
|
0ad150a325 | 2 years ago |
|
|
7c3be29282 | 2 years ago |
|
|
3cb3ace48a | 2 years ago |
|
|
2450a5d284 | 2 years ago |
|
|
9e7c1e68b7 | 2 years ago |
|
|
7d0cdde356 | 2 years ago |
|
|
d6cdb5d8ed | 2 years ago |
|
|
3b902d0ae7 | 2 years ago |
|
|
c5bb636f1e | 2 years ago |
|
|
a0f9c0c7dc | 2 years ago |
|
|
f62c53253c | 2 years ago |
|
|
2dc1340207 | 2 years ago |
|
|
b45f79f25d | 2 years ago |
|
|
163b45228a | 2 years ago |
|
|
fc17455962 | 2 years ago |
|
|
b5b0b21443 | 2 years ago |
|
|
a74f27b42d | 2 years ago |
|
|
639d7aa5f1 | 2 years ago |
|
|
f6f6d899f2 | 2 years ago |
|
|
ac268b1acb | 2 years ago |
|
|
a7c87ce37d | 2 years ago |
|
|
845d2b55c9 | 2 years ago |
|
|
bdc06de667 | 2 years ago |
|
|
af3bff4b9f | 2 years ago |
|
|
a77aff4b29 | 2 years ago |
|
|
4999f1d520 | 2 years ago |
|
|
5321766d4e | 2 years ago |
|
|
2cc87aba39 | 2 years ago |
|
|
11160c804d | 2 years ago |
|
|
655e62c364 | 2 years ago |
|
|
8fc53a1285 | 2 years ago |
|
|
67b7a27044 | 2 years ago |
|
|
f027a36837 | 2 years ago |
|
|
a57471feb2 | 2 years ago |
|
|
7e2f76840a | 2 years ago |
|
|
80f11ae4f9 | 2 years ago |
|
|
acc0131e77 | 2 years ago |
|
|
8412bd64d9 | 2 years ago |
|
|
b52bd790ed | 2 years ago |
|
|
dca0b3ae44 | 2 years ago |
|
|
b157abad62 | 2 years ago |
|
|
4ee742f116 | 2 years ago |
|
|
bdd71efeb9 | 2 years ago |
|
|
9f04110d72 | 2 years ago |
|
|
0b57e78d18 | 2 years ago |
|
|
3b38b94df2 | 2 years ago |
|
|
21c288c3c0 | 2 years ago |
|
|
29fda7935d | 2 years ago |
|
|
dca4057654 | 2 years ago |
|
|
15c07a0530 | 2 years ago |
|
|
a4f5bd0ceb | 2 years ago |
|
|
89b2f3f8cf | 2 years ago |
|
|
ce7e170ee1 | 2 years ago |
|
|
001e8d8d1d | 2 years ago |
|
|
fbaad56b22 | 2 years ago |
|
|
085b3dd9f7 | 2 years ago |
|
|
070639360d | 2 years ago |
|
|
148e398b8c | 2 years ago |
|
|
e28940d6a1 | 2 years ago |
|
|
4ece80c8cb | 2 years ago |
|
|
b09482f1b2 | 2 years ago |
|
|
05611dd29c | 2 years ago |
|
|
1977d78ba0 | 2 years ago |
|
|
cdead1b18a | 2 years ago |
|
|
b426d2c46a | 2 years ago |
|
|
6023718b95 | 2 years ago |
|
|
bc3bbc7e5e | 2 years ago |
|
|
40d63f1ef8 | 2 years ago |
|
|
dfee1aee37 | 2 years ago |
|
|
2607f9ab05 | 2 years ago |
|
|
a7b29c5409 | 2 years ago |
|
|
fe78dcaa24 | 2 years ago |
|
|
5f2b545748 | 2 years ago |
|
|
96e93b7331 | 2 years ago |
|
|
1115643206 | 2 years ago |
|
|
b76d62e073 | 2 years ago |
|
|
cd7396e8a0 | 2 years ago |
|
|
82556f08e6 | 2 years ago |
|
|
3be4aabdb5 | 2 years ago |
|
|
e9945d115b | 2 years ago |
|
|
765f6ceb9c | 2 years ago |
|
|
db1a168ebf | 2 years ago |
|
|
5bda71f184 | 2 years ago |
|
|
2e43c679b9 | 2 years ago |
|
|
cfd53c9f2b | 2 years ago |
|
|
275a91f0d9 | 2 years ago |
|
|
53ff541d78 | 2 years ago |
|
|
46c504172c | 2 years ago |
|
|
6fb998eb75 | 3 years ago |
|
|
a95a6881cc | 3 years ago |
|
|
968d969df6 | 3 years ago |
|
|
0344a5e156 | 3 years ago |
|
|
6bc2ea5d2b | 3 years ago |
|
|
8e9403cfb5 | 3 years ago |
|
|
5649a83739 | 3 years ago |
|
|
4e55feefc3 | 3 years ago |
|
|
27a8fd9a6b | 3 years ago |
|
|
0de81fdc68 | 3 years ago |
|
|
a5e5287954 | 3 years ago |
|
|
8b5443d59b | 3 years ago |
|
|
2a1aad2d03 | 3 years ago |
|
|
1738b45866 | 3 years ago |
|
|
d7e5b7d3c9 | 3 years ago |
|
|
0ad140c47f | 3 years ago |
|
|
23a4190018 | 3 years ago |
|
|
4f3dab5a5c | 3 years ago |
|
|
f9d702ebbf | 3 years ago |
|
|
cc0af464c3 | 3 years ago |
|
|
c083327e2f | 3 years ago |
|
|
a8c7fbadaa | 3 years ago |
|
|
ca8ce137d8 | 3 years ago |
|
|
1f4b586f03 | 3 years ago |
|
|
7c4567ac79 | 3 years ago |
|
|
9f9d43e103 | 3 years ago |
|
|
02cb6e900c | 3 years ago |
|
|
451db3c5b6 | 3 years ago |
|
|
53fad19901 | 3 years ago |
|
|
4212e357b7 | 3 years ago |
|
|
d262c41850 | 3 years ago |
|
|
d7a038564b | 3 years ago |
|
|
6190fd2278 | 3 years ago |
|
|
2572a802db | 3 years ago |
|
|
5048a4f76f | 3 years ago |
|
|
a6a88b1b87 | 3 years ago |
|
|
3717aefdaa | 3 years ago |
|
|
5cef3b12c3 | 3 years ago |
|
|
9d64a8c3a5 | 3 years ago |
|
|
f285371de0 | 3 years ago |
|
|
d4cae8106b | 3 years ago |
|
|
3fe00cb138 | 3 years ago |
|
|
e4e3c61ade | 3 years ago |
|
|
0833f513f8 | 3 years ago |
|
|
556aeb5aae | 3 years ago |
|
|
33d1518977 | 3 years ago |
|
|
4cfc2cea4b | 3 years ago |
|
|
50f3a709c0 | 3 years ago |
|
|
fe071230ab | 3 years ago |
|
|
35046cd91a | 3 years ago |
|
|
5de2eb0044 | 3 years ago |
|
|
d55f3c73c9 | 3 years ago |
|
|
8fd7c46db0 | 3 years ago |
|
|
ddeaa2e538 | 3 years ago |
|
|
9fe862ed38 | 3 years ago |
|
|
0c2f287d57 | 3 years ago |
|
|
c96aebee11 | 3 years ago |
|
|
a3cd2a33a9 | 3 years ago |
|
|
0a42d5559f | 3 years ago |
|
|
25660c908a | 3 years ago |
|
|
cb951df606 | 3 years ago |
|
|
7d6b0933e1 | 3 years ago |
|
|
7b7cf6195d | 3 years ago |
|
|
5ee6e3508d | 3 years ago |
|
|
619d9caf21 | 3 years ago |
|
|
aeeb362045 | 3 years ago |
|
|
a90439d096 | 3 years ago |
|
|
92a3da12c0 | 3 years ago |
|
|
258d35c4a0 | 3 years ago |
|
|
de44754c42 | 3 years ago |
|
|
aa922410f4 | 3 years ago |
|
|
6feeba1cd1 | 3 years ago |
|
|
baecdcc191 | 3 years ago |
|
|
ce6fb8d8f9 | 3 years ago |
|
|
2e7a175537 | 3 years ago |
|
|
9239e56172 | 3 years ago |
|
|
092edc10be | 3 years ago |
|
|
9ec44832dd | 3 years ago |
|
|
1c31c1c281 | 3 years ago |
|
|
953a984353 | 3 years ago |
|
|
7c1cb3d560 | 3 years ago |
|
|
da3fece8cd | 3 years ago |
|
|
aeb8e54b58 | 3 years ago |
|
|
f7ffaca146 | 3 years ago |
|
|
81d804ab06 | 3 years ago |
|
|
0ff6b1b365 | 3 years ago |
|
|
1cea91694f | 3 years ago |
|
|
e988bbb08f | 3 years ago |
|
|
d042e57ae4 | 4 years ago |
|
|
932f826ecb | 4 years ago |
|
|
ae403668f6 | 4 years ago |
|
|
961cc11dda | 4 years ago |
|
|
552a2e2040 | 4 years ago |
|
|
c1f9f49f37 | 4 years ago |
|
|
dbdc1b80f8 | 4 years ago |
|
|
5093e7de37 | 4 years ago |
|
|
7deb97e510 | 4 years ago |
|
|
9a7d2de43b | 4 years ago |
|
|
9bf60309c0 | 4 years ago |
|
|
6bd514ba13 | 4 years ago |
|
|
c8bed99c1a | 4 years ago |
|
|
434cdbdd46 | 4 years ago |
|
|
a713d3964e | 4 years ago |
|
|
cf4700af6f | 4 years ago |
|
|
87a2638fb1 | 4 years ago |
|
|
26058f332d | 4 years ago |
|
|
b809e9e8ed | 4 years ago |
|
|
7649805e18 | 4 years ago |
|
|
d0ad8bd1e3 | 4 years ago |
|
|
13e1cc7a1b | 4 years ago |
|
|
9e6d13a9f1 | 4 years ago |
|
|
d9004c1566 | 4 years ago |
|
|
7f76dca159 | 4 years ago |
|
|
7596548350 | 4 years ago |
|
|
d350b0e178 | 4 years ago |
|
|
86739da8f3 | 4 years ago |
|
|
d5f510f572 | 4 years ago |
|
|
cd2d5c66f9 | 4 years ago |
|
|
5e17f5a817 | 4 years ago |
|
|
52e86d739a | 4 years ago |
|
|
d828fa2137 | 4 years ago |
|
|
448f3ef9b7 | 4 years ago |
|
|
78b8c6edd4 | 4 years ago |
|
|
8461f3a33d | 4 years ago |
|
|
a2b28e5345 | 4 years ago |
|
|
5da58c530f | 4 years ago |
|
|
d071ad0db6 | 4 years ago |
|
|
cd96a949e8 | 4 years ago |
|
|
244e4a0936 | 4 years ago |
|
|
3f96325ad6 | 4 years ago |
|
|
21f3377a27 | 4 years ago |
|
|
9c364f470e | 4 years ago |
|
|
9d89ff8a93 | 4 years ago |
|
|
21c2f219d5 | 4 years ago |
|
|
efd52cf951 | 4 years ago |
|
|
28fc1e58c2 | 4 years ago |
|
|
2ee00c2b3a | 4 years ago |
|
|
b1c40fc922 | 4 years ago |
|
|
d3bf5cca5f | 4 years ago |
215 changed files with 36546 additions and 18412 deletions
@ -0,0 +1,120 @@ |
|||||||
|
name: Bug report |
||||||
|
description: Report the issue you have with ExplorerPatcher here |
||||||
|
labels: |
||||||
|
- bug |
||||||
|
body: |
||||||
|
- type: markdown |
||||||
|
attributes: |
||||||
|
value: | |
||||||
|
> [!WARNING] |
||||||
|
> Issues regarding virus detections will be closed automatically. Discuss it in [Issue #3670](https://github.com/valinet/ExplorerPatcher/issues/3670) or [Issue #3228](https://github.com/valinet/ExplorerPatcher/issues/3228) |
||||||
|
|
||||||
|
- type: checkboxes |
||||||
|
attributes: |
||||||
|
label: Before reporting your issue |
||||||
|
description: Please ensure you meet the following criteria before reporting issues |
||||||
|
options: |
||||||
|
- label: I have confirmed that this issue does not happen when ExplorerPatcher is not installed |
||||||
|
- label: I do not have "register as shell extension" enabled |
||||||
|
- label: I have tried my best to check existing issues |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Repro ExplorerPatcher versions |
||||||
|
description: Provide the relevant versions of ExplorerPatcher for reproduction of the issue. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
ExplorerPatcher 67.1 |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Repro Windows Versions |
||||||
|
description: Provide the relevant versions for reproduction of the issue. For example, Windows version, and architecture (e.g. x64 or ARM64). |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
Windows 11 24H2 26100.1150 ARM64 |
||||||
|
Windows 11 24H2 26100.2314 ARM64 |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: 3rd party tweak software installed |
||||||
|
description: A list of 3rd Party software that may modify the shell in someway. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
TranslucentTB |
||||||
|
Windhawk (with disable grouping and vertical taskbar mods) |
||||||
|
OpenShell |
||||||
|
Nilesoft Shell |
||||||
|
Wallpaper Engine |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Describe the bug |
||||||
|
description: A clear and concise description of what the bug is. Please try to isolate the issue to ExplorerPatcher by disabling other customization software. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
1. Install EP 67.1. |
||||||
|
2. Enable Windows 10 (ExplorerPatcher) taskbar and restart Explorer. |
||||||
|
3. Make sure Ethernet (if available) is disconnected, and then disconnect Wi-Fi. |
||||||
|
4. Turn on Personal Hotspot (iPhone) or Mobile Hotspot (Android). |
||||||
|
5. Connect to the Personal Hotspot. |
||||||
|
6. Observe icon changing from No Internet to Wi-Fi signal bars. |
||||||
|
7. Turn off Personal Hotspot. |
||||||
|
8. Observe icon staying in Wi-Fi signal bars state instead of changing to No Internet (globe icon). |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Expected outcome |
||||||
|
description: Describe what you expected to happen when performing the steps above. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
The icon of the Network tray icon changes from Wi-Fi signal bars to globe (no Internet) icon like it was on 11 23H2, 11 22H2, and previous versions. |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Actual outcome |
||||||
|
description: Describe what actually happens after performing the steps above. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
The icon is stuck in the Wi-Fi icon state, giving false impressions that the device is still connected to Wi-Fi. The icon will stay this way until Wi-Fi/Airplane Mode is toggled, or until the device is reconnected to a Wi-Fi router. |
||||||
|
validations: |
||||||
|
required: true |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
attributes: |
||||||
|
label: Additional info |
||||||
|
description: Provide any additional information that may help in diagnosing the issue, such as logs, error messages, or links to related issues. |
||||||
|
placeholder: | |
||||||
|
Example: |
||||||
|
Windows 11 build 25236 removed pnidui.dll, leaving the restoration-from-22621 method being the only option to have this icon. However, there may be interface mismatches or API updates that caused the 22621 (22H2) pnidui.dll to behave this way on 24H2. Patches to pnidui.dll may be needed in order to fix this. |
||||||
|
validations: |
||||||
|
required: false |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
id: crashdumps |
||||||
|
attributes: |
||||||
|
label: Crash Dumps |
||||||
|
description: In case of crashes, if possible, please upload the latest crash dumps relating to explorer.exe. Crash dumps can be found in %LOCALAPPDATA%\CrashDumps. |
||||||
|
placeholder: Drop or paste crash dumps to upload. |
||||||
|
validations: |
||||||
|
required: false |
||||||
|
|
||||||
|
- type: textarea |
||||||
|
id: screenshots |
||||||
|
attributes: |
||||||
|
label: Media |
||||||
|
description: Add screenshots/videos to help illustrate the issue |
||||||
|
placeholder: Drop or paste images or videos to upload. |
||||||
|
validations: |
||||||
|
required: false |
||||||
|
|
||||||
@ -0,0 +1,14 @@ |
|||||||
|
blank_issues_enabled: false |
||||||
|
contact_links: |
||||||
|
- name: Questions |
||||||
|
about: Ask questions and receive support here |
||||||
|
url: https://github.com/valinet/ExplorerPatcher/discussions/categories/q-a |
||||||
|
- name: Feature requests |
||||||
|
about: Suggestions for new features and enhancements here |
||||||
|
url: https://github.com/valinet/ExplorerPatcher/discussions/categories/ideas |
||||||
|
- name: Showcase |
||||||
|
about: Show off your system or give tips and tricks here |
||||||
|
url: https://github.com/valinet/ExplorerPatcher/discussions/categories/show-and-tell |
||||||
|
- name: Wiki |
||||||
|
about: Useful documentation on ExplorerPatcher |
||||||
|
url: https://github.com/valinet/ExplorerPatcher/wiki |
||||||
@ -1,15 +1,15 @@ |
|||||||
[submodule "libs/libvalinet"] |
[submodule "libs/libvalinet"] |
||||||
path = libs/libvalinet |
path = libs/libvalinet |
||||||
url = https://github.com/valinet/libvalinet |
url = https://github.com/valinet/libvalinet |
||||||
[submodule "libs/funchook"] |
|
||||||
path = libs/funchook |
|
||||||
url = https://github.com/kubo/funchook |
|
||||||
[submodule "libs/Detours"] |
|
||||||
path = libs/Detours |
|
||||||
url = https://github.com/microsoft/Detours |
|
||||||
[submodule "libs/sws"] |
[submodule "libs/sws"] |
||||||
path = libs/sws |
path = libs/sws |
||||||
url = https://github.com/valinet/sws |
url = https://github.com/valinet/sws |
||||||
|
[submodule "libs/zlib"] |
||||||
|
path = libs/zlib |
||||||
|
url = https://github.com/madler/zlib |
||||||
[submodule "ep_dwm"] |
[submodule "ep_dwm"] |
||||||
path = ep_dwm |
path = ep_dwm |
||||||
url = https://github.com/valinet/ep_dwm |
url = https://github.com/valinet/ep_dwm |
||||||
|
[submodule "ExplorerPatcher-L10N"] |
||||||
|
path = ExplorerPatcher-L10N |
||||||
|
url = https://github.com/valinet/ExplorerPatcher-L10N |
||||||
|
|||||||
@ -0,0 +1,14 @@ |
|||||||
|
rmdir /s /q libs\zlib\build-x64 |
||||||
|
rmdir /s /q libs\zlib\build-arm64 |
||||||
|
|
||||||
|
if "%VSINSTALLDIR:~-1%"=="\" ( |
||||||
|
set "EP_VSINSTALLDIR=%VSINSTALLDIR:~0,-1%" |
||||||
|
) else ( |
||||||
|
set "EP_VSINSTALLDIR=%VSINSTALLDIR%" |
||||||
|
) |
||||||
|
|
||||||
|
cmake libs/zlib -Blibs/zlib/build-x64 -G "Visual Studio 17 2022" -A x64 -D"CMAKE_GENERATOR_INSTANCE:PATH=%EP_VSINSTALLDIR%" -D"CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>" -DCMAKE_POLICY_DEFAULT_CMP0091=NEW |
||||||
|
cmake libs/zlib -Blibs/zlib/build-arm64 -G "Visual Studio 17 2022" -A ARM64 -D"CMAKE_GENERATOR_INSTANCE:PATH=%EP_VSINSTALLDIR%" -D"CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>" -DCMAKE_POLICY_DEFAULT_CMP0091=NEW |
||||||
|
|
||||||
|
cmake --build libs/zlib/build-x64 --config Debug |
||||||
|
cmake --build libs/zlib/build-arm64 --config Debug |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
rmdir /s /q libs\zlib\build-x64 |
||||||
|
rmdir /s /q libs\zlib\build-arm64 |
||||||
|
|
||||||
|
if "%VSINSTALLDIR:~-1%"=="\" ( |
||||||
|
set "EP_VSINSTALLDIR=%VSINSTALLDIR:~0,-1%" |
||||||
|
) else ( |
||||||
|
set "EP_VSINSTALLDIR=%VSINSTALLDIR%" |
||||||
|
) |
||||||
|
|
||||||
|
cmake libs/zlib -Blibs/zlib/build-x64 -G "Visual Studio 17 2022" -A x64 -D"CMAKE_GENERATOR_INSTANCE:PATH=%EP_VSINSTALLDIR%" -D"CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>" -DCMAKE_POLICY_DEFAULT_CMP0091=NEW |
||||||
|
cmake libs/zlib -Blibs/zlib/build-arm64 -G "Visual Studio 17 2022" -A ARM64 -D"CMAKE_GENERATOR_INSTANCE:PATH=%EP_VSINSTALLDIR%" -D"CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>" -DCMAKE_POLICY_DEFAULT_CMP0091=NEW |
||||||
|
|
||||||
|
cmake --build libs/zlib/build-x64 --config Release |
||||||
|
cmake --build libs/zlib/build-arm64 --config Release |
||||||
Binary file not shown.
@ -0,0 +1,39 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
#include "utility.h" |
||||||
|
|
||||||
|
class CImmersiveColor |
||||||
|
{ |
||||||
|
public: |
||||||
|
static DWORD GetColor(IMMERSIVE_COLOR_TYPE colorType) |
||||||
|
{ |
||||||
|
IMMERSIVE_COLOR_PREFERENCE icp; |
||||||
|
icp.crStartColor = 0; |
||||||
|
icp.crAccentColor = 0; |
||||||
|
GetUserColorPreference(&icp, false/*, true*/); |
||||||
|
return GetColorFromPreference(&icp, colorType, false, IHCM_REFRESH); |
||||||
|
} |
||||||
|
|
||||||
|
static bool IsColorSchemeChangeMessage(UINT uMsg, LPARAM lParam) |
||||||
|
{ |
||||||
|
bool bRet = false; |
||||||
|
if (uMsg == WM_SETTINGCHANGE && lParam && CompareStringOrdinal((WCHAR*)lParam, -1, L"ImmersiveColorSet", -1, TRUE) == CSTR_EQUAL) |
||||||
|
{ |
||||||
|
RefreshImmersiveColorPolicyState(); |
||||||
|
bRet = true; |
||||||
|
} |
||||||
|
GetIsImmersiveColorUsingHighContrast(IHCM_REFRESH); |
||||||
|
return bRet; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
class CImmersiveColorImpl |
||||||
|
{ |
||||||
|
public: |
||||||
|
static HRESULT GetColorPreferenceImpl(IMMERSIVE_COLOR_PREFERENCE* pcpPreference, bool fForceReload, bool fUpdateCached) |
||||||
|
{ |
||||||
|
return GetUserColorPreference(pcpPreference, fForceReload); |
||||||
|
} |
||||||
|
}; |
||||||
@ -0,0 +1,198 @@ |
|||||||
|
#include "InputSwitch.h" |
||||||
|
|
||||||
|
#include <shellscalingapi.h> |
||||||
|
#include <wrl/implements.h> |
||||||
|
#include <wil/result_macros.h> |
||||||
|
|
||||||
|
#define TB_POS_NOWHERE 0 |
||||||
|
#define TB_POS_BOTTOM 1 |
||||||
|
#define TB_POS_TOP 2 |
||||||
|
#define TB_POS_LEFT 3 |
||||||
|
#define TB_POS_RIGHT 4 |
||||||
|
extern "C" UINT GetTaskbarLocationAndSize(POINT ptCursor, RECT* rc); |
||||||
|
|
||||||
|
extern "C" INPUT_SWITCH_IDL_CLIENT_TYPE dwIMEStyle; |
||||||
|
extern "C" HRESULT CInputSwitchControl_ModifyAnchor(UINT dwNumberOfProfiles, RECT* lpRect); |
||||||
|
|
||||||
|
HRESULT CInputSwitchControl_ModifyAnchor(UINT dwNumberOfProfiles, RECT* lpRect) |
||||||
|
{ |
||||||
|
if (!dwIMEStyle) // impossible case (this is not called for the Windows 11 language switcher), but just in case
|
||||||
|
{ |
||||||
|
return S_FALSE; |
||||||
|
} |
||||||
|
|
||||||
|
HWND hWndTaskbar = FindWindowW(L"Shell_TrayWnd", NULL); |
||||||
|
|
||||||
|
UINT dpiX = 96, dpiY = 96; |
||||||
|
HRESULT hr = GetDpiForMonitor( |
||||||
|
MonitorFromWindow(hWndTaskbar, MONITOR_DEFAULTTOPRIMARY), |
||||||
|
MDT_DEFAULT, |
||||||
|
&dpiX, |
||||||
|
&dpiY |
||||||
|
); |
||||||
|
double dpix = dpiX / 96.0; |
||||||
|
double dpiy = dpiY / 96.0; |
||||||
|
|
||||||
|
//printf("RECT %d %d %d %d - %d %d\n", lpRect->left, lpRect->right, lpRect->top, lpRect->bottom, dwNumberOfProfiles, a3);
|
||||||
|
|
||||||
|
RECT rc; |
||||||
|
GetWindowRect(hWndTaskbar, &rc); |
||||||
|
POINT pt; |
||||||
|
pt.x = rc.left; |
||||||
|
pt.y = rc.top; |
||||||
|
UINT tbPos = GetTaskbarLocationAndSize(pt, &rc); |
||||||
|
if (tbPos == TB_POS_BOTTOM) |
||||||
|
{ |
||||||
|
} |
||||||
|
else if (tbPos == TB_POS_TOP) |
||||||
|
{ |
||||||
|
if (dwIMEStyle == 1) // Windows 10 (with Language preferences link)
|
||||||
|
{ |
||||||
|
lpRect->top = rc.top + (rc.bottom - rc.top) + (UINT)(((double)dwNumberOfProfiles * (60.0 * dpiy)) + (5.0 * dpiy * 4.0) + (dpiy) + (48.0 * dpiy)); |
||||||
|
} |
||||||
|
else if (dwIMEStyle == 2 || dwIMEStyle == 3 || dwIMEStyle == 4 || dwIMEStyle == 5) // LOGONUI, UAC, Windows 10, OOBE
|
||||||
|
{ |
||||||
|
lpRect->top = rc.top + (rc.bottom - rc.top) + (UINT)(((double)dwNumberOfProfiles * (60.0 * dpiy)) + (5.0 * dpiy * 2.0)); |
||||||
|
} |
||||||
|
} |
||||||
|
else if (tbPos == TB_POS_LEFT) |
||||||
|
{ |
||||||
|
if (dwIMEStyle == 1 || dwIMEStyle == 2 || dwIMEStyle == 3 || dwIMEStyle == 4 || dwIMEStyle == 5) |
||||||
|
{ |
||||||
|
lpRect->right = rc.left + (rc.right - rc.left) + (UINT)((double)(300.0 * dpix)); |
||||||
|
lpRect->top += (lpRect->bottom - lpRect->top); |
||||||
|
} |
||||||
|
} |
||||||
|
if (tbPos == TB_POS_RIGHT) |
||||||
|
{ |
||||||
|
if (dwIMEStyle == 1 || dwIMEStyle == 2 || dwIMEStyle == 3 || dwIMEStyle == 4 || dwIMEStyle == 5) |
||||||
|
{ |
||||||
|
lpRect->right = lpRect->right - (rc.right - rc.left); |
||||||
|
lpRect->top += (lpRect->bottom - lpRect->top); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (dwIMEStyle == 4) |
||||||
|
{ |
||||||
|
lpRect->right -= (UINT)((double)(300.0 * dpix)) - (lpRect->right - lpRect->left); |
||||||
|
} |
||||||
|
|
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
class CInputSwitchControlProxy : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, IInputSwitchControl> |
||||||
|
{ |
||||||
|
public: |
||||||
|
CInputSwitchControlProxy() |
||||||
|
: m_type((INPUT_SWITCH_IDL_CLIENT_TYPE)-1) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT RuntimeClassInitialize(IInputSwitchControl* original) |
||||||
|
{ |
||||||
|
m_original = original; |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP Init(INPUT_SWITCH_IDL_CLIENT_TYPE type) override |
||||||
|
{ |
||||||
|
m_type = type; |
||||||
|
return m_original->Init(type == ISCT_IDL_DESKTOP && dwIMEStyle != ISCT_IDL_DESKTOP ? dwIMEStyle : type); |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP ShowInputSwitch(const RECT* rect) override |
||||||
|
{ |
||||||
|
RECT myRect = *rect; |
||||||
|
if (m_type == ISCT_IDL_DESKTOP) |
||||||
|
{ |
||||||
|
UINT dwNumberOfProfiles = 0; |
||||||
|
BOOL bImePresent = FALSE; |
||||||
|
m_original->GetProfileCount(&dwNumberOfProfiles, &bImePresent); |
||||||
|
CInputSwitchControl_ModifyAnchor(dwNumberOfProfiles, &myRect); |
||||||
|
} |
||||||
|
return m_original->ShowInputSwitch(&myRect); |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP SetCallback(IInputSwitchCallback* callback) override { return m_original->SetCallback(callback); } |
||||||
|
STDMETHODIMP GetProfileCount(UINT* count, BOOL* bOutImePresent) override { return m_original->GetProfileCount(count, bOutImePresent); } |
||||||
|
STDMETHODIMP GetCurrentProfile(INPUT_SWITCH_IDL_PROFILE_DATA* data) override { return m_original->GetCurrentProfile(data); } |
||||||
|
STDMETHODIMP RegisterHotkeys() override { return m_original->RegisterHotkeys(); } |
||||||
|
STDMETHODIMP ClickImeModeItem(INPUT_SWITCH_IDL_IME_CLICK_TYPE type, POINT point, const RECT* rect) override { return m_original->ClickImeModeItem(type, point, rect); } |
||||||
|
STDMETHODIMP ForceHide() override { return m_original->ForceHide(); } |
||||||
|
STDMETHODIMP ShowTouchKeyboardInputSwitch(const RECT* rect, INPUT_SWITCH_IDL_ALIGNMENT align, int a3, DWORD a4, INPUT_SWITCH_IDL_MODALITY a5) override { return m_original->ShowTouchKeyboardInputSwitch(rect, align, a3, a4, a5); } |
||||||
|
STDMETHODIMP GetContextFlags(DWORD* flags) override { return m_original->GetContextFlags(flags); } |
||||||
|
STDMETHODIMP SetContextOverrideMode(INPUT_SWITCH_IDL_CFOM mode) override { return m_original->SetContextOverrideMode(mode); } |
||||||
|
STDMETHODIMP GetCurrentImeModeItem(INPUT_SWITCH_IDL_IME_MODE_ITEM_DATA* data) override { return m_original->GetCurrentImeModeItem(data); } |
||||||
|
STDMETHODIMP ActivateInputProfile(const WCHAR* profile) override { return m_original->ActivateInputProfile(profile); } |
||||||
|
STDMETHODIMP SetUserSid(const WCHAR* sid) override { return m_original->SetUserSid(sid); } |
||||||
|
|
||||||
|
private: |
||||||
|
Microsoft::WRL::ComPtr<IInputSwitchControl> m_original; |
||||||
|
INPUT_SWITCH_IDL_CLIENT_TYPE m_type; |
||||||
|
}; |
||||||
|
|
||||||
|
HRESULT CInputSwitchControlProxy_CreateInstance(IInputSwitchControl* original, REFIID riid, void** ppvObject) |
||||||
|
{ |
||||||
|
Microsoft::WRL::ComPtr<CInputSwitchControlProxy> proxy; |
||||||
|
RETURN_IF_FAILED(Microsoft::WRL::MakeAndInitialize<CInputSwitchControlProxy>(&proxy, original)); |
||||||
|
RETURN_HR(proxy.CopyTo(riid, ppvObject)); |
||||||
|
} |
||||||
|
|
||||||
|
class CInputSwitchControlProxySV2 : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, IInputSwitchControlSV2> |
||||||
|
{ |
||||||
|
public: |
||||||
|
CInputSwitchControlProxySV2() |
||||||
|
: m_type((INPUT_SWITCH_IDL_CLIENT_TYPE)-1) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT RuntimeClassInitialize(IInputSwitchControlSV2* original) |
||||||
|
{ |
||||||
|
m_original = original; |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP Init(INPUT_SWITCH_IDL_CLIENT_TYPE type) override |
||||||
|
{ |
||||||
|
m_type = type; |
||||||
|
return m_original->Init(type == ISCT_IDL_DESKTOP && dwIMEStyle != ISCT_IDL_DESKTOP ? dwIMEStyle : type); |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP ShowInputSwitch(const RECT* rect) override |
||||||
|
{ |
||||||
|
RECT myRect = *rect; |
||||||
|
if (m_type == ISCT_IDL_DESKTOP) |
||||||
|
{ |
||||||
|
UINT dwNumberOfProfiles = 0; |
||||||
|
BOOL bImePresent = FALSE; |
||||||
|
m_original->GetProfileCount(&dwNumberOfProfiles, &bImePresent); |
||||||
|
CInputSwitchControl_ModifyAnchor(dwNumberOfProfiles, &myRect); |
||||||
|
} |
||||||
|
return m_original->ShowInputSwitch(&myRect); |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP SetCallback(IInputSwitchCallback* callback) override { return m_original->SetCallback(callback); } |
||||||
|
STDMETHODIMP GetProfileCount(UINT* count, BOOL* bOutImePresent) override { return m_original->GetProfileCount(count, bOutImePresent); } |
||||||
|
STDMETHODIMP GetCurrentProfile(INPUT_SWITCH_IDL_PROFILE_DATA* data) override { return m_original->GetCurrentProfile(data); } |
||||||
|
STDMETHODIMP RegisterHotkeys() override { return m_original->RegisterHotkeys(); } |
||||||
|
STDMETHODIMP ClickImeModeItem(INPUT_SWITCH_IDL_IME_CLICK_TYPE type, POINT point, const RECT* rect) override { return m_original->ClickImeModeItem(type, point, rect); } |
||||||
|
STDMETHODIMP ClickImeModeItemWithAnchor(INPUT_SWITCH_IDL_IME_CLICK_TYPE type, IUnknown* anchor) override { return m_original->ClickImeModeItemWithAnchor(type, anchor); } |
||||||
|
STDMETHODIMP ForceHide() override { return m_original->ForceHide(); } |
||||||
|
STDMETHODIMP ShowTouchKeyboardInputSwitch(const RECT* rect, INPUT_SWITCH_IDL_ALIGNMENT align, int a3, DWORD a4, INPUT_SWITCH_IDL_MODALITY a5) override { return m_original->ShowTouchKeyboardInputSwitch(rect, align, a3, a4, a5); } |
||||||
|
STDMETHODIMP GetContextFlags(DWORD* flags) override { return m_original->GetContextFlags(flags); } |
||||||
|
STDMETHODIMP SetContextOverrideMode(INPUT_SWITCH_IDL_CFOM mode) override { return m_original->SetContextOverrideMode(mode); } |
||||||
|
STDMETHODIMP GetCurrentImeModeItem(INPUT_SWITCH_IDL_IME_MODE_ITEM_DATA* data) override { return m_original->GetCurrentImeModeItem(data); } |
||||||
|
STDMETHODIMP ActivateInputProfile(const WCHAR* profile) override { return m_original->ActivateInputProfile(profile); } |
||||||
|
STDMETHODIMP SetUserSid(const WCHAR* sid) override { return m_original->SetUserSid(sid); } |
||||||
|
|
||||||
|
private: |
||||||
|
Microsoft::WRL::ComPtr<IInputSwitchControlSV2> m_original; |
||||||
|
INPUT_SWITCH_IDL_CLIENT_TYPE m_type; |
||||||
|
}; |
||||||
|
|
||||||
|
HRESULT CInputSwitchControlProxySV2_CreateInstance(IInputSwitchControlSV2* original, REFIID riid, void** ppvObject) |
||||||
|
{ |
||||||
|
Microsoft::WRL::ComPtr<CInputSwitchControlProxySV2> proxy; |
||||||
|
RETURN_IF_FAILED(Microsoft::WRL::MakeAndInitialize<CInputSwitchControlProxySV2>(&proxy, original)); |
||||||
|
RETURN_HR(proxy.CopyTo(riid, ppvObject)); |
||||||
|
} |
||||||
@ -0,0 +1,125 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
DEFINE_GUID(CLSID_InputSwitchControl, 0xb9bc2a50, 0x43c3, 0x41aa, 0xa0, 0x86, 0x5d, 0xb1, 0x4e, 0x18, 0x4b, 0xae); |
||||||
|
DEFINE_GUID(IID_IInputSwitchControl, 0xb9bc2a50, 0x43c3, 0x41aa, 0xa0, 0x82, 0x5d, 0xb1, 0x4e, 0x18, 0x4b, 0xae); |
||||||
|
|
||||||
|
typedef enum __MIDL___MIDL_itf_inputswitchserver_0000_0000_0001 |
||||||
|
{ |
||||||
|
ISCT_IDL_DESKTOP, |
||||||
|
ISCT_IDL_TOUCHKEYBOARD, |
||||||
|
ISCT_IDL_LOGONUI, |
||||||
|
ISCT_IDL_UAC, |
||||||
|
ISCT_IDL_SETTINGSPANE, |
||||||
|
ISCT_IDL_OOBE, |
||||||
|
ISCT_IDL_USEROOBE |
||||||
|
} INPUT_SWITCH_IDL_CLIENT_TYPE; |
||||||
|
|
||||||
|
typedef struct __MIDL___MIDL_itf_inputswitchserver_0000_0000_0002 |
||||||
|
{ |
||||||
|
int dummy; // We don't need its contents
|
||||||
|
} INPUT_SWITCH_IDL_PROFILE_DATA; |
||||||
|
|
||||||
|
typedef struct __MIDL___MIDL_itf_inputswitchserver_0000_0000_0003 |
||||||
|
{ |
||||||
|
WCHAR* pszTooltip; |
||||||
|
HICON hIcon; |
||||||
|
BOOL fDisabled; |
||||||
|
BOOL fHidden; |
||||||
|
WCHAR* pszIconGlyph; |
||||||
|
void* pUnk1; // @Note: Added in 22621.4974
|
||||||
|
} INPUT_SWITCH_IDL_IME_MODE_ITEM_DATA; |
||||||
|
|
||||||
|
typedef enum __MIDL___MIDL_itf_inputswitchserver_0000_0000_0004 |
||||||
|
{ |
||||||
|
INPUT_SWITCH_IDL_IME_CLICK_TYPE_LEFT, |
||||||
|
INPUT_SWITCH_IDL_IME_CLICK_TYPE_RIGHT, |
||||||
|
INPUT_SWITCH_IDL_IME_CLICK_TYPE_LEFT_DISABLED |
||||||
|
} INPUT_SWITCH_IDL_IME_CLICK_TYPE; |
||||||
|
|
||||||
|
typedef enum __MIDL___MIDL_itf_inputswitchserver_0000_0000_0005 |
||||||
|
{ |
||||||
|
INPUT_SWITCH_IDL_MODALITY_STANDARDKEYBOARD = 0x1, |
||||||
|
INPUT_SWITCH_IDL_MODALITY_SPLITKEYBOARD = 0x2, |
||||||
|
INPUT_SWITCH_IDL_MODALITY_CLASSICKEYBOARD = 0x4, |
||||||
|
INPUT_SWITCH_IDL_MODALITY_HANDWRITING = 0x8, |
||||||
|
INPUT_SWITCH_IDL_MODALITY_HIDE = 0x10, |
||||||
|
INPUT_SWITCH_IDL_MODALITY_ONEHANDEDKEYBOARD = 0x20, |
||||||
|
} INPUT_SWITCH_IDL_MODALITY; |
||||||
|
|
||||||
|
DEFINE_ENUM_FLAG_OPERATORS(INPUT_SWITCH_IDL_MODALITY); |
||||||
|
|
||||||
|
typedef enum __MIDL___MIDL_itf_inputswitchserver_0000_0000_0006 |
||||||
|
{ |
||||||
|
INPUT_SWITCH_IDL_ALIGN_DEFAULT, |
||||||
|
INPUT_SWITCH_IDL_ALIGN_RIGHT_EDGE, |
||||||
|
INPUT_SWITCH_IDL_ALIGN_LEFT_EDGE, |
||||||
|
} INPUT_SWITCH_IDL_ALIGNMENT; |
||||||
|
|
||||||
|
typedef enum __MIDL___MIDL_itf_inputswitchserver_0000_0000_0008 |
||||||
|
{ |
||||||
|
INPUT_SWITCH_IDL_CFOM_NO_OVERRIDE, |
||||||
|
INPUT_SWITCH_IDL_CFOM_DESKTOP, |
||||||
|
INPUT_SWITCH_IDL_CFOM_IMMERSIVE, |
||||||
|
} INPUT_SWITCH_IDL_CFOM; |
||||||
|
|
||||||
|
interface IInputSwitchCallback; |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
MIDL_INTERFACE("b9bc2a50-43c3-41aa-a082-5db14e184bae") |
||||||
|
IInputSwitchControl : IUnknown |
||||||
|
{ |
||||||
|
virtual HRESULT STDMETHODCALLTYPE Init(INPUT_SWITCH_IDL_CLIENT_TYPE) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetCallback(IInputSwitchCallback*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ShowInputSwitch(const RECT*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetProfileCount(UINT*, BOOL*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetCurrentProfile(INPUT_SWITCH_IDL_PROFILE_DATA*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE RegisterHotkeys() = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ClickImeModeItem(INPUT_SWITCH_IDL_IME_CLICK_TYPE, POINT, const RECT*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ForceHide() = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ShowTouchKeyboardInputSwitch(const RECT*, INPUT_SWITCH_IDL_ALIGNMENT, int, DWORD, INPUT_SWITCH_IDL_MODALITY) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetContextFlags(DWORD*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetContextOverrideMode(INPUT_SWITCH_IDL_CFOM) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetCurrentImeModeItem(INPUT_SWITCH_IDL_IME_MODE_ITEM_DATA*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ActivateInputProfile(const WCHAR*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetUserSid(const WCHAR*) = 0; |
||||||
|
}; |
||||||
|
#else |
||||||
|
typedef interface IInputSwitchControl IInputSwitchControl; |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
MIDL_INTERFACE("b9bc2a50-43c3-41aa-a082-5db14e184bae") |
||||||
|
IInputSwitchControlSV2 : IUnknown |
||||||
|
{ |
||||||
|
virtual HRESULT STDMETHODCALLTYPE Init(INPUT_SWITCH_IDL_CLIENT_TYPE) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetCallback(IInputSwitchCallback*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ShowInputSwitch(const RECT*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetProfileCount(UINT*, BOOL*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetCurrentProfile(INPUT_SWITCH_IDL_PROFILE_DATA*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE RegisterHotkeys() = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ClickImeModeItem(INPUT_SWITCH_IDL_IME_CLICK_TYPE, POINT, const RECT*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ClickImeModeItemWithAnchor(INPUT_SWITCH_IDL_IME_CLICK_TYPE, IUnknown*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ForceHide() = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ShowTouchKeyboardInputSwitch(const RECT*, INPUT_SWITCH_IDL_ALIGNMENT, int, DWORD, INPUT_SWITCH_IDL_MODALITY) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetContextFlags(DWORD*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetContextOverrideMode(INPUT_SWITCH_IDL_CFOM) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE GetCurrentImeModeItem(INPUT_SWITCH_IDL_IME_MODE_ITEM_DATA*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE ActivateInputProfile(const WCHAR*) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE SetUserSid(const WCHAR*) = 0; |
||||||
|
}; |
||||||
|
#else |
||||||
|
typedef interface IInputSwitchControlSV2 IInputSwitchControlSV2; |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
HRESULT CInputSwitchControlProxy_CreateInstance(IInputSwitchControl* original, REFIID riid, void** ppvObject); |
||||||
|
HRESULT CInputSwitchControlProxySV2_CreateInstance(IInputSwitchControlSV2* original, REFIID riid, void** ppvObject); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,146 @@ |
|||||||
|
#include "Localization.h" |
||||||
|
|
||||||
|
#include <algorithm> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include "def.h" |
||||||
|
|
||||||
|
extern "C" |
||||||
|
{ |
||||||
|
|
||||||
|
EP_L10N_Language LangIDToEPLanguage(LANGID wLanguage) |
||||||
|
{ |
||||||
|
EP_L10N_Language language = {}; |
||||||
|
language.id = wLanguage; |
||||||
|
GetLocaleInfoW(wLanguage, LOCALE_SNAME, language.wszId, ARRAYSIZE(language.wszId)); |
||||||
|
GetLocaleInfoW(wLanguage, LOCALE_SLOCALIZEDDISPLAYNAME, language.wszDisplayName, ARRAYSIZE(language.wszDisplayName)); |
||||||
|
return language; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL EP_L10N_ApplyPreferredLanguageForCurrentThread() |
||||||
|
{ |
||||||
|
BOOL rv = FALSE; |
||||||
|
HKEY hKey = nullptr; |
||||||
|
RegCreateKeyExW( |
||||||
|
HKEY_CURRENT_USER, |
||||||
|
TEXT(REGPATH), |
||||||
|
0, |
||||||
|
nullptr, |
||||||
|
REG_OPTION_NON_VOLATILE, |
||||||
|
KEY_READ | KEY_WOW64_64KEY, |
||||||
|
nullptr, |
||||||
|
&hKey, |
||||||
|
nullptr |
||||||
|
); |
||||||
|
if (hKey == nullptr || hKey == INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
hKey = nullptr; |
||||||
|
} |
||||||
|
if (hKey) |
||||||
|
{ |
||||||
|
DWORD dwPreferredLanguage = 0; |
||||||
|
DWORD dwSize = sizeof(dwPreferredLanguage); |
||||||
|
LSTATUS lres = RegQueryValueExW( |
||||||
|
hKey, |
||||||
|
TEXT("Language"), |
||||||
|
nullptr, |
||||||
|
nullptr, |
||||||
|
(LPBYTE)&dwPreferredLanguage, |
||||||
|
&dwSize |
||||||
|
); |
||||||
|
if (lres == ERROR_SUCCESS && dwPreferredLanguage != 0) |
||||||
|
{ |
||||||
|
EP_L10N_Language language = LangIDToEPLanguage((LANGID)dwPreferredLanguage); |
||||||
|
rv = SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, language.wszId, nullptr); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
rv = SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, nullptr, nullptr); |
||||||
|
} |
||||||
|
RegCloseKey(hKey); |
||||||
|
} |
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL EP_L10N_GetCurrentUserLanguage(wchar_t* wszLanguage, int cch) |
||||||
|
{ |
||||||
|
BOOL bOk = FALSE; |
||||||
|
ULONG ulNumLanguages = 0; |
||||||
|
ULONG cchLanguagesBuffer = 0; |
||||||
|
if (GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &ulNumLanguages, nullptr, &cchLanguagesBuffer)) |
||||||
|
{ |
||||||
|
wchar_t* wszLanguagesBuffer = (wchar_t*)malloc(cchLanguagesBuffer * sizeof(wchar_t)); |
||||||
|
if (wszLanguagesBuffer) |
||||||
|
{ |
||||||
|
if (GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &ulNumLanguages, wszLanguagesBuffer, &cchLanguagesBuffer)) |
||||||
|
{ |
||||||
|
wcscpy_s(wszLanguage, cch, wszLanguagesBuffer); |
||||||
|
bOk = TRUE; |
||||||
|
} |
||||||
|
free(wszLanguagesBuffer); |
||||||
|
} |
||||||
|
} |
||||||
|
if (!bOk) |
||||||
|
{ |
||||||
|
wcscpy_s(wszLanguage, cch, L"en-US"); |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL EP_L10N_GetCurrentThreadLanguage(wchar_t* wszLanguage, int cch) |
||||||
|
{ |
||||||
|
BOOL bOk = FALSE; |
||||||
|
ULONG ulNumLanguages = 0; |
||||||
|
ULONG cchLanguagesBuffer = 0; |
||||||
|
if (GetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, &ulNumLanguages, nullptr, &cchLanguagesBuffer)) |
||||||
|
{ |
||||||
|
wchar_t* wszLanguagesBuffer = (wchar_t*)malloc(cchLanguagesBuffer * sizeof(wchar_t)); |
||||||
|
if (wszLanguagesBuffer) |
||||||
|
{ |
||||||
|
if (GetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, &ulNumLanguages, wszLanguagesBuffer, &cchLanguagesBuffer)) |
||||||
|
{ |
||||||
|
wcscpy_s(wszLanguage, cch, wszLanguagesBuffer); |
||||||
|
bOk = TRUE; |
||||||
|
} |
||||||
|
free(wszLanguagesBuffer); |
||||||
|
} |
||||||
|
} |
||||||
|
if (!bOk) |
||||||
|
{ |
||||||
|
wcscpy_s(wszLanguage, cch, L"en-US"); |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
|
|
||||||
|
void EP_L10N_EnumerateLanguages(HMODULE hModule, LPCWSTR lpType, LPCWSTR lpName, EP_L10N_EnumerateLanguagesProc_t pfnProc, void* data) |
||||||
|
{ |
||||||
|
std::vector<EP_L10N_Language> languages; |
||||||
|
|
||||||
|
// English (US) is our primary language
|
||||||
|
languages.push_back(LangIDToEPLanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US))); |
||||||
|
|
||||||
|
// Add the rest below it
|
||||||
|
EnumResourceLanguagesW(hModule, lpType, lpName, [](HMODULE, LPCWSTR, LPCWSTR, WORD wLanguage, LONG_PTR lParam) -> BOOL |
||||||
|
{ |
||||||
|
if (wLanguage != MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)) |
||||||
|
{ |
||||||
|
EP_L10N_Language language = LangIDToEPLanguage(wLanguage); |
||||||
|
((std::vector<EP_L10N_Language>*)lParam)->push_back(language); |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
}, (LONG_PTR)&languages); |
||||||
|
|
||||||
|
// Sort the non-primary languages by localized display name
|
||||||
|
std::sort(languages.begin() + 1, languages.end(), [](const EP_L10N_Language& a, const EP_L10N_Language& b) -> bool |
||||||
|
{ |
||||||
|
return wcscmp(a.wszDisplayName, b.wszDisplayName) < 0; |
||||||
|
}); |
||||||
|
|
||||||
|
// Call the callback for each language
|
||||||
|
for (const EP_L10N_Language& language : languages) |
||||||
|
{ |
||||||
|
pfnProc(&language, data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" |
||||||
|
{ |
||||||
|
#endif |
||||||
|
|
||||||
|
typedef struct EP_L10N_Language |
||||||
|
{ |
||||||
|
LANGID id; |
||||||
|
wchar_t wszId[LOCALE_NAME_MAX_LENGTH]; |
||||||
|
wchar_t wszDisplayName[LOCALE_NAME_MAX_LENGTH]; |
||||||
|
} EP_L10N_Language; |
||||||
|
|
||||||
|
typedef void(*EP_L10N_EnumerateLanguagesProc_t)(const EP_L10N_Language* language, void* data); |
||||||
|
|
||||||
|
BOOL EP_L10N_ApplyPreferredLanguageForCurrentThread(); |
||||||
|
BOOL EP_L10N_GetCurrentUserLanguage(wchar_t* wszLanguage, int cch); |
||||||
|
BOOL EP_L10N_GetCurrentThreadLanguage(wchar_t* wszLanguage, int cch); |
||||||
|
void EP_L10N_EnumerateLanguages(HMODULE hModule, LPCWSTR lpType, LPCWSTR lpName, EP_L10N_EnumerateLanguagesProc_t pfnProc, void* data); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,29 +0,0 @@ |
|||||||
#include "StartupSound.h" |
|
||||||
|
|
||||||
DWORD PlayStartupSound(PlayStartupSoundParams* unused) |
|
||||||
{ |
|
||||||
Sleep(2000); |
|
||||||
printf("Started \"Play startup sound\" thread.\n"); |
|
||||||
|
|
||||||
HRESULT hr = CoInitialize(NULL); |
|
||||||
|
|
||||||
// this checks Software\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\LogonSoundPlayed
|
|
||||||
// and then plays the startup sound
|
|
||||||
|
|
||||||
AuthUILogonSound* ppv; |
|
||||||
hr = CoCreateInstance( |
|
||||||
&__uuidof_AuthUILogonSound, |
|
||||||
NULL, |
|
||||||
CLSCTX_INPROC_SERVER, |
|
||||||
&__uuidof_IAuthUILogonSound, |
|
||||||
&ppv |
|
||||||
); |
|
||||||
if (SUCCEEDED(hr)) |
|
||||||
{ |
|
||||||
ppv->lpVtbl->PlayIfNecessary(ppv, 1); |
|
||||||
ppv->lpVtbl->Release(ppv); |
|
||||||
} |
|
||||||
|
|
||||||
printf("Ended \"Play startup sound\" thread.\n"); |
|
||||||
return 0; |
|
||||||
} |
|
||||||
@ -0,0 +1,390 @@ |
|||||||
|
#include "StartupSound.h" |
||||||
|
|
||||||
|
#include <Shlwapi.h> |
||||||
|
#pragma comment(lib, "Shlwapi.lib") |
||||||
|
#include <stdio.h> |
||||||
|
#include <strsafe.h> |
||||||
|
#pragma comment(lib, "Winmm.lib") |
||||||
|
#include <Wtsapi32.h> |
||||||
|
#pragma comment(lib, "Wtsapi32.lib") |
||||||
|
#include <tchar.h> |
||||||
|
#include <wrl/client.h> |
||||||
|
#include <wil/result_macros.h> |
||||||
|
|
||||||
|
#include "def.h" |
||||||
|
|
||||||
|
BOOL AreLogonLogoffShutdownSoundsEnabled() |
||||||
|
{ |
||||||
|
#if 0 |
||||||
|
DWORD dwValue = 0; |
||||||
|
DWORD dwSize = sizeof(dwValue); |
||||||
|
RegGetValueW(HKEY_CURRENT_USER, _T(REGPATH), L"LogonLogoffShutdownSounds", RRF_RT_DWORD, nullptr, &dwValue, &dwSize); |
||||||
|
return dwValue != 0; |
||||||
|
#else |
||||||
|
return FALSE; |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
DWORD GetLastErrorError() |
||||||
|
{ |
||||||
|
DWORD result = GetLastError(); |
||||||
|
return result == ERROR_SUCCESS ? 1 : result; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT HRESULTFromLastErrorError() |
||||||
|
{ |
||||||
|
DWORD error = GetLastError(); |
||||||
|
if (error != ERROR_SUCCESS && (int)error <= 0) |
||||||
|
return (HRESULT)GetLastErrorError(); |
||||||
|
else |
||||||
|
return (HRESULT)((GetLastErrorError() & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000); |
||||||
|
} |
||||||
|
|
||||||
|
DWORD PlaySoundFileThreadProc(LPVOID pvData) |
||||||
|
{ |
||||||
|
PlaySoundW((LPCWSTR)pvData, nullptr, SND_NODEFAULT | SND_MEMORY | SND_SYSTEM); |
||||||
|
LocalFree(pvData); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT PlaySoundFile(HANDLE* phThread, const WCHAR* pszPath) |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
|
||||||
|
void* pvData = nullptr; |
||||||
|
HANDLE hFile = CreateFileW( |
||||||
|
pszPath, |
||||||
|
GENERIC_READ, |
||||||
|
FILE_SHARE_READ | FILE_SHARE_DELETE, |
||||||
|
nullptr, |
||||||
|
OPEN_EXISTING, |
||||||
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, |
||||||
|
nullptr |
||||||
|
); |
||||||
|
if (hFile != INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
DWORD dwSize = GetFileSize(hFile, nullptr); |
||||||
|
hr = E_OUTOFMEMORY; |
||||||
|
if (dwSize != (DWORD)-1 && dwSize) |
||||||
|
{ |
||||||
|
if (dwSize < 0x400000) |
||||||
|
{ |
||||||
|
pvData = LocalAlloc(0, dwSize); |
||||||
|
if (pvData) |
||||||
|
{ |
||||||
|
DWORD dwRead; |
||||||
|
if (ReadFile(hFile, pvData, dwSize, &dwRead, nullptr)) |
||||||
|
hr = dwSize == dwRead ? S_OK : HRESULT_FROM_WIN32(ERROR_IO_PENDING); |
||||||
|
else |
||||||
|
hr = HRESULTFromLastErrorError(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = HRESULTFromLastErrorError(); |
||||||
|
} |
||||||
|
CloseHandle(hFile); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = HRESULTFromLastErrorError(); |
||||||
|
} |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
HANDLE hThread = CreateThread(nullptr, 0, PlaySoundFileThreadProc, pvData, 0, nullptr); |
||||||
|
if (hThread) |
||||||
|
{ |
||||||
|
if (phThread) |
||||||
|
*phThread = hThread; |
||||||
|
else |
||||||
|
CloseHandle(hThread); |
||||||
|
return hr; |
||||||
|
} |
||||||
|
hr = HRESULTFromLastErrorError(); |
||||||
|
} |
||||||
|
if (pvData) |
||||||
|
LocalFree(pvData); |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
typedef enum LOGONOFFSOUNDTYPE |
||||||
|
{ |
||||||
|
LOGONOFFSOUNDTYPE_LOGON, |
||||||
|
LOGONOFFSOUNDTYPE_LOGOFF, |
||||||
|
LOGONOFFSOUNDTYPE_EXIT, |
||||||
|
} LOGONOFFSOUNDTYPE; |
||||||
|
|
||||||
|
HRESULT PlayLogonLogoffSound(HANDLE* phThread, LOGONOFFSOUNDTYPE type) |
||||||
|
{ |
||||||
|
const WCHAR* szEventName; |
||||||
|
switch (type) |
||||||
|
{ |
||||||
|
case LOGONOFFSOUNDTYPE_LOGON: |
||||||
|
szEventName = L"WindowsLogon"; |
||||||
|
break; |
||||||
|
case LOGONOFFSOUNDTYPE_LOGOFF: |
||||||
|
szEventName = L"WindowsLogoff"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
szEventName = L"SystemExit"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR szSubKey[MAX_PATH]; |
||||||
|
HRESULT hr = StringCchPrintfW(szSubKey, ARRAYSIZE(szSubKey), L"AppEvents\\Schemes\\Apps\\.Default\\%ws\\.Current", szEventName); |
||||||
|
if (FAILED(hr)) |
||||||
|
return hr; |
||||||
|
|
||||||
|
WCHAR szPath[MAX_PATH]; |
||||||
|
DWORD cbData = sizeof(szPath); |
||||||
|
LSTATUS lStat = RegGetValueW(HKEY_CURRENT_USER, szSubKey, nullptr, REG_EXPAND_SZ, nullptr, szPath, &cbData); |
||||||
|
if (lStat != ERROR_SUCCESS) |
||||||
|
return HRESULT_FROM_WIN32(lStat); |
||||||
|
|
||||||
|
return PlaySoundFile(phThread, szPath); |
||||||
|
} |
||||||
|
|
||||||
|
// https://stackoverflow.com/a/59810748
|
||||||
|
bool IsSessionLocked() |
||||||
|
{ |
||||||
|
WTSINFOEXW* pInfo = NULL; |
||||||
|
WTS_INFO_CLASS wtsic = WTSSessionInfoEx; |
||||||
|
LPTSTR ppBuffer = NULL; |
||||||
|
DWORD dwBytesReturned = 0; |
||||||
|
LONG sessionFlags = WTS_SESSIONSTATE_UNKNOWN; |
||||||
|
|
||||||
|
DWORD dwSessionID = WTSGetActiveConsoleSessionId(); |
||||||
|
|
||||||
|
if (WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, dwSessionID, wtsic, &ppBuffer, &dwBytesReturned)) |
||||||
|
{ |
||||||
|
if (dwBytesReturned > 0) |
||||||
|
{ |
||||||
|
pInfo = (WTSINFOEXW*)ppBuffer; |
||||||
|
if (pInfo->Level == 1) |
||||||
|
{ |
||||||
|
sessionFlags = pInfo->Data.WTSInfoExLevel1.SessionFlags; |
||||||
|
} |
||||||
|
} |
||||||
|
WTSFreeMemory(ppBuffer); |
||||||
|
ppBuffer = NULL; |
||||||
|
} |
||||||
|
|
||||||
|
return (sessionFlags == WTS_SESSIONSTATE_LOCK); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT (*CLogonSound_PlayIfNecessaryFunc)(void* _this, LOGON_SOUND_CLIENT client); |
||||||
|
HRESULT CLogonSound_PlayIfNecessaryHook(void* _this, LOGON_SOUND_CLIENT client) |
||||||
|
{ |
||||||
|
HRESULT hr = CLogonSound_PlayIfNecessaryFunc(_this, client); |
||||||
|
if (hr != S_OK && client == LSC_EXPLORER) |
||||||
|
{ |
||||||
|
if (!IsSessionLocked()) |
||||||
|
PlayLogonLogoffSound(nullptr, LOGONOFFSOUNDTYPE_LOGON); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT HookLogonSound() |
||||||
|
{ |
||||||
|
RETURN_IF_FAILED(CoInitialize(nullptr)); |
||||||
|
|
||||||
|
Microsoft::WRL::ComPtr<IAuthUILogonSound> logonSound; |
||||||
|
RETURN_IF_FAILED(CoCreateInstance(__uuidof_AuthUILogonSound, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&logonSound))); |
||||||
|
|
||||||
|
void** vtable = *(void***)logonSound.Get(); |
||||||
|
DWORD flOldProtect; |
||||||
|
RETURN_HR_IF(E_FAIL, !VirtualProtect(&vtable[3], sizeof(void*), PAGE_EXECUTE_READWRITE, &flOldProtect)); |
||||||
|
|
||||||
|
CLogonSound_PlayIfNecessaryFunc = (decltype(CLogonSound_PlayIfNecessaryFunc))vtable[3]; |
||||||
|
vtable[3] = (void*)CLogonSound_PlayIfNecessaryHook; |
||||||
|
VirtualProtect(&vtable[3], sizeof(void*), flOldProtect, &flOldProtect); |
||||||
|
|
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
LRESULT SHDefWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
||||||
|
{ |
||||||
|
if (IsWindowUnicode(hwnd)) |
||||||
|
{ |
||||||
|
return DefWindowProcW(hwnd, uMsg, wParam, lParam); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
return DefWindowProcA(hwnd, uMsg, wParam, lParam); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
HWND g_hwndSound; |
||||||
|
|
||||||
|
class CSoundWnd |
||||||
|
{ |
||||||
|
public: |
||||||
|
CSoundWnd(); |
||||||
|
|
||||||
|
BOOL Init(); |
||||||
|
DWORD Release(); |
||||||
|
|
||||||
|
protected: |
||||||
|
static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
||||||
|
LRESULT v_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
||||||
|
|
||||||
|
private: |
||||||
|
static DWORD s_CreateWindow(void* pvParam); |
||||||
|
static DWORD s_ThreadProc(void* pvParam); |
||||||
|
|
||||||
|
LONG m_refCount; |
||||||
|
HWND m_hwnd; |
||||||
|
HANDLE m_thread; |
||||||
|
}; |
||||||
|
|
||||||
|
CSoundWnd::CSoundWnd() |
||||||
|
: m_refCount(1) |
||||||
|
, m_hwnd(nullptr) |
||||||
|
, m_thread(nullptr) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
BOOL CSoundWnd::Init() |
||||||
|
{ |
||||||
|
SHCreateThread(s_ThreadProc, this, CTF_THREAD_REF | CTF_COINIT_STA | CTF_REF_COUNTED | CTF_NOADDREFLIB, s_CreateWindow); |
||||||
|
g_hwndSound = m_hwnd; |
||||||
|
return m_hwnd != nullptr; |
||||||
|
} |
||||||
|
|
||||||
|
DWORD CSoundWnd::Release() |
||||||
|
{ |
||||||
|
LONG refCount = InterlockedDecrement(&m_refCount); |
||||||
|
if (refCount == 0 && this) |
||||||
|
operator delete(this); |
||||||
|
return refCount; |
||||||
|
} |
||||||
|
|
||||||
|
LRESULT CSoundWnd::s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
||||||
|
{ |
||||||
|
CSoundWnd* pThis = (CSoundWnd*)GetWindowLongPtrW(hwnd, 0); |
||||||
|
if (pThis) |
||||||
|
return pThis->v_WndProc(hwnd, uMsg, wParam, lParam); |
||||||
|
else |
||||||
|
return SHDefWindowProc(hwnd, uMsg, wParam, lParam); |
||||||
|
} |
||||||
|
|
||||||
|
LRESULT CSoundWnd::v_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
||||||
|
{ |
||||||
|
switch (uMsg) |
||||||
|
{ |
||||||
|
case WM_QUERYENDSESSION: |
||||||
|
{ |
||||||
|
if ((lParam & ENDSESSION_CRITICAL) == 0) |
||||||
|
{ |
||||||
|
WCHAR sz[256]; |
||||||
|
LoadStringW(GetModuleHandleW(nullptr), 731, sz, ARRAYSIZE(sz)); // Playing logoff sound...
|
||||||
|
ShutdownBlockReasonCreate(m_hwnd, sz); |
||||||
|
PlayLogonLogoffSound(&m_thread, (lParam & ENDSESSION_LOGOFF) != 0 ? LOGONOFFSOUNDTYPE_LOGOFF : LOGONOFFSOUNDTYPE_EXIT); |
||||||
|
if (m_thread) |
||||||
|
{ |
||||||
|
WaitForSingleObject(m_thread, INFINITE); // @MOD
|
||||||
|
CloseHandle(m_thread); // @MOD
|
||||||
|
} |
||||||
|
} |
||||||
|
return 1; |
||||||
|
} |
||||||
|
case WM_ENDSESSION: |
||||||
|
{ |
||||||
|
/*if (wParam && (lParam & ENDSESSION_CRITICAL) == 0 && m_thread) // @MOD This doesn't work
|
||||||
|
{ |
||||||
|
WaitForSingleObject(m_thread, INFINITE); |
||||||
|
CloseHandle(m_thread); |
||||||
|
}*/ |
||||||
|
DestroyWindow(m_hwnd); |
||||||
|
break; |
||||||
|
} |
||||||
|
case WM_NCDESTROY: |
||||||
|
{ |
||||||
|
SetWindowLongW(hwnd, 0, 0); |
||||||
|
g_hwndSound = nullptr; |
||||||
|
m_hwnd = nullptr; |
||||||
|
PostQuitMessage(0); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
return SHDefWindowProc(hwnd, uMsg, wParam, lParam); |
||||||
|
} |
||||||
|
|
||||||
|
extern "C" HWND (__stdcall *explorerframe_SHCreateWorkerWindowFunc)( |
||||||
|
WNDPROC wndProc, |
||||||
|
HWND hWndParent, |
||||||
|
DWORD dwExStyle, |
||||||
|
DWORD dwStyle, |
||||||
|
HMENU hMenu, |
||||||
|
LONG_PTR wnd_extra |
||||||
|
); |
||||||
|
|
||||||
|
DWORD CSoundWnd::s_CreateWindow(void* pvParam) |
||||||
|
{ |
||||||
|
CSoundWnd* pThis = (CSoundWnd*)pvParam; |
||||||
|
InterlockedIncrement(&pThis->m_refCount); |
||||||
|
pThis->m_hwnd = explorerframe_SHCreateWorkerWindowFunc(s_WndProc, nullptr, 0, 0, nullptr, (LONG_PTR)pThis); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
DWORD CSoundWnd::s_ThreadProc(void* pvParam) |
||||||
|
{ |
||||||
|
CSoundWnd* pThis = (CSoundWnd*)pvParam; |
||||||
|
if (pThis->m_hwnd) |
||||||
|
{ |
||||||
|
MSG Msg; |
||||||
|
while (GetMessageW(&Msg, nullptr, 0, 0)) |
||||||
|
{ |
||||||
|
TranslateMessage(&Msg); |
||||||
|
DispatchMessageW(&Msg); |
||||||
|
} |
||||||
|
} |
||||||
|
pThis->Release(); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL InitSoundWindow() |
||||||
|
{ |
||||||
|
BOOL bSuccess = FALSE; |
||||||
|
CSoundWnd* soundWnd = new CSoundWnd(); |
||||||
|
if (soundWnd) |
||||||
|
{ |
||||||
|
bSuccess = soundWnd->Init(); |
||||||
|
soundWnd->Release(); |
||||||
|
} |
||||||
|
return bSuccess; |
||||||
|
} |
||||||
|
|
||||||
|
void TermSoundWindow() |
||||||
|
{ |
||||||
|
if (g_hwndSound) |
||||||
|
{ |
||||||
|
PostMessageW(g_hwndSound, WM_CLOSE, 0, 0); |
||||||
|
g_hwndSound = nullptr; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT SHPlaySound(LPCWSTR pszSound, DWORD dwFlags) |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
BOOL bDefault = (dwFlags & 1) != 0; |
||||||
|
BOOL bSecondAttempt = FALSE; |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
WCHAR szKey[MAX_PATH]; |
||||||
|
hr = StringCchPrintfW(szKey, MAX_PATH, L"AppEvents\\Schemes\\Apps\\%s\\%s\\.current", bDefault ? L".Default" : L"Explorer", pszSound); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
WCHAR pvData[MAX_PATH]; |
||||||
|
DWORD cbData = sizeof(pvData); |
||||||
|
if (SHGetValueW(HKEY_CURRENT_USER, szKey, nullptr, nullptr, pvData, &cbData) == ERROR_SUCCESS && cbData && pvData[0]) |
||||||
|
hr = PlaySoundW(pszSound, nullptr, (!bDefault ? 0x400000 : 0) | (SND_ASYNC | SND_NODEFAULT | SND_NOSTOP | SND_NOWAIT | SND_ALIAS | SND_SENTRY | SND_SYSTEM)) ? S_OK : S_FALSE; |
||||||
|
} |
||||||
|
if (hr == S_OK || (dwFlags & 2) == 0 || bSecondAttempt) |
||||||
|
break; |
||||||
|
bDefault = !bDefault; |
||||||
|
bSecondAttempt = TRUE; |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
@ -0,0 +1,279 @@ |
|||||||
|
#include "utility.h" |
||||||
|
#include "ImmersiveColor.h" |
||||||
|
|
||||||
|
#include <dcomptypes.h> |
||||||
|
|
||||||
|
#include <wrl/implements.h> |
||||||
|
#include <wrl/wrappers/corewrappers.h> |
||||||
|
#include <wil/result_macros.h> |
||||||
|
|
||||||
|
#pragma region "Enable old taskbar" |
||||||
|
/***
|
||||||
|
Our target is in `CTray::Init()`. It constructs either the Windows 11 or the Windows 10 taskbar based on the result of |
||||||
|
`winrt::WindowsUdk::ApplicationModel::AppExtensions::XamlExtensions::IsExtensionAvailable()`. We can to make the last |
||||||
|
argument of that function be set to false, so that we'll get the Windows 10 taskbar instead of the Windows 11 one that |
||||||
|
gets constructed through `CTray::InitializeTrayUIComponent()`. |
||||||
|
|
||||||
|
Alternatively, we can modify the behavior of `CTray::InitializeTrayUIComponent`. It contains the code to call |
||||||
|
`TrayUI_CreateInstance()` that resides in `Taskbar.dll` (checked through HKLM\SOFTWARE\Classes\CLSID\<the CLSID>) which |
||||||
|
is a copy of the Windows 10 taskbar code but modified over the time to support the Windows 11 taskbar. We see that it |
||||||
|
calls `CoCreateInstance` to get an `ITrayUIComponent` interface to an instance of `TrayUIComponent`. We hook that |
||||||
|
function to make it return our own custom `ITrayUIComponent` instance. Our `ITrayUIComponent::InitializeWithTray()` |
||||||
|
function calls `TrayUI_CreateInstance()` of `explorer.exe` that is also called when the last argument of |
||||||
|
`IsExtensionAvailable()` after the call is false. |
||||||
|
|
||||||
|
This way, we can get the Windows 10 taskbar which resides in explorer.exe without hooking LoadLibraryExW() in order to |
||||||
|
perform our initial method which has been known to be inconsistent on some systems. (Thanks feature flags!) |
||||||
|
***/ |
||||||
|
|
||||||
|
MIDL_INTERFACE("27775f88-01d3-46ec-a1c1-64b4c09b211b") |
||||||
|
ITrayUIComponent : IUnknown |
||||||
|
{ |
||||||
|
virtual HRESULT STDMETHODCALLTYPE InitializeWithTray(ITrayUIHost* host, ITrayUI** result) = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
class EPTrayUIComponent : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, ITrayUIComponent> |
||||||
|
{ |
||||||
|
public: |
||||||
|
STDMETHODIMP InitializeWithTray(ITrayUIHost* host, ITrayUI** result) override |
||||||
|
{ |
||||||
|
RETURN_IF_FAILED(explorer_TrayUI_CreateInstanceFunc(host, IID_ITrayUI, (void**)result)); |
||||||
|
|
||||||
|
// Fix delayed logon when using the Windows 10 taskbar on Windows 11 21H2.
|
||||||
|
// Not present in 51, present in 120 onwards. 65, 71, and 100 are not checked yet.
|
||||||
|
if (global_rovi.dwBuildNumber == 22000 && global_ubr >= 120) |
||||||
|
{ |
||||||
|
void** vtable = *(void***)host; |
||||||
|
void (*FireDesktopSwitchIfReady)(ITrayUIHost*, int) = (decltype(FireDesktopSwitchIfReady))vtable[78]; |
||||||
|
FireDesktopSwitchIfReady(host, 8); |
||||||
|
} |
||||||
|
|
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
extern "C" HRESULT EPTrayUIComponent_CreateInstance(REFIID riid, void** ppvObject) |
||||||
|
{ |
||||||
|
Microsoft::WRL::ComPtr<EPTrayUIComponent> instance; |
||||||
|
RETURN_IF_FAILED(Microsoft::WRL::MakeAndInitialize<EPTrayUIComponent>(&instance)); |
||||||
|
RETURN_HR(instance.CopyTo(riid, ppvObject)); |
||||||
|
} |
||||||
|
#pragma endregion |
||||||
|
|
||||||
|
#pragma region "Restore acrylic background" |
||||||
|
typedef enum WINDOWCOMPOSITIONATTRIB |
||||||
|
{ |
||||||
|
WCA_UNDEFINED = 0, |
||||||
|
WCA_NCRENDERING_ENABLED = 1, |
||||||
|
WCA_NCRENDERING_POLICY = 2, |
||||||
|
WCA_TRANSITIONS_FORCEDISABLED = 3, |
||||||
|
WCA_ALLOW_NCPAINT = 4, |
||||||
|
WCA_CAPTION_BUTTON_BOUNDS = 5, |
||||||
|
WCA_NONCLIENT_RTL_LAYOUT = 6, |
||||||
|
WCA_FORCE_ICONIC_REPRESENTATION = 7, |
||||||
|
WCA_EXTENDED_FRAME_BOUNDS = 8, |
||||||
|
WCA_HAS_ICONIC_BITMAP = 9, |
||||||
|
WCA_THEME_ATTRIBUTES = 10, |
||||||
|
WCA_NCRENDERING_EXILED = 11, |
||||||
|
WCA_NCADORNMENTINFO = 12, |
||||||
|
WCA_EXCLUDED_FROM_LIVEPREVIEW = 13, |
||||||
|
WCA_VIDEO_OVERLAY_ACTIVE = 14, |
||||||
|
WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15, |
||||||
|
WCA_DISALLOW_PEEK = 16, |
||||||
|
WCA_CLOAK = 17, |
||||||
|
WCA_CLOAKED = 18, |
||||||
|
WCA_ACCENT_POLICY = 19, |
||||||
|
WCA_FREEZE_REPRESENTATION = 20, |
||||||
|
WCA_EVER_UNCLOAKED = 21, |
||||||
|
WCA_VISUAL_OWNER = 22, |
||||||
|
WCA_HOLOGRAPHIC = 23, |
||||||
|
WCA_EXCLUDED_FROM_DDA = 24, |
||||||
|
WCA_PASSIVEUPDATEMODE = 25, |
||||||
|
WCA_USEDARKMODECOLORS = 26, |
||||||
|
WCA_CORNER_STYLE = 27, |
||||||
|
WCA_PART_COLOR = 28, |
||||||
|
WCA_DISABLE_MOVESIZE_FEEDBACK = 29, |
||||||
|
WCA_SYSTEMBACKDROP_TYPE = 30, |
||||||
|
WCA_SET_TAGGED_WINDOW_RECT = 31, |
||||||
|
WCA_CLEAR_TAGGED_WINDOW_RECT = 32, |
||||||
|
WCA_LAST = 33, |
||||||
|
} WINDOWCOMPOSITIONATTRIB; |
||||||
|
|
||||||
|
typedef struct tagWINDOWCOMPOSITIONATTRIBDATA |
||||||
|
{ |
||||||
|
WINDOWCOMPOSITIONATTRIB Attrib; |
||||||
|
void* pvData; |
||||||
|
unsigned int cbData; |
||||||
|
} WINDOWCOMPOSITIONATTRIBDATA; |
||||||
|
|
||||||
|
typedef enum ACCENT_STATE |
||||||
|
{ |
||||||
|
ACCENT_DISABLED = 0, |
||||||
|
ACCENT_ENABLE_GRADIENT = 1, |
||||||
|
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2, |
||||||
|
ACCENT_ENABLE_BLURBEHIND = 3, |
||||||
|
ACCENT_ENABLE_ACRYLICBLURBEHIND = 4, |
||||||
|
ACCENT_ENABLE_HOSTBACKDROP = 5, |
||||||
|
ACCENT_INVALID_STATE = 6, |
||||||
|
} ACCENT_STATE; |
||||||
|
|
||||||
|
typedef struct ACCENT_POLICY |
||||||
|
{ |
||||||
|
ACCENT_STATE AccentState; |
||||||
|
unsigned int AccentFlags; |
||||||
|
unsigned long GradientColor; |
||||||
|
long AnimationId; |
||||||
|
} ACCENT_POLICY; |
||||||
|
|
||||||
|
namespace ABI::WindowsUdk::UI::Themes |
||||||
|
{ |
||||||
|
enum class VisualTheme |
||||||
|
{ |
||||||
|
Dark = 0, |
||||||
|
Light = 1, |
||||||
|
HighContrastBlack = 2, |
||||||
|
HighContrastWhite = 3, |
||||||
|
}; |
||||||
|
|
||||||
|
MIDL_INTERFACE("8f0a6c35-72ca-5f4a-a5fb-1a731ec8b514") |
||||||
|
ISystemVisualThemeStatics : IInspectable |
||||||
|
{ |
||||||
|
virtual HRESULT STDMETHODCALLTYPE get_Current(VisualTheme* value) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE add_Changed(void* handler, EventRegistrationToken* token) = 0; |
||||||
|
virtual HRESULT STDMETHODCALLTYPE remove_Changed(EventRegistrationToken token) = 0; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
struct TaskbarTheme |
||||||
|
{ |
||||||
|
bool bColorPrevalence; |
||||||
|
bool bEnableTransparency; |
||||||
|
ABI::WindowsUdk::UI::Themes::VisualTheme visualTheme; |
||||||
|
|
||||||
|
bool IsHighContrast() const |
||||||
|
{ |
||||||
|
using namespace ABI::WindowsUdk::UI::Themes; |
||||||
|
return visualTheme == VisualTheme::HighContrastBlack || visualTheme == VisualTheme::HighContrastWhite; |
||||||
|
} |
||||||
|
|
||||||
|
bool IsDark() const |
||||||
|
{ |
||||||
|
using namespace ABI::WindowsUdk::UI::Themes; |
||||||
|
return visualTheme == VisualTheme::Dark || visualTheme == VisualTheme::HighContrastBlack; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
enum D3D_FEATURE_LEVEL : int; |
||||||
|
|
||||||
|
struct COMPOSITION_CAPABILITY_INFO |
||||||
|
{ |
||||||
|
D3D_FEATURE_LEVEL minSafeFeatureLevel; |
||||||
|
D3D_FEATURE_LEVEL maxHardwareFeatureLevel; |
||||||
|
int usingSoftwareDevice; |
||||||
|
int areEffectsSupported; |
||||||
|
int boostCompositorClockSupported; // Valid on 11 21H2+
|
||||||
|
}; |
||||||
|
|
||||||
|
typedef NTSTATUS (*NtDCompositionGetFrameStatistics_t)(DCOMPOSITION_FRAME_STATISTICS*, COMPOSITION_CAPABILITY_INFO*); |
||||||
|
|
||||||
|
inline NTSTATUS NtDCompositionGetFrameStatistics(DCOMPOSITION_FRAME_STATISTICS* pStatistics, COMPOSITION_CAPABILITY_INFO* pCapabilities) |
||||||
|
{ |
||||||
|
static NtDCompositionGetFrameStatistics_t f = nullptr; |
||||||
|
if (!f) |
||||||
|
{ |
||||||
|
HMODULE h = GetModuleHandleW(L"dcomp.dll"); |
||||||
|
if (h) |
||||||
|
f = (NtDCompositionGetFrameStatistics_t)GetProcAddress(h, MAKEINTRESOURCEA(1046)); |
||||||
|
} |
||||||
|
return f ? f(pStatistics, pCapabilities) : (NTSTATUS)0xC0000002L; // STATUS_NOT_IMPLEMENTED
|
||||||
|
} |
||||||
|
|
||||||
|
bool ShouldApplyBlur() |
||||||
|
{ |
||||||
|
DCOMPOSITION_FRAME_STATISTICS statistics; |
||||||
|
COMPOSITION_CAPABILITY_INFO capabilities; |
||||||
|
return NtDCompositionGetFrameStatistics(&statistics, &capabilities) >= 0 && capabilities.areEffectsSupported && !capabilities.usingSoftwareDevice; |
||||||
|
} |
||||||
|
|
||||||
|
TaskbarTheme GetTaskbarTheme() |
||||||
|
{ |
||||||
|
TaskbarTheme rv; |
||||||
|
// rv.visualTheme = winrt::WindowsUdk::UI::Themes::SystemVisualTheme::Current();
|
||||||
|
|
||||||
|
rv.visualTheme = ABI::WindowsUdk::UI::Themes::VisualTheme::Light; |
||||||
|
Microsoft::WRL::ComPtr<ABI::WindowsUdk::UI::Themes::ISystemVisualThemeStatics> systemVisualTheme; |
||||||
|
HRESULT hr = RoGetActivationFactory( |
||||||
|
Microsoft::WRL::Wrappers::HStringReference(L"WindowsUdk.UI.Themes.SystemVisualTheme").Get(), |
||||||
|
IID_PPV_ARGS(&systemVisualTheme) |
||||||
|
); |
||||||
|
if (SUCCEEDED_LOG(hr)) |
||||||
|
{ |
||||||
|
ABI::WindowsUdk::UI::Themes::VisualTheme theme; |
||||||
|
if (SUCCEEDED_LOG(systemVisualTheme->get_Current(&theme))) |
||||||
|
{ |
||||||
|
rv.visualTheme = theme; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
DWORD bColorPrevalence = 0; |
||||||
|
rv.bColorPrevalence = |
||||||
|
SUCCEEDED(SHRegGetDWORD( |
||||||
|
HKEY_CURRENT_USER, |
||||||
|
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", |
||||||
|
L"ColorPrevalence", |
||||||
|
&bColorPrevalence |
||||||
|
)) && bColorPrevalence; |
||||||
|
|
||||||
|
bool bApplyBlur = ShouldApplyBlur(); |
||||||
|
DWORD bEnableTransparency; |
||||||
|
rv.bEnableTransparency = !rv.IsHighContrast() && bApplyBlur |
||||||
|
&& SUCCEEDED(SHRegGetDWORD( |
||||||
|
HKEY_CURRENT_USER, |
||||||
|
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", |
||||||
|
L"EnableTransparency", |
||||||
|
&bEnableTransparency |
||||||
|
)) && bEnableTransparency; |
||||||
|
|
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
DWORD GetTaskbarColor() |
||||||
|
{ |
||||||
|
TaskbarTheme tt = GetTaskbarTheme(); |
||||||
|
|
||||||
|
if (tt.IsHighContrast()) |
||||||
|
return GetSysColor(COLOR_WINDOW); |
||||||
|
|
||||||
|
if (tt.bColorPrevalence) |
||||||
|
{ |
||||||
|
DWORD result = CImmersiveColor::GetColor(tt.IsDark() ? IMCLR_SystemAccentDark2 : IMCLR_SystemAccentLight2); |
||||||
|
if (tt.bEnableTransparency) |
||||||
|
return (result & 0xFFFFFF) | 0xCC000000; |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
if (tt.IsDark()) |
||||||
|
return tt.bEnableTransparency ? 0x80202020 : 0xFF202020; |
||||||
|
|
||||||
|
return tt.bEnableTransparency ? 0xF3F3F3 : 0xFFF3F3F3; |
||||||
|
} |
||||||
|
|
||||||
|
extern "C" void UpdateWindowAccentProperties_PatchAttribData(WINDOWCOMPOSITIONATTRIBDATA* pAttrData) |
||||||
|
{ |
||||||
|
ACCENT_POLICY* pAccentPolicy = (ACCENT_POLICY*)pAttrData->pvData; |
||||||
|
if (false) // STTest makes it like this:
|
||||||
|
{ |
||||||
|
pAccentPolicy->AccentState = ACCENT_ENABLE_TRANSPARENTGRADIENT; |
||||||
|
pAccentPolicy->GradientColor = 0; |
||||||
|
pAccentPolicy->AnimationId = 0; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
pAccentPolicy->AccentState = GetTaskbarTheme().bEnableTransparency ? ACCENT_ENABLE_ACRYLICBLURBEHIND : ACCENT_ENABLE_GRADIENT; |
||||||
|
pAccentPolicy->GradientColor = GetTaskbarColor(); |
||||||
|
pAccentPolicy->AnimationId = 0; |
||||||
|
} |
||||||
|
|
||||||
|
pAccentPolicy->AccentFlags = 0x1 | 0x2 | 0x10; |
||||||
|
} |
||||||
|
#pragma endregion |
||||||
File diff suppressed because it is too large
Load Diff
@ -1,59 +1,66 @@ |
|||||||
#ifndef _H_HOOKING_H_ |
#ifndef _H_HOOKING_H_ |
||||||
#define _H_HOOKING_H_ |
#define _H_HOOKING_H_ |
||||||
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP 0 |
|
||||||
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP 1 |
#ifdef __cplusplus |
||||||
#define HOOK_WITH_FUNCHOOK 0 |
extern "C" |
||||||
#define HOOK_WITH_DETOURS 1 |
{ |
||||||
#define HOW_TO_HOOK HOOK_WITH_FUNCHOOK |
|
||||||
#if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK |
|
||||||
#ifdef _M_ARM64 |
|
||||||
#error Cannot compile for ARM64 using funchook. Change the source to hook with Detours and try again. Compilation aborted. |
|
||||||
#endif |
#endif |
||||||
#include <funchook.h> |
|
||||||
#include <distorm.h> |
#include <KNSoft/SlimDetours/SlimDetours.h> |
||||||
#pragma comment(lib, "funchook.lib") |
|
||||||
#pragma comment(lib, "Psapi.lib") // required by funchook
|
typedef struct funchook funchook_t; |
||||||
#pragma comment(lib, "distorm.lib") |
|
||||||
#elif HOW_TO_HOOK == HOOK_WITH_DETOURS |
inline funchook_t* funchook_create(void) |
||||||
#include <detours.h> |
|
||||||
#pragma comment(lib, "detours.lib") |
|
||||||
void* funchook_create(void) |
|
||||||
{ |
{ |
||||||
return 1; |
return (funchook_t*)1; |
||||||
} |
} |
||||||
int funchook_uninstall( |
|
||||||
void* _this, |
inline int funchook_uninstall( |
||||||
|
funchook_t* _this, |
||||||
int flags |
int flags |
||||||
) |
) |
||||||
{ |
{ |
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
int funchook_destroy(void* _this) |
|
||||||
|
inline int funchook_destroy(funchook_t* _this) |
||||||
{ |
{ |
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
int funchook_prepare( |
|
||||||
void* funchook, |
inline int funchook_prepare( |
||||||
|
funchook_t* funchook, |
||||||
void** target_func, |
void** target_func, |
||||||
void* hook_func |
void* hook_func |
||||||
) |
) |
||||||
{ |
{ |
||||||
DetourTransactionBegin(); |
HRESULT hr = SlimDetoursInlineHook(TRUE, target_func, hook_func); |
||||||
DetourUpdateThread(GetCurrentThread()); |
return SUCCEEDED(hr) ? 0 : hr; |
||||||
DetourAttach(target_func, hook_func); |
|
||||||
return DetourTransactionCommit(); |
|
||||||
} |
} |
||||||
int funchook_install( |
|
||||||
void* funchook, |
inline int funchook_install( |
||||||
|
funchook_t* funchook, |
||||||
int flags |
int flags |
||||||
) |
) |
||||||
{ |
{ |
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} // extern "C"
|
||||||
|
#endif |
||||||
|
|
||||||
#endif |
#endif |
||||||
#if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK |
|
||||||
funchook_t* funchook = 0; |
#define HOOKING_SUCCESS 0 |
||||||
#elif HOW_TO_HOOK == HOOK_WITH_DETOURS |
|
||||||
void* funchook = 0; |
#ifdef __cplusplus |
||||||
|
extern "C" |
||||||
|
{ |
||||||
#endif |
#endif |
||||||
|
|
||||||
|
DECLSPEC_SELECTANY funchook_t* funchook = NULL; |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} // extern "C"
|
||||||
#endif |
#endif |
||||||
@ -0,0 +1,86 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
#include <memsafe.h> |
||||||
|
|
||||||
|
template<typename T> |
||||||
|
class CTContainer_PolicyUnOwned |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(T* p) {} |
||||||
|
}; |
||||||
|
|
||||||
|
template<typename T> |
||||||
|
class CTContainer_PolicyRelease |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(T* p) |
||||||
|
{ |
||||||
|
if (p) |
||||||
|
p->Release(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
class CTContainer_PolicyNewMem |
||||||
|
{ |
||||||
|
public: |
||||||
|
template<typename T> |
||||||
|
static void Destroy(T* p) |
||||||
|
{ |
||||||
|
delete p; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
class CTContainer_PolicyCoTaskMem |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(void* p) |
||||||
|
{ |
||||||
|
CoTaskMemFree(p); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
class CTContainer_PolicyLocalMem |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(void* p) |
||||||
|
{ |
||||||
|
DestroyMem(p); |
||||||
|
} |
||||||
|
|
||||||
|
static BOOL DestroyMem(void* p) |
||||||
|
{ |
||||||
|
return !LocalFree(p); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CTPolicyCoTaskMem : CTContainer_PolicyCoTaskMem |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(void* p) |
||||||
|
{ |
||||||
|
CTContainer_PolicyCoTaskMem::Destroy(p); |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT ReallocArray(T* pv, size_t cItems, T** ppv) |
||||||
|
{ |
||||||
|
return CoReallocArray(pv, cItems, ppv); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CTPolicyLocalMem : CTContainer_PolicyLocalMem |
||||||
|
{ |
||||||
|
public: |
||||||
|
static void Destroy(void* p) |
||||||
|
{ |
||||||
|
DestroyMem(p); |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT ReallocArray(T* pv, size_t cItems, T** ppv) |
||||||
|
{ |
||||||
|
return LocalReallocArray(pv, cItems, ppv); |
||||||
|
} |
||||||
|
}; |
||||||
@ -0,0 +1,906 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <intsafe.h> |
||||||
|
#include <strsafe.h> |
||||||
|
|
||||||
|
#include "ResultUtils.h" |
||||||
|
|
||||||
|
namespace Windows::Internal |
||||||
|
{ |
||||||
|
class ResourceString |
||||||
|
{ |
||||||
|
public: |
||||||
|
static bool FindAndSize(HINSTANCE hInstance, UINT uId, WORD wLanguage, const WCHAR** ppch, WORD* plen) |
||||||
|
{ |
||||||
|
bool fRet = false; |
||||||
|
*ppch = nullptr; |
||||||
|
if (plen) |
||||||
|
*plen = 0; |
||||||
|
HRSRC hRes = FindResourceExW(hInstance, RT_STRING, MAKEINTRESOURCEW((uId >> 4) + 1), wLanguage); |
||||||
|
if (hRes) |
||||||
|
{ |
||||||
|
HGLOBAL hStringSeg = LoadResource(hInstance, hRes); |
||||||
|
if (hStringSeg) |
||||||
|
{ |
||||||
|
WCHAR* pch = (WCHAR*)LockResource(hStringSeg); |
||||||
|
if (pch) |
||||||
|
{ |
||||||
|
for (uId = (char)uId & 0xF; uId; --uId) |
||||||
|
pch += *pch + 1; |
||||||
|
*ppch = *pch ? pch + 1 : L""; |
||||||
|
if (plen) |
||||||
|
*plen = *pch; |
||||||
|
fRet = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return fRet; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename ElementType> |
||||||
|
class CoTaskMemPolicy |
||||||
|
{ |
||||||
|
public: |
||||||
|
static ElementType* Alloc(size_t bytes) |
||||||
|
{ |
||||||
|
return (ElementType*)CoTaskMemAlloc(bytes); |
||||||
|
} |
||||||
|
|
||||||
|
static ElementType* Realloc(ElementType* p, size_t bytes) |
||||||
|
{ |
||||||
|
return (ElementType*)CoTaskMemRealloc(p, bytes); |
||||||
|
} |
||||||
|
|
||||||
|
static void Free(ElementType* p) |
||||||
|
{ |
||||||
|
CoTaskMemFree(p); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename ElementType> |
||||||
|
class LocalMemPolicy |
||||||
|
{ |
||||||
|
public: |
||||||
|
static ElementType* Alloc(size_t bytes) |
||||||
|
{ |
||||||
|
return (ElementType*)LocalAlloc(LMEM_FIXED, bytes); |
||||||
|
} |
||||||
|
|
||||||
|
static ElementType* Realloc(ElementType* p, size_t bytes) |
||||||
|
{ |
||||||
|
return (ElementType*)LocalReAlloc(p, bytes, LMEM_MOVEABLE); |
||||||
|
} |
||||||
|
|
||||||
|
static void Free(ElementType* p) |
||||||
|
{ |
||||||
|
LocalFree(p); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename Allocator> |
||||||
|
class NativeString |
||||||
|
{ |
||||||
|
public: |
||||||
|
NativeString() : _pszStringData(nullptr), _cchStringData(0), _cchStringDataCapacity(0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
NativeString(NativeString&& other) noexcept |
||||||
|
: _pszStringData(other._pszStringData) |
||||||
|
, _cchStringData(other._cchStringData) |
||||||
|
, _cchStringDataCapacity(other._cchStringDataCapacity) |
||||||
|
{ |
||||||
|
other._pszStringData = nullptr; |
||||||
|
other._cchStringData = 0; |
||||||
|
other._cchStringDataCapacity = 0; |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
NativeString(const NativeString&) = delete; |
||||||
|
|
||||||
|
public: |
||||||
|
~NativeString() |
||||||
|
{ |
||||||
|
Free(); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(const WCHAR* psz, const size_t cch) |
||||||
|
{ |
||||||
|
return _Initialize(psz, cch); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(const WCHAR* psz) |
||||||
|
{ |
||||||
|
return _Initialize(psz, s_cchUnknown); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(const NativeString& other) |
||||||
|
{ |
||||||
|
return _Initialize(other._pszStringData, other.GetCount()); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(HINSTANCE hInstance, UINT uId, WORD wLanguage) |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
const WCHAR* rgch; |
||||||
|
WORD cch; |
||||||
|
if (ResourceString::FindAndSize(hInstance, uId, wLanguage, &rgch, &cch)) |
||||||
|
{ |
||||||
|
hr = _Initialize(rgch, cch); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = E_FAIL; |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(HINSTANCE hInstance, UINT uId) |
||||||
|
{ |
||||||
|
return Initialize(hInstance, uId, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(HKEY hKey, const WCHAR* pszValueName) |
||||||
|
{ |
||||||
|
return _InitializeFromRegistry(hKey, pszValueName, true); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Initialize(HKEY hKey, const WCHAR* pszSubKey, const WCHAR* pszValueName) |
||||||
|
{ |
||||||
|
HKEY hkeySub; |
||||||
|
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyExW(hKey, pszSubKey, 0, KEY_READ, &hkeySub)); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = Initialize(hkeySub, pszValueName); |
||||||
|
RegCloseKey(hkeySub); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeNoExpand(HKEY hKey, const WCHAR* pszValueName) |
||||||
|
{ |
||||||
|
return _InitializeFromRegistry(hKey, pszValueName, false); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeNoExpand(HKEY hKey, const WCHAR* pszSubKey, const WCHAR* pszValueName) |
||||||
|
{ |
||||||
|
HKEY hkeySub; |
||||||
|
HRESULT hr = HRESULT_FROM_WIN32(RegOpenKeyExW(hKey, pszSubKey, 0, KEY_READ, &hkeySub)); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = InitializeNoExpand(hkeySub, pszValueName); |
||||||
|
RegCloseKey(hkeySub); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeFormat(const WCHAR* pszFormat, va_list argList) |
||||||
|
{ |
||||||
|
return _InitializeHelper(pszFormat, argList, [](const WCHAR* pszFormat, va_list argList, WCHAR* pszStringData, size_t cchStringData) -> HRESULT |
||||||
|
{ |
||||||
|
_set_errno(0); |
||||||
|
HRESULT hr = StringCchVPrintfW(pszStringData, cchStringData, pszFormat, argList); |
||||||
|
if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) |
||||||
|
{ |
||||||
|
errno_t err; |
||||||
|
_get_errno(&err); |
||||||
|
if (err == EINVAL) |
||||||
|
{ |
||||||
|
hr = E_INVALIDARG; |
||||||
|
} |
||||||
|
} |
||||||
|
return hr; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeFormat(const WCHAR* pszFormat, ...) |
||||||
|
{ |
||||||
|
va_list args; |
||||||
|
va_start(args, pszFormat); |
||||||
|
return InitializeFormat(pszFormat, args); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeResFormat(HINSTANCE hInstance, UINT uId, ...) |
||||||
|
{ |
||||||
|
va_list argList; |
||||||
|
va_start(argList, uId); |
||||||
|
NativeString spszFormat; |
||||||
|
HRESULT hr = spszFormat.Initialize(hInstance, uId); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = InitializeFormat(spszFormat._pszStringData, argList); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InitializeResMessage(HINSTANCE hInstance, UINT uId, ...) |
||||||
|
{ |
||||||
|
va_list argList; |
||||||
|
va_start(argList, uId); |
||||||
|
NativeString spszFormat; |
||||||
|
HRESULT hr = spszFormat.Initialize(hInstance, uId); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = _InitializeHelper(spszFormat._pszStringData, argList, [](const WCHAR* pszFormat, va_list argList, WCHAR* pszStringData, size_t cchStringData) -> HRESULT |
||||||
|
{ |
||||||
|
va_list argListT = argList; |
||||||
|
DWORD cchResult = FormatMessageW(FORMAT_MESSAGE_FROM_STRING, pszFormat, 0, 0, pszStringData, (DWORD)cchStringData, &argListT); |
||||||
|
return ResultFromWin32Bool(cchResult); |
||||||
|
}); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
void Free() |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
} |
||||||
|
|
||||||
|
void Attach(WCHAR* psz) |
||||||
|
{ |
||||||
|
_Attach(psz); |
||||||
|
} |
||||||
|
|
||||||
|
void Attach(WCHAR* psz, const size_t cch) |
||||||
|
{ |
||||||
|
_Attach(psz, cch); |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR* Detach() |
||||||
|
{ |
||||||
|
return _Detach(); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT DetachInitializeIfEmpty(WCHAR** ppsz) |
||||||
|
{ |
||||||
|
*ppsz = nullptr; |
||||||
|
HRESULT hr = S_OK; |
||||||
|
|
||||||
|
if (_pszStringData) |
||||||
|
{ |
||||||
|
hr = Initialize(L""); |
||||||
|
} |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
*ppsz = Detach(); |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR** FreeAndGetAddressOf() |
||||||
|
{ |
||||||
|
return _FreeAndGetAddressOf(); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT CopyTo(WCHAR** ppszDest) const |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
*ppszDest = nullptr; |
||||||
|
if (_pszStringData) |
||||||
|
{ |
||||||
|
NativeString spszT; |
||||||
|
hr = spszT.Initialize(*this); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
*ppszDest = spszT.Detach(); |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT CopyTo(WCHAR* pszDest, size_t cchDest) const |
||||||
|
{ |
||||||
|
if (!_pszStringData) |
||||||
|
{ |
||||||
|
if (cchDest) |
||||||
|
*pszDest = 0; |
||||||
|
return HRESULT_FROM_WIN32(ERROR_NOT_FOUND); |
||||||
|
} |
||||||
|
return StringCchCopyW(pszDest, cchDest, _pszStringData); |
||||||
|
} |
||||||
|
|
||||||
|
const WCHAR* Get() const |
||||||
|
{ |
||||||
|
return _Get(); |
||||||
|
} |
||||||
|
|
||||||
|
const WCHAR* GetNonNull() const |
||||||
|
{ |
||||||
|
return _pszStringData ? _pszStringData : L""; |
||||||
|
} |
||||||
|
|
||||||
|
size_t GetCount() |
||||||
|
{ |
||||||
|
return _GetCount(); |
||||||
|
} |
||||||
|
|
||||||
|
size_t GetCount() const |
||||||
|
{ |
||||||
|
return _GetCount(); |
||||||
|
} |
||||||
|
|
||||||
|
bool IsEmpty() const |
||||||
|
{ |
||||||
|
return _IsEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
bool HasLength() const |
||||||
|
{ |
||||||
|
return !_IsEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinal(const WCHAR* psz, const size_t cch) const |
||||||
|
{ |
||||||
|
return CompareStringOrdinal(GetNonNull(), (int)GetCount(), psz ? psz : L"", psz ? (int)cch : 0, FALSE); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinal(const WCHAR* psz) const |
||||||
|
{ |
||||||
|
return CompareOrdinal(psz, s_cchUnknown); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinal(const NativeString& other) const |
||||||
|
{ |
||||||
|
return CompareOrdinal(other.GetNonNull(), other.GetCount()); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinalIgnoreCase(const WCHAR* psz, const size_t cch) const |
||||||
|
{ |
||||||
|
return CompareStringOrdinal(GetNonNull(), (int)GetCount(), psz ? psz : L"", psz ? (int)cch : 0, TRUE); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinalIgnoreCase(const WCHAR* psz) const |
||||||
|
{ |
||||||
|
return CompareOrdinalIgnoreCase(psz, s_cchUnknown); |
||||||
|
} |
||||||
|
|
||||||
|
int CompareOrdinalIgnoreCase(const NativeString& other) const |
||||||
|
{ |
||||||
|
return CompareOrdinalIgnoreCase(other.GetNonNull(), other.GetCount()); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(const WCHAR* psz, const size_t cch) |
||||||
|
{ |
||||||
|
return _Concat(psz, cch); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(WCHAR c) |
||||||
|
{ |
||||||
|
return _Concat(c); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(const WCHAR* psz) |
||||||
|
{ |
||||||
|
return _Concat(psz, psz ? wcslen(psz) : 0); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(const NativeString& other) |
||||||
|
{ |
||||||
|
return _Concat(other.Get(), other.GetCount()); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(HINSTANCE hInstance, UINT uId, WORD wLanguage) |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
const WCHAR* rgch; |
||||||
|
WORD cch; |
||||||
|
if (ResourceString::FindAndSize(hInstance, uId, wLanguage, &rgch, &cch)) |
||||||
|
{ |
||||||
|
hr = _Concat(rgch, cch); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Concat(HINSTANCE hInstance, UINT uId) |
||||||
|
{ |
||||||
|
return Concat(hInstance, uId, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT ConcatFormat(const WCHAR* pszFormat, va_list argList) |
||||||
|
{ |
||||||
|
if (IsEmpty()) |
||||||
|
{ |
||||||
|
return InitializeFormat(pszFormat, argList); |
||||||
|
} |
||||||
|
NativeString strT; |
||||||
|
HRESULT hr = strT.InitializeFormat(pszFormat, argList); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = Concat(strT); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT ConcatFormat(const WCHAR* pszFormat, ...) |
||||||
|
{ |
||||||
|
va_list argList; |
||||||
|
va_start(argList, pszFormat); |
||||||
|
return ConcatFormat(pszFormat, argList); |
||||||
|
} |
||||||
|
|
||||||
|
bool RemoveAt(size_t iElem, size_t cchElem) |
||||||
|
{ |
||||||
|
return _RemoveAt(iElem, cchElem); |
||||||
|
} |
||||||
|
|
||||||
|
bool TrimStart(const WCHAR* pszTrim) |
||||||
|
{ |
||||||
|
return _TrimStart(pszTrim); |
||||||
|
} |
||||||
|
|
||||||
|
bool TrimEnd(const WCHAR* pszTrim) |
||||||
|
{ |
||||||
|
return _TrimEnd(pszTrim); |
||||||
|
} |
||||||
|
|
||||||
|
inline static const WCHAR* const s_pszTrimWhitespaceCharacterSet = |
||||||
|
L"\u0020" // Space
|
||||||
|
L"\u0009" // Tab
|
||||||
|
L"\u3000" // Ideographic Space
|
||||||
|
L"\u17D2" // Khmer Sign Coeng
|
||||||
|
L"\u0F0B" // Tibetan Mark Intersyllabic Tsheg
|
||||||
|
L"\u1680" // Ogham Space Mark
|
||||||
|
L"\u180E" // Mongolian Vowel Separator
|
||||||
|
; |
||||||
|
|
||||||
|
bool TrimWhitespace() |
||||||
|
{ |
||||||
|
bool fWasCharacterTrimmedEnd = _TrimEnd(s_pszTrimWhitespaceCharacterSet); |
||||||
|
bool fWasCharacterTrimmedStart = _TrimStart(s_pszTrimWhitespaceCharacterSet); |
||||||
|
return fWasCharacterTrimmedStart || fWasCharacterTrimmedEnd; |
||||||
|
} |
||||||
|
|
||||||
|
void ReplaceChars(const WCHAR wcFind, const WCHAR wcReplace) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
for (size_t i = 0; i < _cchStringData; i++) |
||||||
|
{ |
||||||
|
if (_pszStringData[i] == wcFind) |
||||||
|
_pszStringData[i] = wcReplace; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
NativeString& operator=(NativeString&& other) noexcept |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
_pszStringData = other._pszStringData; |
||||||
|
_cchStringData = other._cchStringData; |
||||||
|
_cchStringDataCapacity = other._cchStringDataCapacity; |
||||||
|
other._pszStringData = nullptr; |
||||||
|
other._cchStringData = 0; |
||||||
|
other._cchStringDataCapacity = 0; |
||||||
|
return *this; |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
NativeString& operator=(const NativeString& other) = delete; |
||||||
|
|
||||||
|
public: |
||||||
|
WCHAR** operator&() |
||||||
|
{ |
||||||
|
return FreeAndGetAddressOf(); |
||||||
|
} |
||||||
|
|
||||||
|
/*WCHAR* operator*() const
|
||||||
|
{ |
||||||
|
return Get(); |
||||||
|
}*/ |
||||||
|
|
||||||
|
bool operator==(const WCHAR* pszOther) const |
||||||
|
{ |
||||||
|
return pszOther ? CompareOrdinal(pszOther) == CSTR_EQUAL : !_pszStringData; |
||||||
|
} |
||||||
|
|
||||||
|
bool operator!=(const WCHAR* pszOther) const |
||||||
|
{ |
||||||
|
return !operator==(pszOther); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT AppendMayTruncate(const WCHAR* psz, size_t cchMaxCapacity) |
||||||
|
{ |
||||||
|
return _ConcatMayTruncate(psz, cchMaxCapacity); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT EnsureCapacity(size_t cchDesired) |
||||||
|
{ |
||||||
|
return _EnsureCapacity(cchDesired); |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
void _EnsureCount() |
||||||
|
{ |
||||||
|
if (_cchStringData == s_cchUnknown) |
||||||
|
{ |
||||||
|
_cchStringData = _pszStringData ? wcslen(_pszStringData) : 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _EnsureCapacity(size_t cchDesired) |
||||||
|
{ |
||||||
|
size_t cchCapacityCur; |
||||||
|
HRESULT hr = SizeTAdd(cchDesired, 1, &cchCapacityCur); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
if (_cchStringDataCapacity == s_cchUnknown) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
_cchStringDataCapacity = _pszStringData ? _cchStringData + 1 : 0; |
||||||
|
} |
||||||
|
if (_cchStringDataCapacity == 0) // First allocation
|
||||||
|
{ |
||||||
|
size_t cbDesired; |
||||||
|
hr = SizeTMult(cchCapacityCur, sizeof(WCHAR), &cbDesired); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
WCHAR* pvArrayT = Allocator::Alloc(cbDesired); |
||||||
|
hr = pvArrayT ? S_OK : E_OUTOFMEMORY; |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_cchStringDataCapacity = cchCapacityCur; |
||||||
|
_pszStringData = pvArrayT; |
||||||
|
pvArrayT[0] = 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
else if (cchCapacityCur > _cchStringDataCapacity) // Growing
|
||||||
|
{ |
||||||
|
size_t celemNew; |
||||||
|
hr = SizeTMult(_cchStringDataCapacity, 2, &celemNew); // Double the capacity
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
if (celemNew - _cchStringDataCapacity > 2048) |
||||||
|
celemNew = _cchStringDataCapacity + 2048; // Make sure it doesn't grow too much; TODO Check disassembly
|
||||||
|
if (cchCapacityCur <= celemNew) |
||||||
|
cchCapacityCur = celemNew; |
||||||
|
WCHAR* pvArrayT = Allocator::Realloc(_pszStringData, sizeof(WCHAR) * cchCapacityCur); |
||||||
|
hr = pvArrayT ? S_OK : E_OUTOFMEMORY; |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_cchStringDataCapacity = cchCapacityCur; |
||||||
|
_pszStringData = pvArrayT; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
bool _IsEmpty() const |
||||||
|
{ |
||||||
|
return !_pszStringData || !_pszStringData[0]; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _Initialize(const WCHAR* psz, size_t cch) |
||||||
|
{ |
||||||
|
size_t cchDesired = cch; |
||||||
|
size_t cchStringData; |
||||||
|
HRESULT hr = S_OK; |
||||||
|
if (psz) |
||||||
|
{ |
||||||
|
if (cchDesired == s_cchUnknown) |
||||||
|
{ |
||||||
|
cchDesired = wcslen(psz); |
||||||
|
cchStringData = cchDesired; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
cchStringData = _NativeString_Min<size_t>(cchDesired, wcslen(psz)); // @MOD Prevent double evaluation
|
||||||
|
} |
||||||
|
hr = _EnsureCapacity(cchDesired); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
StringCchCopyNW(_pszStringData, cchDesired + 1, psz, cchStringData); |
||||||
|
_cchStringData = cchStringData; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
HRESULT _InitializeHelper(const WCHAR* pszFormat, va_list argList, const T& callback) |
||||||
|
{ |
||||||
|
HRESULT hr; |
||||||
|
size_t cchCapacityGuess = 32; |
||||||
|
do |
||||||
|
{ |
||||||
|
hr = _EnsureCapacity(cchCapacityGuess); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = callback(pszFormat, argList, _pszStringData, _cchStringDataCapacity); |
||||||
|
if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) |
||||||
|
{ |
||||||
|
size_t cchCapacityT; |
||||||
|
hr = SizeTAdd(_cchStringDataCapacity, 32, &cchCapacityT); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
cchCapacityGuess = cchCapacityT; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
while (SUCCEEDED(hr)); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_cchStringData = s_cchUnknown; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _InitializeFromRegistry(HKEY hKey, const WCHAR* pszValueName, bool fExpand) |
||||||
|
{ |
||||||
|
DWORD dwType; |
||||||
|
DWORD cbT = 0; |
||||||
|
LSTATUS lRes = RegQueryValueExW(hKey, pszValueName, nullptr, &dwType, nullptr, &cbT); |
||||||
|
HRESULT hr = HRESULT_FROM_WIN32(lRes); |
||||||
|
if (SUCCEEDED(hr) && ((dwType != REG_SZ && dwType != REG_EXPAND_SZ) || cbT == 0 || (cbT & 1) != 0)) |
||||||
|
{ |
||||||
|
hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATA); |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR* pszT = nullptr; |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
pszT = Allocator::Alloc(cbT); |
||||||
|
hr = pszT ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
lRes = RegQueryValueExW(hKey, pszValueName, nullptr, &dwType, (LPBYTE)pszT, &cbT); |
||||||
|
hr = HRESULT_FROM_WIN32(lRes); |
||||||
|
} |
||||||
|
|
||||||
|
DWORD cchT = 0; |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
cchT = (cbT / sizeof(WCHAR)) - 1; |
||||||
|
if (dwType == REG_EXPAND_SZ && fExpand) |
||||||
|
{ |
||||||
|
DWORD cchBuffer = ExpandEnvironmentStringsW(pszT, nullptr, 0); |
||||||
|
if (cchBuffer != 0) |
||||||
|
{ |
||||||
|
WCHAR* pszExpand = Allocator::Alloc(sizeof(WCHAR) * cchBuffer); |
||||||
|
hr = pszExpand ? S_OK : E_OUTOFMEMORY; |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
DWORD cchResult = ExpandEnvironmentStringsW(pszT, pszExpand, cchBuffer); |
||||||
|
hr = ResultFromWin32Count(cchResult, cchBuffer); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
Allocator::Free(pszT); |
||||||
|
pszT = pszExpand; |
||||||
|
cchT = cchResult - 1; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
Allocator::Free(pszExpand); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
if (!pszT[cchT]) |
||||||
|
{ |
||||||
|
_Attach(pszT, cchT + 1); |
||||||
|
pszT = nullptr; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATA); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Allocator::Free(pszT); |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
size_t _GetCount() |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
return _cchStringData; |
||||||
|
} |
||||||
|
|
||||||
|
size_t _GetCount() const |
||||||
|
{ |
||||||
|
if (_cchStringData != s_cchUnknown) |
||||||
|
return _cchStringData; |
||||||
|
return _pszStringData ? wcslen(_pszStringData) : 0; |
||||||
|
} |
||||||
|
|
||||||
|
const WCHAR* _Get() const |
||||||
|
{ |
||||||
|
return _pszStringData; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _Concat(const WCHAR c) |
||||||
|
{ |
||||||
|
WCHAR sz[2] = { c, 0 }; |
||||||
|
return _Concat(sz, 1); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _Concat(const WCHAR* psz, const size_t cch) |
||||||
|
{ |
||||||
|
HRESULT hr = S_OK; |
||||||
|
if (psz) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
hr = _EnsureCapacity(cch + _cchStringData); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
StringCchCopyNW(&_pszStringData[_cchStringData], cch + 1, psz, cch); |
||||||
|
_cchStringData += cch; |
||||||
|
} |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _ConcatMayTruncate(const WCHAR* psz, size_t cchMaxCapacity) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
HRESULT hr = S_OK; |
||||||
|
if (cchMaxCapacity > _cchStringData) |
||||||
|
{ |
||||||
|
size_t cchDesired = _NativeString_Min<size_t>(cchMaxCapacity - _cchStringData, wcslen(psz)); // @MOD Prevent double evaluation
|
||||||
|
hr = _Concat(psz, cchDesired); |
||||||
|
} |
||||||
|
else if (cchMaxCapacity < _cchStringData) |
||||||
|
{ |
||||||
|
_cchStringData = cchMaxCapacity; |
||||||
|
_pszStringData[cchMaxCapacity] = 0; |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
bool _RemoveAt(size_t iElem, size_t cchElem) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
|
||||||
|
bool fRet = false; |
||||||
|
|
||||||
|
if (iElem < _cchStringData) |
||||||
|
{ |
||||||
|
cchElem = _NativeString_Min<size_t>(cchElem, _cchStringData - iElem); // @MOD Prevent double evaluation
|
||||||
|
if (cchElem) |
||||||
|
{ |
||||||
|
memmove(&_pszStringData[iElem], &_pszStringData[iElem + cchElem], sizeof(WCHAR) * (_cchStringData - iElem - cchElem)); |
||||||
|
_cchStringData -= cchElem; |
||||||
|
} |
||||||
|
_pszStringData[_cchStringData] = 0; |
||||||
|
fRet = true; |
||||||
|
} |
||||||
|
|
||||||
|
return fRet; |
||||||
|
} |
||||||
|
|
||||||
|
bool _TrimStart(const WCHAR* pszTrim) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
|
||||||
|
bool fNeedsTrimming = false; |
||||||
|
|
||||||
|
size_t cch; |
||||||
|
for (cch = 0; cch < _cchStringData; ++cch) |
||||||
|
{ |
||||||
|
if (!wcschr(pszTrim, _pszStringData[cch])) |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (cch) |
||||||
|
{ |
||||||
|
fNeedsTrimming = true; |
||||||
|
memmove(_pszStringData, &_pszStringData[cch], sizeof(WCHAR) * (_cchStringData - cch) + sizeof(WCHAR)); |
||||||
|
_cchStringData -= cch; |
||||||
|
} |
||||||
|
|
||||||
|
return fNeedsTrimming; |
||||||
|
} |
||||||
|
|
||||||
|
bool _TrimEnd(const WCHAR* pszTrim) |
||||||
|
{ |
||||||
|
_EnsureCount(); |
||||||
|
|
||||||
|
size_t cch; |
||||||
|
for (cch = _cchStringData; cch; --cch) |
||||||
|
{ |
||||||
|
if (!wcschr(pszTrim, _pszStringData[cch - 1])) |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
bool fNeedsTrimming = false; |
||||||
|
|
||||||
|
if (cch != _cchStringData) |
||||||
|
{ |
||||||
|
fNeedsTrimming = true; |
||||||
|
_pszStringData[cch] = 0; |
||||||
|
_cchStringData = cch; |
||||||
|
} |
||||||
|
|
||||||
|
return fNeedsTrimming; |
||||||
|
} |
||||||
|
|
||||||
|
void _Free() |
||||||
|
{ |
||||||
|
if (_pszStringData) |
||||||
|
{ |
||||||
|
Allocator::Free(_pszStringData); |
||||||
|
_pszStringData = nullptr; |
||||||
|
} |
||||||
|
_cchStringData = 0; |
||||||
|
_cchStringDataCapacity = 0; |
||||||
|
} |
||||||
|
|
||||||
|
void _Attach(WCHAR* psz) |
||||||
|
{ |
||||||
|
return _Attach(psz, wcslen(psz) + 1); |
||||||
|
} |
||||||
|
|
||||||
|
void _Attach(WCHAR* psz, const size_t cch) |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
if (psz && cch) |
||||||
|
{ |
||||||
|
_pszStringData = psz; |
||||||
|
_cchStringData = cch - 1; |
||||||
|
_cchStringDataCapacity = cch; |
||||||
|
psz[cch - 1] = 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR* _Detach() |
||||||
|
{ |
||||||
|
WCHAR* pszStringData = _pszStringData; |
||||||
|
_pszStringData = nullptr; |
||||||
|
_cchStringData = 0; |
||||||
|
_cchStringDataCapacity = 0; |
||||||
|
return pszStringData; |
||||||
|
} |
||||||
|
|
||||||
|
WCHAR** _FreeAndGetAddressOf() |
||||||
|
{ |
||||||
|
_Free(); |
||||||
|
_cchStringData = s_cchUnknown; |
||||||
|
_cchStringDataCapacity = s_cchUnknown; |
||||||
|
return &_pszStringData; |
||||||
|
} |
||||||
|
|
||||||
|
static const size_t s_cchUnknown = -1; |
||||||
|
|
||||||
|
WCHAR* _pszStringData; |
||||||
|
size_t _cchStringData; |
||||||
|
size_t _cchStringDataCapacity; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
static FORCEINLINE constexpr const T& (_NativeString_Min)(const T& a, const T& b) |
||||||
|
{ |
||||||
|
return a < b ? a : b; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
typedef Windows::Internal::NativeString<Windows::Internal::CoTaskMemPolicy<WCHAR>> CoTaskMemNativeString; |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <wrl/client.h> |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CRefCountedObject : public IUnknown, public T |
||||||
|
{ |
||||||
|
public: |
||||||
|
template <typename ...TArgs> |
||||||
|
CRefCountedObject(TArgs&& ...args) |
||||||
|
: T(std::forward<TArgs>(args)...) |
||||||
|
, _cRef(0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
virtual ~CRefCountedObject() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject) override |
||||||
|
{ |
||||||
|
*ppvObject = nullptr; |
||||||
|
return E_NOTIMPL; |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP_(ULONG) AddRef() override |
||||||
|
{ |
||||||
|
return InterlockedIncrement(&_cRef); |
||||||
|
} |
||||||
|
|
||||||
|
STDMETHODIMP_(ULONG) Release() override |
||||||
|
{ |
||||||
|
ULONG refCount = InterlockedDecrement(&_cRef); |
||||||
|
if (refCount == 0) |
||||||
|
delete this; |
||||||
|
return refCount; |
||||||
|
} |
||||||
|
|
||||||
|
ULONG _cRef; |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T, typename ...TArgs> |
||||||
|
Microsoft::WRL::ComPtr<CRefCountedObject<T>> CreateRefCountedObj(TArgs&& ...args) |
||||||
|
{ |
||||||
|
return new(std::nothrow) CRefCountedObject<T>(std::forward<TArgs>(args)...); |
||||||
|
} |
||||||
@ -0,0 +1,29 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
inline HRESULT ResultFromWin32(__in DWORD dwErr) |
||||||
|
{ |
||||||
|
return HRESULT_FROM_WIN32(dwErr); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT ResultFromLastError() |
||||||
|
{ |
||||||
|
return ResultFromWin32(GetLastError()); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT ResultFromKnownLastError() |
||||||
|
{ |
||||||
|
HRESULT hr = ResultFromLastError(); |
||||||
|
return (SUCCEEDED(hr) ? E_FAIL : hr); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT ResultFromWin32Bool(BOOL b) |
||||||
|
{ |
||||||
|
return b ? S_OK : ResultFromKnownLastError(); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT ResultFromWin32Count(UINT cchResult, UINT cchBuffer) |
||||||
|
{ |
||||||
|
return cchResult && cchResult <= cchBuffer ? S_OK : ResultFromWin32(ERROR_INSUFFICIENT_BUFFER); |
||||||
|
} |
||||||
@ -0,0 +1,583 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <Windows.h> |
||||||
|
#include <type_traits> |
||||||
|
|
||||||
|
#include "ContainerPolicies.h" |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CSimpleArrayStandardCompareHelper |
||||||
|
{ |
||||||
|
public: |
||||||
|
int Compare(const T& t1, const T& t2) const |
||||||
|
{ |
||||||
|
return t2 == t1 ? 0 : t2 < t1 ? 1 : -1; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
class CSimpleArrayCaseInsensitiveOrdinalStringCompareHelper |
||||||
|
{ |
||||||
|
public: |
||||||
|
int Compare(const WCHAR* psz1, const WCHAR* psz2) const |
||||||
|
{ |
||||||
|
return CompareStringOrdinal(psz1, -1, psz2, -1, TRUE) - CSTR_EQUAL; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CSimpleArrayStandardMergeHelper |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
typename CompareHelper |
||||||
|
> |
||||||
|
class CTSimpleFixedArray |
||||||
|
{ |
||||||
|
public: |
||||||
|
T* _parray; |
||||||
|
size_t _celem; |
||||||
|
|
||||||
|
CTSimpleFixedArray() |
||||||
|
: _parray(nullptr) |
||||||
|
, _celem(0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
size_t GetSize() const { return _celem; } |
||||||
|
|
||||||
|
T& operator[](size_t iElem) { return _parray[iElem]; } |
||||||
|
const T& operator[](size_t iElem) const { return _parray[iElem]; } |
||||||
|
|
||||||
|
HRESULT GetAt(size_t iElem, T& tOut) const |
||||||
|
{ |
||||||
|
HRESULT hr = TYPE_E_OUTOFBOUNDS; |
||||||
|
if (iElem < _celem) |
||||||
|
{ |
||||||
|
tOut = _parray[iElem]; |
||||||
|
hr = S_OK; |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
T* GetData() const { return _parray; } |
||||||
|
T* begin() { return _parray; } |
||||||
|
T* begin() const { return _parray; } |
||||||
|
T* end() { return _parray + _celem; } |
||||||
|
T* end() const { return _parray + _celem; } |
||||||
|
|
||||||
|
HRESULT Find(const T& t, size_t* piElem, size_t iStartAt = 0) const |
||||||
|
{ |
||||||
|
return FindEx(CompareHelper(), t, piElem, iStartAt); |
||||||
|
} |
||||||
|
|
||||||
|
template <typename Comparer> |
||||||
|
HRESULT FindEx(const Comparer& tcompare, const T& t, size_t* piElem, size_t iStartAt = 0) const |
||||||
|
{ |
||||||
|
*piElem = 0; |
||||||
|
for (size_t i = iStartAt; i < _celem; ++i) |
||||||
|
{ |
||||||
|
if (tcompare.Compare(_parray[i], t) == 0) |
||||||
|
{ |
||||||
|
*piElem = i; |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
} |
||||||
|
return TYPE_E_ELEMENTNOTFOUND; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT BinarySearch(const T& t, size_t* piElem) const |
||||||
|
{ |
||||||
|
return BinarySearchEx(CompareHelper(), t, piElem); |
||||||
|
} |
||||||
|
|
||||||
|
template <typename Comparer> |
||||||
|
HRESULT BinarySearchEx(const Comparer& tcompare, const T& t, size_t* piElem) const |
||||||
|
{ |
||||||
|
*piElem = 0; |
||||||
|
|
||||||
|
HRESULT hr = TYPE_E_ELEMENTNOTFOUND; |
||||||
|
|
||||||
|
if (_celem != 0) |
||||||
|
{ |
||||||
|
hr = S_OK; |
||||||
|
|
||||||
|
size_t iLow = 0; |
||||||
|
size_t iHigh = _celem - 1; |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
size_t iMid = (iLow + iHigh) / 2; |
||||||
|
|
||||||
|
int compare = tcompare.Compare(_parray[iMid], t); |
||||||
|
if (compare > 0) |
||||||
|
{ |
||||||
|
if (iMid != 0) |
||||||
|
{ |
||||||
|
iHigh = iMid - 1; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
hr = TYPE_E_ELEMENTNOTFOUND; |
||||||
|
} |
||||||
|
} |
||||||
|
else if (compare < 0) |
||||||
|
{ |
||||||
|
iLow = iMid + 1; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
for (; iMid != 0; --iMid) |
||||||
|
{ |
||||||
|
if (tcompare.Compare(_parray[iMid - 1], t) != 0) |
||||||
|
break; |
||||||
|
} |
||||||
|
*piElem = iMid; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (iHigh < iLow) |
||||||
|
hr = TYPE_E_ELEMENTNOTFOUND; |
||||||
|
|
||||||
|
if (FAILED(hr)) |
||||||
|
{ |
||||||
|
*piElem = compare < 0 ? iLow : iMid; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename TCallback> |
||||||
|
void ForEach(const TCallback& callback) const // @MOD Pass callback by reference
|
||||||
|
{ |
||||||
|
for (size_t iElement = 0; iElement < _celem; ++iElement) |
||||||
|
{ |
||||||
|
callback(iElement, _parray[iElement]); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
size_t MaxSize, |
||||||
|
typename Allocator, |
||||||
|
typename CompareHelper, |
||||||
|
typename MergeHelper = CSimpleArrayStandardMergeHelper<T> |
||||||
|
> |
||||||
|
class CTSimpleArray : public CTSimpleFixedArray<T, CompareHelper> |
||||||
|
{ |
||||||
|
public: |
||||||
|
T* _parrayT; |
||||||
|
size_t _celemCapacity; |
||||||
|
|
||||||
|
CTSimpleArray() |
||||||
|
: CTSimpleFixedArray<T, CompareHelper>() |
||||||
|
, _parrayT(nullptr) |
||||||
|
, _celemCapacity(0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
~CTSimpleArray() |
||||||
|
{ |
||||||
|
RemoveAll(); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Add(const T& t, size_t* piElemInsertedAt = nullptr) |
||||||
|
{ |
||||||
|
return _Add(t, piElemInsertedAt); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Add(T&& t, size_t* piElemInsertedAt = nullptr) |
||||||
|
{ |
||||||
|
return _Add(std::move(t), piElemInsertedAt); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InsertAt(const T& t, size_t iElem) |
||||||
|
{ |
||||||
|
return _InsertAt(t, iElem); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT InsertAt(T&& t, size_t iElem) |
||||||
|
{ |
||||||
|
return _InsertAt(std::move(t), iElem); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT SetAtIndex(size_t iElem, const T& t) |
||||||
|
{ |
||||||
|
return _SetAtIndex(iElem, t); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT SetAtIndex(size_t iElem, T&& t) |
||||||
|
{ |
||||||
|
return _SetAtIndex(iElem, std::move(t)); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Remove(const T& t, size_t* piElemRemovedAt = nullptr) |
||||||
|
{ |
||||||
|
if (piElemRemovedAt) |
||||||
|
*piElemRemovedAt = 0; |
||||||
|
|
||||||
|
size_t iElem; |
||||||
|
HRESULT hr = this->Find(t, &iElem); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = RemoveAt(iElem); |
||||||
|
if (SUCCEEDED(hr) && piElemRemovedAt) |
||||||
|
{ |
||||||
|
*piElemRemovedAt = iElem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT RemoveAt(size_t iElem) |
||||||
|
{ |
||||||
|
if (iElem >= this->_celem) |
||||||
|
return TYPE_E_OUTOFBOUNDS; |
||||||
|
if constexpr (!std::is_trivially_destructible_v<T>) |
||||||
|
this->_parray[iElem].~T(); |
||||||
|
if (iElem != this->_celem - 1) |
||||||
|
memmove(std::addressof(this->_parray[iElem]), std::addressof(this->_parray[iElem + 1]), sizeof(T) * (this->_celem - iElem - 1)); |
||||||
|
--this->_celem; |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
void RemoveAll() |
||||||
|
{ |
||||||
|
if (this->_parray) |
||||||
|
{ |
||||||
|
if constexpr (!std::is_trivially_destructible_v<T>) |
||||||
|
{ |
||||||
|
for (size_t i = 0; i < this->_celem; ++i) |
||||||
|
this->_parray[i].~T(); |
||||||
|
} |
||||||
|
Allocator::Destroy(this->_parray); |
||||||
|
this->_parray = nullptr; |
||||||
|
} |
||||||
|
this->_celem = 0; |
||||||
|
_celemCapacity = 0; |
||||||
|
} |
||||||
|
|
||||||
|
void TransferData(CTSimpleArray* other) |
||||||
|
{ |
||||||
|
RemoveAll(); |
||||||
|
this->_parray = other->_parray; |
||||||
|
this->_celem = other->_celem; |
||||||
|
this->_parrayT = other->_parrayT; |
||||||
|
this->_celemCapacity = other->_celemCapacity; |
||||||
|
other->_parray = nullptr; |
||||||
|
other->_celem = 0; |
||||||
|
other->_parrayT = nullptr; |
||||||
|
other->_celemCapacity = 0; |
||||||
|
} |
||||||
|
|
||||||
|
size_t GetCapacity() const |
||||||
|
{ |
||||||
|
return _celemCapacity; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT Sort() |
||||||
|
{ |
||||||
|
return SortEx(CompareHelper()); |
||||||
|
} |
||||||
|
|
||||||
|
template <typename Comparer> |
||||||
|
HRESULT SortEx(const Comparer& tcompare) |
||||||
|
{ |
||||||
|
HRESULT hr = S_OK; |
||||||
|
|
||||||
|
if (this->_celem > 1) |
||||||
|
{ |
||||||
|
_parrayT = nullptr; |
||||||
|
hr = Allocator::ReallocArray(nullptr, this->_celem / 2, &_parrayT); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_MergeSort(tcompare, 0, this->_celem); |
||||||
|
Allocator::Destroy(_parrayT); |
||||||
|
_parrayT = nullptr; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _EnsureCapacity(size_t celemCapacityDesired, size_t celemMaxCapacity = 4096) |
||||||
|
{ |
||||||
|
HRESULT hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); |
||||||
|
if (celemCapacityDesired > MaxSize) |
||||||
|
return hr; |
||||||
|
|
||||||
|
// If we have enough capacity, we're done
|
||||||
|
hr = S_OK; |
||||||
|
size_t celemCapacityCur = _celemCapacity; |
||||||
|
if (celemCapacityDesired <= celemCapacityCur) |
||||||
|
return hr; |
||||||
|
|
||||||
|
// Double the capacity
|
||||||
|
size_t celemCapacityT; |
||||||
|
hr = SizeTMult(celemCapacityCur, 2, &celemCapacityT); |
||||||
|
if (FAILED(hr)) |
||||||
|
return hr; |
||||||
|
|
||||||
|
// Make sure we don't grow too much
|
||||||
|
celemCapacityT = celemCapacityT - celemCapacityCur > celemMaxCapacity ? celemCapacityCur + celemMaxCapacity : celemCapacityT; |
||||||
|
|
||||||
|
// Cap at desired capacity and max capacity
|
||||||
|
celemCapacityT = celemCapacityDesired > celemCapacityT || celemCapacityT <= MaxSize ? max(celemCapacityDesired, celemCapacityT) : MaxSize; |
||||||
|
|
||||||
|
// Realloc
|
||||||
|
T* pvArrayT; |
||||||
|
hr = Allocator::ReallocArray(this->_parray, celemCapacityT, &pvArrayT); |
||||||
|
if (FAILED(hr)) |
||||||
|
return hr; |
||||||
|
|
||||||
|
_celemCapacity = celemCapacityT; |
||||||
|
this->_parray = pvArrayT; |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT _MakeRoomAt(size_t iElem) |
||||||
|
{ |
||||||
|
HRESULT hr = S_OK; |
||||||
|
|
||||||
|
size_t cElemGrowTo = max(this->_celem, iElem) + 1; |
||||||
|
if (cElemGrowTo > _celemCapacity) |
||||||
|
{ |
||||||
|
hr = _EnsureCapacity(cElemGrowTo); |
||||||
|
} |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
if (iElem < this->_celem) |
||||||
|
memmove(std::addressof(this->_parray[iElem + 1]), std::addressof(this->_parray[iElem]), sizeof(T) * (this->_celem - iElem)); |
||||||
|
this->_celem = cElemGrowTo; |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename ArgType> |
||||||
|
void _InternalSetAtIndex(size_t iElem, ArgType&& t) |
||||||
|
{ |
||||||
|
T* newPos = std::addressof(this->_parray[iElem]); |
||||||
|
if (newPos) |
||||||
|
new(newPos) T(std::forward<ArgType>(t)); |
||||||
|
} |
||||||
|
|
||||||
|
template <typename ArgType> |
||||||
|
HRESULT _Add(ArgType&& t, size_t* piElemInsertedAt) |
||||||
|
{ |
||||||
|
if (piElemInsertedAt) |
||||||
|
*piElemInsertedAt = 0; |
||||||
|
|
||||||
|
HRESULT hr = S_OK; |
||||||
|
|
||||||
|
if (this->_celem == _celemCapacity) |
||||||
|
{ |
||||||
|
hr = _EnsureCapacity(_celemCapacity + 1); |
||||||
|
} |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_InternalSetAtIndex(this->_celem++, std::forward<ArgType>(t)); |
||||||
|
if (piElemInsertedAt) |
||||||
|
*piElemInsertedAt = this->_celem - 1; |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename ArgType> |
||||||
|
HRESULT _InsertAt(ArgType&& t, size_t iElem) |
||||||
|
{ |
||||||
|
HRESULT hr = _MakeRoomAt(iElem); |
||||||
|
|
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
_InternalSetAtIndex(iElem, std::forward<ArgType>(t)); |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename ArgType> |
||||||
|
HRESULT _SetAtIndex(size_t iElem, ArgType&& t) |
||||||
|
{ |
||||||
|
HRESULT hr = TYPE_E_OUTOFBOUNDS; |
||||||
|
|
||||||
|
if (iElem < this->_celem) |
||||||
|
{ |
||||||
|
_InternalSetAtIndex(iElem, std::forward<ArgType>(t)); |
||||||
|
hr = S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename Comparer> |
||||||
|
void _MergeThem(const Comparer& tcompare, size_t iFirst, size_t cElems) |
||||||
|
{ |
||||||
|
size_t cHalf = cElems / 2; |
||||||
|
T* parraySrc = &this->_parray[iFirst]; |
||||||
|
memcpy(_parrayT, parraySrc, sizeof(T) * cHalf); |
||||||
|
|
||||||
|
size_t iIn1 = 0; |
||||||
|
size_t iIn2 = cHalf; |
||||||
|
size_t iOut = 0; |
||||||
|
bool fDone = false; |
||||||
|
while (!fDone) |
||||||
|
{ |
||||||
|
if (tcompare.Compare(_parrayT[iIn1], parraySrc[iIn2]) > 0) |
||||||
|
{ |
||||||
|
memmove(&parraySrc[iOut], &parraySrc[iIn2], sizeof(T)); |
||||||
|
++iOut; |
||||||
|
if (++iIn2 == cElems) |
||||||
|
{ |
||||||
|
memcpy(&parraySrc[iOut], &_parrayT[iIn1], sizeof(T) * (cElems - iOut)); |
||||||
|
fDone = true; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
memmove(&parraySrc[iOut], &_parrayT[iIn1], sizeof(T)); |
||||||
|
++iOut; |
||||||
|
if (++iIn1 == cHalf) |
||||||
|
{ |
||||||
|
fDone = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
template <typename Comparer> |
||||||
|
void _MergeSort(const Comparer& tcompare, size_t iFirst, size_t cElems) |
||||||
|
{ |
||||||
|
if (cElems == 1) |
||||||
|
return; |
||||||
|
|
||||||
|
if (cElems == 2) |
||||||
|
{ |
||||||
|
if (tcompare.Compare(this->_parray[iFirst], this->_parray[iFirst + 1]) > 0) |
||||||
|
{ |
||||||
|
memmove(_parrayT, &this->_parray[iFirst], sizeof(T)); |
||||||
|
memmove(&this->_parray[iFirst], &this->_parray[iFirst + 1], sizeof(T)); |
||||||
|
memmove(&this->_parray[iFirst + 1], _parrayT, sizeof(T)); |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
size_t cHalf = cElems >> 1; |
||||||
|
_MergeSort(tcompare, iFirst, cHalf); |
||||||
|
_MergeSort(tcompare, iFirst + cHalf, cElems - cHalf); |
||||||
|
_MergeThem(tcompare, iFirst, cElems); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
size_t MaxSize = UINT_MAX - 1, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T> |
||||||
|
> |
||||||
|
class CCoSimpleArray : public CTSimpleArray<T, MaxSize, CTPolicyCoTaskMem<T>, CompareHelper> |
||||||
|
{ |
||||||
|
public: |
||||||
|
CCoSimpleArray() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
CCoSimpleArray(CCoSimpleArray&& other) noexcept |
||||||
|
{ |
||||||
|
this->TransferData(&other); |
||||||
|
} |
||||||
|
|
||||||
|
CCoSimpleArray& operator=(CCoSimpleArray&& other) noexcept |
||||||
|
{ |
||||||
|
if (this != &other) |
||||||
|
{ |
||||||
|
this->TransferData(&other); |
||||||
|
} |
||||||
|
return *this; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
size_t MaxSize = UINT_MAX - 1, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T> |
||||||
|
> |
||||||
|
class CLocalSimpleArray : public CTSimpleArray<T, MaxSize, CTPolicyLocalMem<T>, CompareHelper> |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
typename ElementAllocator, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T> |
||||||
|
> |
||||||
|
class CSimplePointerArray : public CCoSimpleArray<T*, UINT_MAX - 1, CompareHelper> |
||||||
|
{ |
||||||
|
public: |
||||||
|
~CSimplePointerArray() |
||||||
|
{ |
||||||
|
RemoveAndReleaseAll(); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT RemoveAndReleaseAt(size_t iElem) |
||||||
|
{ |
||||||
|
T* pT; |
||||||
|
HRESULT hr = this->GetAt(iElem, pT); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = this->RemoveAt(iElem); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
ElementAllocator::Destroy(pT); |
||||||
|
} |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
void RemoveAndReleaseAll() |
||||||
|
{ |
||||||
|
for (size_t i = 0; i < this->_celem; ++i) |
||||||
|
{ |
||||||
|
ElementAllocator::Destroy(this->_parray[i]); |
||||||
|
} |
||||||
|
this->RemoveAll(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T*> |
||||||
|
> |
||||||
|
class CSimplePointerArrayNewMem : public CSimplePointerArray<T, CTContainer_PolicyNewMem, CompareHelper> |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T*> |
||||||
|
> |
||||||
|
class CSimplePointerArrayCoTaskMem : public CSimplePointerArray<T, CTPolicyCoTaskMem<T>, CompareHelper> |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
template < |
||||||
|
typename T, |
||||||
|
typename CompareHelper = CSimpleArrayStandardCompareHelper<T*> |
||||||
|
> |
||||||
|
class CSimplePointerArrayLocalMem : public CSimplePointerArray<T, CTPolicyLocalMem<T>, CompareHelper> |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
class CSimplePointerArrayRelease : public CSimplePointerArray<T, CTContainer_PolicyRelease<T>> |
||||||
|
{ |
||||||
|
}; |
||||||
@ -0,0 +1,720 @@ |
|||||||
|
// Downloaded from:
|
||||||
|
// https://github.com/namealt/winsdk10/blob/d1acc505c51b11a6ceafb0f93c9dc584b8b4a9d3/Include/10.0.16299.0/um/memsafe.h
|
||||||
|
//
|
||||||
|
// Copyright (C) Microsoft. All rights reserved.
|
||||||
|
//
|
||||||
|
#if (_MSC_VER > 1000) |
||||||
|
#pragma once |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef __memsafe_h__ |
||||||
|
#define __memsafe_h__ |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
|
||||||
|
//
|
||||||
|
// Various heap allocation helpers, featuring
|
||||||
|
// - Fully annotated
|
||||||
|
// - HRESULT return values
|
||||||
|
// - Integer overflow checks via intsafe.h
|
||||||
|
// - Type safety via templates (no typecasting required)
|
||||||
|
// - Zero initialization
|
||||||
|
//
|
||||||
|
// CoAllocBytes
|
||||||
|
// CoReallocBytes
|
||||||
|
// CoAllocObject
|
||||||
|
// CoAllocArray
|
||||||
|
// CoReallocArray
|
||||||
|
//
|
||||||
|
// CoAllocString
|
||||||
|
// CoAllocStringLen
|
||||||
|
// CoAllocStringDoubleNullTerminate
|
||||||
|
// CoAllocStringOpt
|
||||||
|
//
|
||||||
|
// LocalAllocBytes
|
||||||
|
// LocalReallocBytes
|
||||||
|
// LocalAllocObject
|
||||||
|
// LocalAllocArray
|
||||||
|
// LocalReallocArray
|
||||||
|
//
|
||||||
|
// LocalAllocString
|
||||||
|
// LocalAllocStringLen
|
||||||
|
// LocalAllocStringDoubleNullTerminate
|
||||||
|
// LocalAllocStringOpt
|
||||||
|
//
|
||||||
|
// HeapAllocBytes
|
||||||
|
// HeapReallocBytes
|
||||||
|
// HeapAllocObject
|
||||||
|
// HeapAllocArray
|
||||||
|
// HeapReallocArray
|
||||||
|
//
|
||||||
|
// HeapAllocString
|
||||||
|
// HeapAllocStringLen
|
||||||
|
// HeapAllocStringDoubleNullTerminate
|
||||||
|
// HeapAllocStringOpt
|
||||||
|
//
|
||||||
|
// GlobalAllocBytes
|
||||||
|
// GlobalReallocBytes
|
||||||
|
// GlobalAllocObject
|
||||||
|
// GlobalAllocArray
|
||||||
|
// GlobalReallocArray
|
||||||
|
//
|
||||||
|
// GlobalAllocString
|
||||||
|
// GlobalAllocStringLen
|
||||||
|
// GlobalAllocStringDoubleNullTerminate
|
||||||
|
// GlobalAllocStringOpt
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <intsafe.h> |
||||||
|
#include <strsafe.h> |
||||||
|
|
||||||
|
// Flag for inhibiting zero-initialization
|
||||||
|
#define NO_ZERO_INIT 0x00000000 |
||||||
|
|
||||||
|
// Templates for isolating T* <--> void* conversions and integer arithmetic
|
||||||
|
|
||||||
|
template <class T, class TAllocPolicy> |
||||||
|
inline HRESULT _AllocBytes(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return TAllocPolicy::Alloc(hHeap, dwFlags, cb, (void**)ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T, class TAllocPolicy> |
||||||
|
inline HRESULT _ReallocBytes(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return TAllocPolicy::Realloc(hHeap, dwFlags, pv, cb, (void**)ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T, class TAllocPolicy> |
||||||
|
inline HRESULT _AllocArray(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
*ppv = NULL; |
||||||
|
size_t cb; |
||||||
|
HRESULT hr = SizeTMult(cItems, sizeof(T), &cb); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = TAllocPolicy::Alloc(hHeap, dwFlags, cb, (void**)ppv); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <class T, class TAllocPolicy> |
||||||
|
inline HRESULT _ReallocArray(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
*ppv = NULL; |
||||||
|
size_t cb; |
||||||
|
HRESULT hr = SizeTMult(cItems, sizeof(T), &cb); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
hr = TAllocPolicy::Realloc(hHeap, dwFlags, pv, cb, (void**)ppv); |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
// Templates for isolating string-specific functionality
|
||||||
|
|
||||||
|
template <class TAllocPolicy> |
||||||
|
inline HRESULT _AllocStringWorker(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_reads_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _In_ size_t cchExtra, _Outptr_result_buffer_(cch+cchExtra) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
*ppsz = NULL; |
||||||
|
size_t cchTotal; |
||||||
|
HRESULT hr = SizeTAdd(cch, cchExtra, &cchTotal); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
// Note that we do not require dwFlags to include the allocator-specific
|
||||||
|
// zero-initialization flag here.
|
||||||
|
hr = _AllocArray<WCHAR,TAllocPolicy>(hHeap, dwFlags, cchTotal, ppsz); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
// The source string may be shorter than cch, so zero-initialize
|
||||||
|
// the entire buffer using STRSAFE_FILL_BEHIND_NULL.
|
||||||
|
//
|
||||||
|
// Note that _AllocStringDoubleNullTerminate relies on
|
||||||
|
// zero-initialization to provide the 2nd NULL terminator.
|
||||||
|
StringCchCopyNExW(*ppsz, cchTotal, pszSource, cch, NULL, NULL, STRSAFE_IGNORE_NULLS | STRSAFE_FILL_BEHIND_NULL); |
||||||
|
} |
||||||
|
} |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
template <class TAllocPolicy> |
||||||
|
inline HRESULT _AllocString(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
// pszSource must be valid (non-NULL)
|
||||||
|
return _AllocStringWorker<TAllocPolicy>(hHeap, dwFlags, pszSource, wcslen(pszSource), 1, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
template <class TAllocPolicy> |
||||||
|
inline HRESULT _AllocStringLen(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_reads_or_z_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
// pszSource is optional (may be NULL)
|
||||||
|
return _AllocStringWorker<TAllocPolicy>(hHeap, dwFlags, pszSource, cch, 1, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
// Takes a single-null terminated string and allocates a double-null terminated string.
|
||||||
|
template <class TAllocPolicy> |
||||||
|
inline HRESULT _AllocStringDoubleNullTerminate(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) |
||||||
|
{ |
||||||
|
// pszSource must be valid (non-NULL)
|
||||||
|
return _AllocStringWorker<TAllocPolicy>(hHeap, dwFlags, pszSource, wcslen(pszSource), 2, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
template <class TAllocPolicy> |
||||||
|
inline HRESULT _AllocStringOpt(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
// pszSource is optional (may be NULL)
|
||||||
|
if (pszSource != NULL) |
||||||
|
{ |
||||||
|
return _AllocString<TAllocPolicy>(hHeap, dwFlags, pszSource, ppsz); |
||||||
|
} |
||||||
|
*ppsz = NULL; |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
#ifndef NO_COALLOC_HELPERS |
||||||
|
|
||||||
|
#include <objbase.h> |
||||||
|
|
||||||
|
// CoTaskMemAlloc does not zero-initialize by default. Define a flag to enable
|
||||||
|
// zero-init behavior.
|
||||||
|
#define CO_MEM_ZERO_INIT 0x00000001 |
||||||
|
|
||||||
|
class CTCoAllocPolicy |
||||||
|
{ |
||||||
|
private: |
||||||
|
#if (NTDDI_VERSION < NTDDI_WIN10_RS1) || defined(COM_SUPPORT_MALLOC_SPIES) |
||||||
|
static size_t _CoTaskMemSize(_In_ _Post_writable_byte_size_(return) void *pv) |
||||||
|
{ |
||||||
|
size_t cb = 0; |
||||||
|
IMalloc *pMalloc; |
||||||
|
if (SUCCEEDED(CoGetMalloc(1, &pMalloc))) // should never fail (static v-table)
|
||||||
|
{ |
||||||
|
// Returns (size_t)-1 if pv is NULL.
|
||||||
|
// Result is indeterminate if pv does not belong to CoTaskMemAlloc.
|
||||||
|
cb = pMalloc->GetSize(pv); |
||||||
|
pMalloc->Release(); |
||||||
|
} |
||||||
|
return cb; |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
public: |
||||||
|
static HRESULT Alloc(_In_opt_ HANDLE /*hHeap*/, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
*ppv = CoTaskMemAlloc(cb); |
||||||
|
if (*ppv) |
||||||
|
{ |
||||||
|
if (dwFlags & CO_MEM_ZERO_INIT) |
||||||
|
{ |
||||||
|
#ifdef COM_SUPPORT_MALLOC_SPIES |
||||||
|
// Zero-initialize the buffer
|
||||||
|
// The actual size might be larger than cb due to spies present.
|
||||||
|
// Initialize to the actual size in case of realloc later,
|
||||||
|
// or there might be an uninitialized gap in between.
|
||||||
|
size_t cbActual = _CoTaskMemSize(*ppv); |
||||||
|
ZeroMemory(*ppv, cbActual); |
||||||
|
#else |
||||||
|
ZeroMemory(*ppv, cb); |
||||||
|
#endif |
||||||
|
} |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
return E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT Realloc(_In_opt_ HANDLE /*hHeap*/, _In_ DWORD dwFlags, _In_opt_ void *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
#if (NTDDI_VERSION < NTDDI_WIN10_RS1) |
||||||
|
size_t cbKeepIntact = 0; |
||||||
|
|
||||||
|
if (pv && (dwFlags & CO_MEM_ZERO_INIT)) |
||||||
|
{ |
||||||
|
// Get the current size, so we know how much to zero-initialize
|
||||||
|
cbKeepIntact = _CoTaskMemSize(pv); |
||||||
|
if (cb < cbKeepIntact) |
||||||
|
{ |
||||||
|
// Shrinking the buffer, only keep the new size
|
||||||
|
cbKeepIntact = cb; |
||||||
|
} |
||||||
|
} |
||||||
|
#else |
||||||
|
// As of Redstone CoTaskMemRealloc always zero-initializes
|
||||||
|
// the tail of the allocation.
|
||||||
|
size_t cbKeepIntact = cb; |
||||||
|
#endif |
||||||
|
|
||||||
|
// If pv is NULL, CoTaskMemRealloc allocates a new block
|
||||||
|
*ppv = CoTaskMemRealloc(pv, cb); |
||||||
|
|
||||||
|
if (*ppv) |
||||||
|
{ |
||||||
|
if (dwFlags & CO_MEM_ZERO_INIT) |
||||||
|
{ |
||||||
|
// Zero-initialize the trailing part of the buffer
|
||||||
|
#ifdef COM_SUPPORT_MALLOC_SPIES |
||||||
|
// The actual size might be larger than cb due to due to spies present.
|
||||||
|
size_t cbActual = _CoTaskMemSize(*ppv); |
||||||
|
#else |
||||||
|
size_t cbActual = cb; |
||||||
|
#endif |
||||||
|
if (cbActual > cbKeepIntact) |
||||||
|
{ |
||||||
|
ZeroMemory(((BYTE*)*ppv) + cbKeepIntact, cbActual - cbKeepIntact); |
||||||
|
} |
||||||
|
} |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
return E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// CoTaskMemAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocBytes(_In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTCoAllocPolicy>(NULL, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoReallocBytes(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocBytes<T, CTCoAllocPolicy>(NULL, dwFlags, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocObject(_In_ DWORD dwFlags, _Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTCoAllocPolicy>(NULL, dwFlags, sizeof(T), ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocArray(_In_ DWORD dwFlags, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocArray<T, CTCoAllocPolicy>(NULL, dwFlags, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoReallocArray(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocArray<T, CTCoAllocPolicy>(NULL, dwFlags, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// Zero-initializing CoTaskMemAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocBytes(_In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return CoAllocBytes(CO_MEM_ZERO_INIT, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoReallocBytes(_In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return CoReallocBytes(CO_MEM_ZERO_INIT, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocObject(_Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return CoAllocObject(CO_MEM_ZERO_INIT, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoAllocArray(_In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return CoAllocArray(CO_MEM_ZERO_INIT, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT CoReallocArray(_In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return CoReallocArray(CO_MEM_ZERO_INIT, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// CoTaskMemAlloc string helpers
|
||||||
|
|
||||||
|
inline HRESULT CoAllocString(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocString<CTCoAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT CoAllocStringLen( _In_reads_or_z_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringLen<CTCoAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, cch, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT CoAllocStringDoubleNullTerminate(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringDoubleNullTerminate<CTCoAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT CoAllocStringOpt(_In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringOpt<CTCoAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
#endif // NO_COALLOC_HELPERS
|
||||||
|
|
||||||
|
#ifndef NO_LOCALALLOC_HELPERS |
||||||
|
|
||||||
|
class CTLocalAllocPolicy |
||||||
|
{ |
||||||
|
public: |
||||||
|
static HRESULT Alloc(_In_opt_ HANDLE /*hHeap*/, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
// ignore flags other than zero-init, assume fixed
|
||||||
|
*ppv = LocalAlloc(LMEM_FIXED | (dwFlags & LMEM_ZEROINIT), cb); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT Realloc(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ void *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
if (pv == NULL) |
||||||
|
{ |
||||||
|
return Alloc(hHeap, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// LMEM_MOVEABLE is correct when reallocating LMEM_FIXED buffers
|
||||||
|
*ppv = LocalReAlloc(pv, cb, LMEM_MOVEABLE | (dwFlags & LMEM_ZEROINIT)); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// LocalAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocBytes(_In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTLocalAllocPolicy>(NULL, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalReallocBytes(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocBytes<T, CTLocalAllocPolicy>(NULL, dwFlags, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocObject(_In_ DWORD dwFlags, _Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTLocalAllocPolicy>(NULL, dwFlags, sizeof(T), ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocArray(_In_ DWORD dwFlags, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocArray<T, CTLocalAllocPolicy>(NULL, dwFlags, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalReallocArray(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocArray<T, CTLocalAllocPolicy>(NULL, dwFlags, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// Zero-initializing LocalAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocBytes(_In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return LocalAllocBytes(LMEM_ZEROINIT, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalReallocBytes(_In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return LocalReallocBytes(LMEM_ZEROINIT, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocObject(_Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return LocalAllocObject(LMEM_ZEROINIT, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalAllocArray(_In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return LocalAllocArray(LMEM_ZEROINIT, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT LocalReallocArray(_In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return LocalReallocArray(LMEM_ZEROINIT, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// LocalAlloc string helpers
|
||||||
|
|
||||||
|
inline HRESULT LocalAllocString(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocString<CTLocalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT LocalAllocStringLen( _In_reads_or_z_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringLen<CTLocalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, cch, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT LocalAllocStringDoubleNullTerminate(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) //todo sal 00?
|
||||||
|
{ |
||||||
|
return _AllocStringDoubleNullTerminate<CTLocalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT LocalAllocStringOpt(_In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringOpt<CTLocalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
#endif // NO_LOCALALLOC_HELPERS
|
||||||
|
|
||||||
|
#ifndef NO_HEAPALLOC_HELPERS |
||||||
|
|
||||||
|
class CTHeapAllocPolicy |
||||||
|
{ |
||||||
|
public: |
||||||
|
static HRESULT Alloc(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
*ppv = HeapAlloc(hHeap, dwFlags, cb); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT Realloc(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ void *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
if (pv == NULL) |
||||||
|
{ |
||||||
|
return Alloc(hHeap, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
*ppv = HeapReAlloc(hHeap, dwFlags, pv, cb); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// HeapAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocBytes(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTHeapAllocPolicy>(hHeap, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapReallocBytes(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocBytes<T, CTHeapAllocPolicy>(hHeap, dwFlags, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocObject(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTHeapAllocPolicy>(hHeap, dwFlags, sizeof(T), ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocArray(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocArray<T, CTHeapAllocPolicy>(hHeap, dwFlags, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapReallocArray(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocArray<T, CTHeapAllocPolicy>(hHeap, dwFlags, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// Zero-initializing HeapAlloc helpers (process heap)
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocBytes(_In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return HeapAllocBytes(GetProcessHeap(), HEAP_ZERO_MEMORY, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapReallocBytes(_In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return HeapReallocBytes(GetProcessHeap(), HEAP_ZERO_MEMORY, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocObject(_Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return HeapAllocObject(GetProcessHeap(), HEAP_ZERO_MEMORY, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapAllocArray(_In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return HeapAllocArray(GetProcessHeap(), HEAP_ZERO_MEMORY, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT HeapReallocArray(_In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return HeapReallocArray(GetProcessHeap(), HEAP_ZERO_MEMORY, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// HeapAlloc string helpers
|
||||||
|
|
||||||
|
inline HRESULT HeapAllocString(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocString<CTHeapAllocPolicy>(hHeap, dwFlags, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringLen(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_reads_or_z_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringLen<CTHeapAllocPolicy>(hHeap, dwFlags, pszSource, cch, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringDoubleNullTerminate(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringDoubleNullTerminate<CTHeapAllocPolicy>(hHeap, dwFlags, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringOpt(_In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringOpt<CTHeapAllocPolicy>(hHeap, dwFlags, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
// HeapAlloc string helpers (process heap)
|
||||||
|
|
||||||
|
inline HRESULT HeapAllocString(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return HeapAllocString(GetProcessHeap(), NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringLen(_In_reads_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return HeapAllocStringLen(GetProcessHeap(), NO_ZERO_INIT, pszSource, cch, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringDoubleNullTerminate(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) |
||||||
|
{ |
||||||
|
return HeapAllocStringDoubleNullTerminate(GetProcessHeap(), NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT HeapAllocStringOpt(_In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return HeapAllocStringOpt(GetProcessHeap(), NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
#endif // NO_HEAPALLOC_HELPERS
|
||||||
|
|
||||||
|
#ifndef NO_GLOBALALLOC_HELPERS |
||||||
|
|
||||||
|
class CTGlobalAllocPolicy |
||||||
|
{ |
||||||
|
public: |
||||||
|
static HRESULT Alloc(_In_opt_ HANDLE /*hHeap*/, _In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
// ignore flags other than zero-init, assume fixed
|
||||||
|
*ppv = GlobalAlloc(GMEM_FIXED | (dwFlags & GMEM_ZEROINIT), cb); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
|
||||||
|
static HRESULT Realloc(_In_opt_ HANDLE hHeap, _In_ DWORD dwFlags, _In_opt_ void *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) void **ppv) |
||||||
|
{ |
||||||
|
if (pv == NULL) |
||||||
|
{ |
||||||
|
return Alloc(hHeap, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// GMEM_MOVEABLE is correct when reallocating GMEM_FIXED buffers
|
||||||
|
*ppv = GlobalReAlloc(pv, cb, GMEM_MOVEABLE | (dwFlags & GMEM_ZEROINIT)); |
||||||
|
return (*ppv) ? S_OK : E_OUTOFMEMORY; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// GlobalAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocBytes(_In_ DWORD dwFlags, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTGlobalAllocPolicy>(NULL, dwFlags, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalReallocBytes(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocBytes<T, CTGlobalAllocPolicy>(NULL, dwFlags, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocObject(_In_ DWORD dwFlags, _Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocBytes<T, CTGlobalAllocPolicy>(NULL, dwFlags, sizeof(T), ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocArray(_In_ DWORD dwFlags, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _AllocArray<T, CTGlobalAllocPolicy>(NULL, dwFlags, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalReallocArray(_In_ DWORD dwFlags, _In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return _ReallocArray<T, CTGlobalAllocPolicy>(NULL, dwFlags, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// Zero-initializing GlobalAlloc helpers
|
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocBytes(_In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return GlobalAllocBytes<T>(GMEM_ZEROINIT, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalReallocBytes(_In_opt_ T *pv, _In_ size_t cb, _Outptr_result_bytebuffer_(cb) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return GlobalReallocBytes<T>(GMEM_ZEROINIT, pv, cb, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocObject(_Outptr_result_buffer_(1) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return GlobalAllocObject<T>(GMEM_ZEROINIT, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalAllocArray(_In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return GlobalAllocArray<T>(GMEM_ZEROINIT, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
template <class T> |
||||||
|
inline HRESULT GlobalReallocArray(_In_opt_ T *pv, _In_ size_t cItems, _Outptr_result_buffer_(cItems) _On_failure_(_Post_satisfies_(*ppv == 0)) T **ppv) |
||||||
|
{ |
||||||
|
return GlobalReallocArray<T>(GMEM_ZEROINIT, pv, cItems, ppv); |
||||||
|
} |
||||||
|
|
||||||
|
// GlobalAlloc string helpers
|
||||||
|
|
||||||
|
inline HRESULT GlobalAllocString(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocString<CTGlobalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT GlobalAllocStringLen( _In_reads_or_z_opt_(cch) PCNZWCH pszSource, _In_ size_t cch, _Outptr_result_buffer_(cch+1) _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringLen<CTGlobalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, cch, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT GlobalAllocStringDoubleNullTerminate(_In_ PCWSTR pszSource, _Outptr_result_nullonfailure_ PZZWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringDoubleNullTerminate<CTGlobalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
inline HRESULT GlobalAllocStringOpt(_In_opt_ PCWSTR pszSource, _Outptr_result_maybenull_ _On_failure_(_Post_satisfies_(*ppsz == 0)) PWSTR *ppsz) |
||||||
|
{ |
||||||
|
return _AllocStringOpt<CTGlobalAllocPolicy>(NULL, NO_ZERO_INIT, pszSource, ppsz); |
||||||
|
} |
||||||
|
|
||||||
|
#endif // NO_GLOBALALLOC_HELPERS
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // __memsafe_h__
|
||||||
|
|
||||||
@ -0,0 +1,5 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<packages> |
||||||
|
<package id="KNSoft.SlimDetours" version="1.1.4-beta" targetFramework="win10.0.22621" /> |
||||||
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.250325.1" targetFramework="native" /> |
||||||
|
</packages> |
||||||
@ -1,669 +0,0 @@ |
|||||||
Windows Registry Editor Version 5.00 |
|
||||||
|
|
||||||
|
|
||||||
;M Settings |
|
||||||
;q |
|
||||||
|
|
||||||
;T Taskbar |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 2 Taskbar style * |
|
||||||
;x 0 Windows 11 (default) |
|
||||||
;x 1 Windows 10 |
|
||||||
"OldTaskbar"=dword:00000001 |
|
||||||
;y More taskbar options in the Settings app 🡕 |
|
||||||
;ms-settings:taskbar |
|
||||||
;y Customize notification area icons 🡕 |
|
||||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} |
|
||||||
;y Customize system icons in the notification area 🡕 |
|
||||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 4 Primary taskbar location on screen * |
|
||||||
;x 3 Bottom (default) |
|
||||||
;x 1 Top |
|
||||||
;x 0 Left |
|
||||||
;x 2 Right |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_TaskbarPosition"=dword:00000003 |
|
||||||
;c 4 Secondary taskbar(s) location on screen |
|
||||||
;x 3 Bottom (default) |
|
||||||
;x 1 Top |
|
||||||
;x 0 Left |
|
||||||
;x 2 Right |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_MMTaskbarPosition"=dword:00000003 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 3 Extra button should be |
|
||||||
;x 0 Hidden (default) |
|
||||||
;x 2 Shown and open Cortana |
|
||||||
;x 1 Shown and open Widgets |
|
||||||
"TaskbarDa"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search] |
|
||||||
;b Show Search button |
|
||||||
"SearchboxTaskbarMode"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Task view button |
|
||||||
"ShowTaskViewButton"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Desktop button |
|
||||||
"TaskbarSD"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Automatically hide the taskbar |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_AutoHideTaskbar"=dword:00000000 |
|
||||||
;t The following settings only apply to the Windows 10 taskbar: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 2 Start button style |
|
||||||
;x 0 Windows 10 (default) |
|
||||||
;x 1 Windows 11 |
|
||||||
"OrbStyle"=dword:00000000 |
|
||||||
;c 5 Primary taskbar alignment |
|
||||||
;x 0 At screen edge (default) |
|
||||||
;x 1 Centered |
|
||||||
;x 5 Centered, at screen edge when full |
|
||||||
;x 3 Centered with Start button |
|
||||||
;x 7 Centered with Start button, at screen edge when full |
|
||||||
"OldTaskbarAl"=dword:00000000 |
|
||||||
;c 5 Secondary taskbar(s) alignment |
|
||||||
;x 0 At screen edge (default) |
|
||||||
;x 1 Centered |
|
||||||
;x 5 Centered, at screen edge when full |
|
||||||
;x 3 Centered with Start button |
|
||||||
;x 7 Centered with Start button, at screen edge when full |
|
||||||
"MMOldTaskbarAl"=dword:00000000 |
|
||||||
;c 3 Combine taskbar icons on primary taskbar |
|
||||||
;x 0 Always combine |
|
||||||
;x 1 Combine when taskbar is full |
|
||||||
;x 2 Never combine (default) |
|
||||||
"TaskbarGlomLevel"=dword:00000002 |
|
||||||
;c 3 Combine taskbar icons on secondary taskbar(s) |
|
||||||
;x 0 Always combine |
|
||||||
;x 1 Combine when taskbar is full |
|
||||||
;x 2 Never combine (default) |
|
||||||
"MMTaskbarGlomLevel"=dword:00000002 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 2 Taskbar icon size |
|
||||||
;x 1 Small |
|
||||||
;x 0 Large (default) |
|
||||||
"TaskbarSmallIcons"=dword:00000000 |
|
||||||
;e |
|
||||||
|
|
||||||
|
|
||||||
;T System tray |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Skin taskbar and tray pop-up menus |
|
||||||
"SkinMenus"=dword:00000001 |
|
||||||
;b Center tray icon pop-up menus |
|
||||||
"CenterMenus"=dword:00000001 |
|
||||||
;b Flyout behavior for tray icon pop-up menus |
|
||||||
"FlyoutMenus"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7] |
|
||||||
;b Show touch keyboard button * |
|
||||||
"TipbandDesiredVisibility"=dword:00000000 |
|
||||||
;t The following settings only apply to the Windows 10 taskbar: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;p 2 |
|
||||||
;b Apply Windows 11 style to system tray icons * |
|
||||||
"SkinIcons"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show seconds in the clock |
|
||||||
"ShowSecondsInSystemClock"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Hide Control Center button * |
|
||||||
"HideControlCenterButton"=dword:00000000 |
|
||||||
;a Choosing 'Open Network && Internet settings' when right clicking the |
|
||||||
;c 3 network icon should open: |
|
||||||
;x 0 Network section in the Settings app (default) |
|
||||||
;x 1 Network and Sharing Center in Control Panel |
|
||||||
;x 2 Network Connections in Control Panel |
|
||||||
"ReplaceNetwork"=dword:00000000 |
|
||||||
;q |
|
||||||
;t When clicking a system icon in the Windows 10 taskbar system tray, open: |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network] |
|
||||||
;c 7 Network |
|
||||||
;x 6 Control Center |
|
||||||
;x 5 Windows 11 WiFi flyout |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 2 Windows 8 flyout |
|
||||||
;x 1 Network section in the Settings app |
|
||||||
;x 3 Network and Sharing Center in Control Panel |
|
||||||
;x 4 Network Connections in Control Panel |
|
||||||
"ReplaceVan"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\MTCUVC] |
|
||||||
;c 2 Sound |
|
||||||
;x 1 Windows 10 flyout (default) |
|
||||||
;x 0 Windows 7 flyout |
|
||||||
"EnableMtcUvc"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
|
||||||
;c 3 Clock |
|
||||||
;x 2 Windows 11 flyout |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 1 Windows 7 |
|
||||||
"UseWin32TrayClockExperience"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
|
||||||
;c 2 Battery |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 1 Windows 7 |
|
||||||
"UseWin32BatteryFlyout"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 3 Language switcher * |
|
||||||
;x 0 Windows 11 (default) |
|
||||||
;x 1 Windows 10 (with link to "Language Preferences") |
|
||||||
;x 4 Windows 10 |
|
||||||
"IMEStyle"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T File Explorer |
|
||||||
;e For the settings marked with (**) to work in Open or Save file dialogs as well, register |
|
||||||
;e this utility as shell extension using the option below. |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Using-ExplorerPatcher-as-shell-extension |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;q |
|
||||||
;b Register as shell extension |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000 |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{d93ed569-3b3e-4bff-8355-3c44f6a52bb5}\InprocServer32] |
|
||||||
;d Disable the Windows 11 command bar * |
|
||||||
@="" |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32] |
|
||||||
;d Disable the Windows 11 context menu * |
|
||||||
@="" |
|
||||||
;t The following settings take effect on newly created File Explorer windows: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;i Use immersive menus when displaying Windows 10 context menus ** |
|
||||||
"DisableImmersiveContextMenu"=dword:00000000 |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{056440FD-8568-48e7-A632-72157243B55B}\InprocServer32] |
|
||||||
;d Disable navigation bar ** |
|
||||||
@="" |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1d64637d-31e9-4b06-9124-e83fb178ac6e}\TreatAs] |
|
||||||
;d Disable modern search bar |
|
||||||
@="{64bc32b5-4eec-4de7-972d-bd8bd0324537}" |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Hide search bar completely ** |
|
||||||
"HideExplorerSearchBar"=dword:00000000 |
|
||||||
;c 4 Title bar |
|
||||||
;x 0 Show icon and title (default) |
|
||||||
;x 1 Hide title, show icon |
|
||||||
;x 2 Hide icon, show title |
|
||||||
;x 3 Hide icon and title |
|
||||||
"HideIconAndTitleInExplorer"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 3 Apply Mica effect on these areas |
|
||||||
;x 0 Let File Explorer decide (default) |
|
||||||
;x 1 Title bar, command bar and navigation bar |
|
||||||
;x 2 Nowhere |
|
||||||
"MicaEffectOnTitlebar"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T Start menu |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;z 2 Start menu style |
|
||||||
;x 0 Windows 11 (default) |
|
||||||
;x 1 Windows 10 |
|
||||||
"Start_ShowClassicMode"=dword:00000000 |
|
||||||
;y More Start menu options in the Settings app 🡕 |
|
||||||
;ms-settings:personalization-start |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 2 Position on screen |
|
||||||
;x 0 At screen edge |
|
||||||
;x 1 Center (default) |
|
||||||
"TaskbarAl"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 22 Maximum number of frequent apps to show |
|
||||||
;x 0 None |
|
||||||
;x 1 1 |
|
||||||
;x 2 2 |
|
||||||
;x 3 3 |
|
||||||
;x 4 4 |
|
||||||
;x 5 5 |
|
||||||
;x 6 6 (default) |
|
||||||
;x 7 7 |
|
||||||
;x 8 8 |
|
||||||
;x 9 9 |
|
||||||
;x 10 10 |
|
||||||
;x 11 11 |
|
||||||
;x 12 12 |
|
||||||
;x 13 13 |
|
||||||
;x 14 14 |
|
||||||
;x 15 15 |
|
||||||
;x 16 16 |
|
||||||
;x 17 17 |
|
||||||
;x 18 18 |
|
||||||
;x 19 19 |
|
||||||
;x 20 20 |
|
||||||
;x 99999 Unlimited |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_Start_MaximumFrequentApps"=dword:00000006 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
|
||||||
;a When using multiple displays, open Start on this monitor when invoked using |
|
||||||
;c 10 the keyboard |
|
||||||
;x 1 Primary monitor (default) |
|
||||||
;x 0 Monitor on which the cursor is on |
|
||||||
;x 2 Monitor #2 |
|
||||||
;x 3 Monitor #3 |
|
||||||
;x 4 Monitor #4 |
|
||||||
;x 5 Monitor #5 |
|
||||||
;x 6 Monitor #6 |
|
||||||
;x 7 Monitor #7 |
|
||||||
;x 8 Monitor #8 |
|
||||||
;x 9 Monitor #9 |
|
||||||
"MonitorOverride"=dword:00000001 |
|
||||||
;t The following settings only apply to the Windows 11 Start menu: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Disable the "Recommended" section |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartDocked_DisableRecommendedSection"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
|
||||||
;b Open Start in All apps by default |
|
||||||
"MakeAllAppsDefault"=dword:00000000 |
|
||||||
;t The following settings only apply to the Windows 10 Start menu: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Show more tiles |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_ShowMoreTiles"=dword:00000000 |
|
||||||
;c 3 Corner preference |
|
||||||
;x 1 Rounded corners, floating menu |
|
||||||
;x 2 Rounded corners, docked menu |
|
||||||
;x 0 Not rounded |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_EnableRoundedCorners"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 3 Display mode |
|
||||||
;x 0 Default |
|
||||||
;x 1 Start menu |
|
||||||
;x 2 Full screen Start |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_ForceStartSize"=dword:00000000 |
|
||||||
;c 3 App list |
|
||||||
;x 0 Display |
|
||||||
;x 3 Hide |
|
||||||
;x 1 Disable |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_NoStartMenuMorePrograms"=dword:00000000 |
|
||||||
;u Pin tiles to Windows 10 Start menu from File Explorer |
|
||||||
;pin_tiles |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;T Window switcher |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer] |
|
||||||
;z 4 Window switcher (Alt+Tab) style * |
|
||||||
;x 0 Windows 11 (default) |
|
||||||
;x 3 Windows 10 |
|
||||||
;x 1 Windows NT |
|
||||||
;x 2 Simple Window Switcher |
|
||||||
"AltTabSettings"=dword:00000000 |
|
||||||
;t The following settings only apply to the Simple Window Switcher: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;b Include desktop |
|
||||||
"IncludeWallpaper"=dword:00000001 |
|
||||||
;b Always show on primary monitor |
|
||||||
"PrimaryOnly"=dword:00000000 |
|
||||||
;b Show windows only from current monitor |
|
||||||
"PerMonitor"=dword:00000000 |
|
||||||
;b Display only the most recent window (per application switcher) |
|
||||||
"SwitcherIsPerApplication"=dword:00000000 |
|
||||||
;b %PLACEHOLDER_0001% |
|
||||||
"NoPerApplicationList"=dword:00000000 |
|
||||||
;c 3 Theme |
|
||||||
;x 0 Default |
|
||||||
;x 1 Acrylic |
|
||||||
;x 2 Mica (always opaque) |
|
||||||
"Theme"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewHost] |
|
||||||
;c 19 Opacity |
|
||||||
;x 100 Opaque |
|
||||||
;x 98 98 % |
|
||||||
;x 96 96 % |
|
||||||
;x 95 95 % (default) |
|
||||||
;x 94 94 % |
|
||||||
;x 92 92 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
;x 50 50 % |
|
||||||
;x 45 45 % |
|
||||||
;x 40 40 % |
|
||||||
;x 35 35 % |
|
||||||
;x 30 30 % |
|
||||||
"Grid_backgroundPercent"=dword:0000005F |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;c 3 Color scheme |
|
||||||
;x 0 Follow system setting (default) |
|
||||||
;x 1 Light |
|
||||||
;x 2 Dark |
|
||||||
"ColorScheme"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;c 3 Corner preference |
|
||||||
;x 2 Rounded (default) |
|
||||||
;x 3 Small rounded |
|
||||||
;x 1 Not rounded |
|
||||||
"CornerPreference"=dword:00000002 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;c 20 Row height |
|
||||||
;x 330 330 pt |
|
||||||
;x 320 320 pt |
|
||||||
;x 310 310 pt |
|
||||||
;x 300 300 pt |
|
||||||
;x 290 290 pt |
|
||||||
;x 280 280 pt |
|
||||||
;x 270 270 pt |
|
||||||
;x 260 260 pt |
|
||||||
;x 250 250 pt |
|
||||||
;x 240 240 pt |
|
||||||
;x 230 230 pt (default) |
|
||||||
;x 220 220 pt |
|
||||||
;x 210 210 pt |
|
||||||
;x 200 200 pt |
|
||||||
;x 190 190 pt |
|
||||||
;x 180 180 pt |
|
||||||
;x 170 170 pt |
|
||||||
;x 160 160 pt |
|
||||||
;x 150 150 pt |
|
||||||
;x 140 140 pt |
|
||||||
"RowHeight"=dword:000000e6 |
|
||||||
;c 10 Maximum width (percentage of screen width) |
|
||||||
;x 100 100 % (not recommended) |
|
||||||
;x 95 95 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % (default) |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
"MaxWidth"=dword:00000050 |
|
||||||
;c 10 Maximum height (percentage of screen height) |
|
||||||
;x 100 100 % (not recommended) |
|
||||||
;x 95 95 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % (default) |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
"MaxHeight"=dword:00000050 |
|
||||||
;c 11 Window padding |
|
||||||
;x 50 50 pt |
|
||||||
;x 45 45 pt |
|
||||||
;x 40 40 pt |
|
||||||
;x 35 30 pt |
|
||||||
;x 30 30 pt |
|
||||||
;x 25 25 pt |
|
||||||
;x 20 20 pt (default) |
|
||||||
;x 15 15 pt |
|
||||||
;x 10 10 pt |
|
||||||
;x 5 5 pt |
|
||||||
;x 0 None |
|
||||||
"MasterPadding"=dword:00000014 |
|
||||||
;c 11 Show delay |
|
||||||
;x 0 None |
|
||||||
;x 25 25 ms |
|
||||||
;x 50 50 ms |
|
||||||
;x 75 75 ms |
|
||||||
;x 100 100 ms (default) |
|
||||||
;x 125 125 ms |
|
||||||
;x 150 150 ms |
|
||||||
;x 200 200 ms |
|
||||||
;x 300 300 ms |
|
||||||
;x 400 400 ms |
|
||||||
;x 500 500 ms |
|
||||||
"ShowDelay"=dword:00000064 |
|
||||||
;q |
|
||||||
;y Learn more about Simple Window Switcher 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Simple-Window-Switcher |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;T Weather |
|
||||||
;t The following settings only apply to the Windows 10 taskbar: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Show Weather on the taskbar |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_PeopleBand"=dword:00000000 |
|
||||||
;w Location |
|
||||||
;Search City or Zip Code; the program looks up "weather in /* what you typed */" on Google. Leave blank for the default value (current location). |
|
||||||
;Current location (default) |
|
||||||
"WeatherLocation"="" |
|
||||||
;c 5 Layout |
|
||||||
;x 0 Icon and description (default) |
|
||||||
;x 3 Icon and temperature |
|
||||||
;x 1 Icon only |
|
||||||
;x 4 Temperature only |
|
||||||
;x 5 Temperature and description |
|
||||||
"WeatherViewMode"=dword:00000000 |
|
||||||
;c 3 Widget size |
|
||||||
;x 0 Automatic (fit contents) (default) |
|
||||||
;x 2 Automatic (fit contents) with threshold |
|
||||||
;x 1 Fixed |
|
||||||
"WeatherFixedSize"=dword:00000000 |
|
||||||
;c 2 Widget position |
|
||||||
;x 0 Right / bottom (default) |
|
||||||
;x 1 Left / top |
|
||||||
"WeatherToLeft"=dword:00000000 |
|
||||||
;c 7 Update frequency |
|
||||||
;x 60 Every minute |
|
||||||
;x 300 Every 5 minutes |
|
||||||
;x 900 Every 15 minutes |
|
||||||
;x 1200 Every 20 minutes (default) |
|
||||||
;x 1800 Every half an hour |
|
||||||
;x 3600 Every hour |
|
||||||
;x 7200 Every couple of hours |
|
||||||
"WeatherContentUpdateMode"=dword:000004B0 |
|
||||||
;c 2 Temperature unit |
|
||||||
;x 0 Celsius (default) |
|
||||||
;x 1 Fahrenheit |
|
||||||
"WeatherTemperatureUnit"=dword:00000000 |
|
||||||
;;;c 2 Location accuracy |
|
||||||
;;;x 0 Generic (based on the IP address) (default) |
|
||||||
;;;x 1 Precise (geolocation) |
|
||||||
;;"WeatherLocationType"=dword:00000000 |
|
||||||
;w Language |
|
||||||
;Type the short code for the language you'd like the weather data to be displayed in. For example, try "en", "ro", "de", "fr" etc. Leave blank for the default value (language of the Windows OS). |
|
||||||
;System language (default) |
|
||||||
"WeatherLanguage"="" |
|
||||||
;c 3 Color scheme |
|
||||||
;x 0 Follow system setting (default) |
|
||||||
;x 1 Light |
|
||||||
;x 2 Dark |
|
||||||
"WeatherTheme"=dword:00000000 |
|
||||||
;c 3 Corner preference |
|
||||||
;x 2 Rounded (default) |
|
||||||
;x 3 Small rounded |
|
||||||
;x 1 Not rounded |
|
||||||
"WeatherWindowCornerPreference"=dword:00000002 |
|
||||||
;c 2 Icon pack |
|
||||||
;x 0 Microsoft (default) |
|
||||||
;x 1 Google |
|
||||||
"WeatherIconPack"=dword:00000000 |
|
||||||
;c 2 Display widget contents |
|
||||||
;x 0 On a single line (default) |
|
||||||
;x 1 On 2 lines, if possible |
|
||||||
"WeatherContentsMode"=dword:00000000 |
|
||||||
;c 17 Zoom |
|
||||||
;x 25 25 % |
|
||||||
;x 33 33 % |
|
||||||
;x 50 50 % |
|
||||||
;x 67 67 % |
|
||||||
;x 75 75 % |
|
||||||
;x 80 80 % |
|
||||||
;x 90 90 % |
|
||||||
;x 0 100 % (default) |
|
||||||
;x 110 110 % |
|
||||||
;x 125 125 % |
|
||||||
;x 150 150 % |
|
||||||
;x 175 175 % |
|
||||||
;x 200 200 % |
|
||||||
;x 250 250 % |
|
||||||
;x 300 300 % |
|
||||||
;x 400 400 % |
|
||||||
;x 500 500 % |
|
||||||
"WeatherZoomFactor"=dword:00000000 |
|
||||||
;q |
|
||||||
;y Learn more about the Weather taskbar widget 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Weather |
|
||||||
;t %WEATHERLASTUPDATETEXT% |
|
||||||
;u Update weather now |
|
||||||
;update_weather |
|
||||||
;u Clear weather widget local data |
|
||||||
;clear_data_weather |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;T Other |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Remember last used section in this window |
|
||||||
"LastSectionInProperties"=dword:00000000 |
|
||||||
;b Open clock flyout when pressing Win+C instead of Microsoft Teams * |
|
||||||
"ClockFlyoutOnWinC"=dword:00000000 |
|
||||||
;b Show separators between taskbar toolbars * |
|
||||||
"ToolbarSeparators"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Command Prompt instead of PowerShell in Win+X menu * |
|
||||||
"DontUsePowerShellOnWinX"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Add shortcut to program settings in Win+X menu |
|
||||||
"PropertiesInWinX"=dword:00000000 |
|
||||||
;b Remove shortcut key from program settings item in Win+X menu |
|
||||||
"NoMenuAccelerator"=dword:00000000 |
|
||||||
;b Disable Office hotkeys (Ctrl+Alt+Shift+Windows key combinations) * |
|
||||||
"DisableOfficeHotkeys"=dword:00000000 |
|
||||||
;b Disable rounded corners for application windows |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_DisableRoundedCorners"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 6 Default action in the Alt+F4 dialog on the desktop |
|
||||||
;x 256 Switch user |
|
||||||
;x 1 Sign out |
|
||||||
;x 16 Sleep |
|
||||||
;x 64 Hibernate |
|
||||||
;x 2 Shut down (default) |
|
||||||
;x 4 Restart |
|
||||||
"Start_PowerButtonAction"=dword:00000002 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 2 Snap Assist style |
|
||||||
;x 0 Windows 11 (default) |
|
||||||
;x 3 Windows 10 |
|
||||||
"SnapAssistSettings"=dword:00000000 |
|
||||||
;t Prevent the following Control Panel links from being redirected to the Settings app: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b System / About page |
|
||||||
"DoNotRedirectSystemToSettingsApp"=dword:00000000 |
|
||||||
;b Programs and Features |
|
||||||
"DoNotRedirectProgramsAndFeaturesToSettingsApp"=dword:00000000 |
|
||||||
;b Adjust date/time |
|
||||||
"DoNotRedirectDateAndTimeToSettingsApp"=dword:00000000 |
|
||||||
;b Customize notification icons |
|
||||||
"DoNotRedirectNotificationIconsToSettingsApp"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T Updates |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 3 When File Explorer starts |
|
||||||
;x 1 Notify about available updates (default) |
|
||||||
;x 0 Prompt to install available updates |
|
||||||
;x 2 Do not check for updates |
|
||||||
"UpdatePolicy"=dword:00000001 |
|
||||||
;b Receive pre-release versions, if available (not recommended) |
|
||||||
"UpdatePreferStaging"=dword:00000000 |
|
||||||
;b Suggest the latest version on the server, even if it's older (not recommended) |
|
||||||
"UpdateAllowDowngrades"=dword:00000000 |
|
||||||
;t Update servers: |
|
||||||
;w Releases |
|
||||||
;Type a URL that serves resources adhering to GitHub's releases API. To learn how to configure your own update server, please consult the wiki. |
|
||||||
;github.com/valinet/ExplorerPatcher/releases/latest |
|
||||||
"UpdateURL"="" |
|
||||||
;w Pre-releases |
|
||||||
;Type a URL that serves resources adhering to GitHub's pre-releases API. To learn how to configure your own update server, please consult the wiki. |
|
||||||
;api.github.com/repos/valinet/ExplorerPatcher/releases?per_page=1 |
|
||||||
"UpdateURLStaging"="" |
|
||||||
;y Check for updates |
|
||||||
;;;EP_CHECK_FOR_UPDATES |
|
||||||
;y Update program and restart File Explorer |
|
||||||
;;;EP_INSTALL_UPDATES |
|
||||||
;y Read about changes in the latest releases 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/blob/master/CHANGELOG.md |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Configure-updates |
|
||||||
|
|
||||||
|
|
||||||
;T Advanced |
|
||||||
;e Only change these settings after reading the documentation about them. |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/About-advanced-settings |
|
||||||
;q |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Enable console |
|
||||||
"AllocConsole"=dword:00000000 |
|
||||||
;b Dump memory leaks |
|
||||||
"Memcheck"=dword:00000000 |
|
||||||
;b Double click taskbar to toggle auto-hide (only works when the taskbar is locked) |
|
||||||
"TaskbarAutohideOnDoubleClick"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Control Panel\Desktop] |
|
||||||
;b Show Windows build info on the desktop * |
|
||||||
"PaintDesktopVersion"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Enable advanced mitigations for correct rendering using classic theme * |
|
||||||
"ClassicThemeMitigations"=dword:00000000 |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1eeb5b5a-06fb-4732-96b3-975c0194eb39}\InprocServer32] |
|
||||||
;d Enable SysListView32 for Explorer views * |
|
||||||
@="" |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Hide the program settings item ("Properties") from the taskbar context menu |
|
||||||
"NoPropertiesInContextMenu"=dword:00000000 |
|
||||||
;b Enable symbols download * |
|
||||||
"EnableSymbolDownload"=dword:00000001 |
|
||||||
;c 12 Supplementary delay at logon * |
|
||||||
;x 0 None (default) |
|
||||||
;x 300 300 ms |
|
||||||
;x 600 600 ms |
|
||||||
;x 1000 1 second |
|
||||||
;x 1500 1.5 seconds |
|
||||||
;x 2000 2 seconds |
|
||||||
;x 3000 3 seconds |
|
||||||
;x 4000 4 seconds |
|
||||||
;x 5000 5 seconds |
|
||||||
;x 6000 6 seconds |
|
||||||
;x 8000 8 seconds |
|
||||||
;x 10000 10 seconds |
|
||||||
"ExplorerReadyDelay"=dword:00000000 |
|
||||||
;t The following settings only apply to the Windows 10 taskbar: |
|
||||||
;b Pinned items act as quick launch (don't group pinned items with active apps) * |
|
||||||
"PinnedItemsActAsQuickLaunch"=dword:00000000 |
|
||||||
;b When the taskbar shows button labels, remove the extra gap around pinned items * |
|
||||||
"RemoveExtraGapAroundPinnedItems"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T About |
|
||||||
;e ExplorerPatcher |
|
||||||
;e Version %VERSIONINFORMATIONSTRING% |
|
||||||
;t © 2006-2022 VALINET Solutions SRL. All rights reserved. |
|
||||||
;e |
|
||||||
;e This project aims to enhance the working environment on Windows. |
|
||||||
;e Proudly engineered by Valentin-Gabriel Radu. |
|
||||||
;t Running on Windows 11, OS Build %OSVERSIONSTRING% |
|
||||||
;y Visit project GitHub (https://github.com/valinet) 🡕 |
|
||||||
;https://github.com/valinet |
|
||||||
;q |
|
||||||
;y Visit web site (https://www.valinet.ro) 🡕 |
|
||||||
;https://www.valinet.ro |
|
||||||
;y E-mail author (valentingabrielradu@gmail.com) 🡕 |
|
||||||
;mailto:valentingabrielradu@gmail.com |
|
||||||
;y Donate (using PayPal) 🡕 |
|
||||||
;https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher¤cy_code=EUR |
|
||||||
;y Frequently Asked Questions 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Frequently-asked-questions |
|
||||||
;y Learn more managing these settings 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Settings-management |
|
||||||
;u Import settings |
|
||||||
;import |
|
||||||
;u Export current settings |
|
||||||
;export |
|
||||||
;u Restore default settings |
|
||||||
;reset |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;f |
|
||||||
;u Restart File Explorer (*) |
|
||||||
;restart |
|
||||||
;;u Restore default settings |
|
||||||
;;reset |
|
||||||
;;u About ExplorerPatcher |
|
||||||
;;about |
|
||||||
@ -1,584 +0,0 @@ |
|||||||
Windows Registry Editor Version 5.00 |
|
||||||
|
|
||||||
|
|
||||||
;M Settings |
|
||||||
;q |
|
||||||
|
|
||||||
;T Taskbar |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;y More taskbar options in the Settings app 🡕 |
|
||||||
;ms-settings:taskbar |
|
||||||
;y Customize notification area icons 🡕 |
|
||||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} |
|
||||||
;y Customize system icons in the notification area 🡕 |
|
||||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 4 Primary taskbar location on screen * |
|
||||||
;x 3 Bottom (default) |
|
||||||
;x 1 Top |
|
||||||
;x 0 Left |
|
||||||
;x 2 Right |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_TaskbarPosition"=dword:00000003 |
|
||||||
;c 4 Secondary taskbar(s) location on screen |
|
||||||
;x 3 Bottom (default) |
|
||||||
;x 1 Top |
|
||||||
;x 0 Left |
|
||||||
;x 2 Right |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_MMTaskbarPosition"=dword:00000003 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search] |
|
||||||
;c 3 Search |
|
||||||
;x 0 Hidden |
|
||||||
;x 1 Show search icon |
|
||||||
;x 2 Show search box |
|
||||||
"SearchboxTaskbarMode"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Cortana button |
|
||||||
"ShowCortanaButton"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Task view button |
|
||||||
"ShowTaskViewButton"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Desktop button |
|
||||||
"TaskbarSD"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Automatically hide the taskbar |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_AutoHideTaskbar"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;c 2 Start button style |
|
||||||
;x 0 Windows 10 (default) |
|
||||||
;x 1 Windows 11 |
|
||||||
"OrbStyle"=dword:00000000 |
|
||||||
;c 5 Primary taskbar alignment |
|
||||||
;x 0 At screen edge (default) |
|
||||||
;x 1 Centered |
|
||||||
;x 5 Centered, at screen edge when full |
|
||||||
;x 3 Centered with Start button |
|
||||||
;x 7 Centered with Start button, at screen edge when full |
|
||||||
"OldTaskbarAl"=dword:00000000 |
|
||||||
;c 5 Secondary taskbar(s) alignment |
|
||||||
;x 0 At screen edge (default) |
|
||||||
;x 1 Centered |
|
||||||
;x 5 Centered, at screen edge when full |
|
||||||
;x 3 Centered with Start button |
|
||||||
;x 7 Centered with Start button, at screen edge when full |
|
||||||
"MMOldTaskbarAl"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 3 Combine taskbar icons on primary taskbar |
|
||||||
;x 0 Always combine (default) |
|
||||||
;x 1 Combine when taskbar is full |
|
||||||
;x 2 Never combine |
|
||||||
"TaskbarGlomLevel"=dword:00000000 |
|
||||||
;c 3 Combine taskbar icons on secondary taskbar(s) |
|
||||||
;x 0 Always combine (default) |
|
||||||
;x 1 Combine when taskbar is full |
|
||||||
;x 2 Never combine |
|
||||||
"MMTaskbarGlomLevel"=dword:00000000 |
|
||||||
;c 2 Taskbar icon size |
|
||||||
;x 1 Small |
|
||||||
;x 0 Large (default) |
|
||||||
"TaskbarSmallIcons"=dword:00000000 |
|
||||||
;e |
|
||||||
;e |
|
||||||
;e |
|
||||||
;e |
|
||||||
|
|
||||||
;T System tray |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Skin taskbar and tray pop-up menus |
|
||||||
"SkinMenus"=dword:00000001 |
|
||||||
;b Center tray icon pop-up menus |
|
||||||
"CenterMenus"=dword:00000001 |
|
||||||
;b Flyout behavior for tray icon pop-up menus |
|
||||||
"FlyoutMenus"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7] |
|
||||||
;b Show touch keyboard button * |
|
||||||
"TipbandDesiredVisibility"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;p 2 |
|
||||||
;b Apply Windows 11 style to system tray icons * |
|
||||||
"SkinIcons"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show seconds in the clock |
|
||||||
"ShowSecondsInSystemClock"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;a Choosing 'Open Network && Internet settings' when right clicking the |
|
||||||
;c 3 network icon should open: |
|
||||||
;x 0 Network section in the Settings app (default) |
|
||||||
;x 1 Network and Sharing Center in Control Panel |
|
||||||
;x 2 Network Connections in Control Panel |
|
||||||
"ReplaceNetwork"=dword:00000000 |
|
||||||
;q |
|
||||||
;t When clicking a system icon in the system tray, open: |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network] |
|
||||||
;c 5 Network |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 2 Windows 8 flyout |
|
||||||
;x 1 Network section in the Settings app |
|
||||||
;x 3 Network and Sharing Center in Control Panel |
|
||||||
;x 4 Network Connections in Control Panel |
|
||||||
"ReplaceVan"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\MTCUVC] |
|
||||||
;c 2 Sound |
|
||||||
;x 1 Windows 10 flyout (default) |
|
||||||
;x 0 Windows 7 flyout |
|
||||||
"EnableMtcUvc"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
|
||||||
;c 3 Clock |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 1 Windows 7 |
|
||||||
;x 2 Action Center |
|
||||||
"UseWin32TrayClockExperience"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
|
||||||
;c 2 Battery |
|
||||||
;x 0 Windows 10 flyout (default) |
|
||||||
;x 1 Windows 7 |
|
||||||
"UseWin32BatteryFlyout"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T File Explorer |
|
||||||
;e For the settings marked with (**) to work in Open or Save file dialogs as well, register |
|
||||||
;e this utility as shell extension using the option below. |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Using-ExplorerPatcher-as-shell-extension |
|
||||||
;q |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;i Use immersive menus when displaying Windows 10 context menus ** |
|
||||||
"DisableImmersiveContextMenu"=dword:00000000 |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{056440FD-8568-48e7-A632-72157243B55B}\InprocServer32] |
|
||||||
;d Disable navigation bar ** |
|
||||||
@="" |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1d64637d-31e9-4b06-9124-e83fb178ac6e}\TreatAs] |
|
||||||
;d Disable modern search bar |
|
||||||
@="{64bc32b5-4eec-4de7-972d-bd8bd0324537}" |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Hide search bar completely ** |
|
||||||
"HideExplorerSearchBar"=dword:00000000 |
|
||||||
;p 2 |
|
||||||
;b Mica effect on title bar |
|
||||||
"MicaEffectOnTitlebar"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Register as shell extension |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T Start menu |
|
||||||
;y More Start menu options in the Settings app 🡕 |
|
||||||
;ms-settings:personalization-start |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;z 2 Position on screen |
|
||||||
;x 0 At screen edge (default) |
|
||||||
;x 1 Center |
|
||||||
"TaskbarAl"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 22 Maximum number of frequent apps to show |
|
||||||
;x 0 None |
|
||||||
;x 1 1 |
|
||||||
;x 2 2 |
|
||||||
;x 3 3 |
|
||||||
;x 4 4 |
|
||||||
;x 5 5 |
|
||||||
;x 6 6 (default) |
|
||||||
;x 7 7 |
|
||||||
;x 8 8 |
|
||||||
;x 9 9 |
|
||||||
;x 10 10 |
|
||||||
;x 11 11 |
|
||||||
;x 12 12 |
|
||||||
;x 13 13 |
|
||||||
;x 14 14 |
|
||||||
;x 15 15 |
|
||||||
;x 16 16 |
|
||||||
;x 17 17 |
|
||||||
;x 18 18 |
|
||||||
;x 19 19 |
|
||||||
;x 20 20 |
|
||||||
;x 99999 Unlimited |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_Start_MaximumFrequentApps"=dword:00000006 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
|
||||||
;e When using multiple displays, open Start on this monitor when invoked using |
|
||||||
;z 10 the keyboard |
|
||||||
;x 1 Primary monitor (default) |
|
||||||
;x 0 Monitor on which the cursor is on |
|
||||||
;x 2 Monitor #2 |
|
||||||
;x 3 Monitor #3 |
|
||||||
;x 4 Monitor #4 |
|
||||||
;x 5 Monitor #5 |
|
||||||
;x 6 Monitor #6 |
|
||||||
;x 7 Monitor #7 |
|
||||||
;x 8 Monitor #8 |
|
||||||
;x 9 Monitor #9 |
|
||||||
"MonitorOverride"=dword:00000001 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 3 Corner preference |
|
||||||
;x 1 Rounded corners, floating menu |
|
||||||
;x 2 Rounded corners, docked menu |
|
||||||
;x 0 Not rounded |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_EnableRoundedCorners"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 3 Display mode |
|
||||||
;x 0 Default |
|
||||||
;x 1 Start menu |
|
||||||
;x 2 Full screen Start |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_ForceStartSize"=dword:00000000 |
|
||||||
;z 3 App list |
|
||||||
;x 0 Display |
|
||||||
;x 3 Hide |
|
||||||
;x 1 Disable |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_NoStartMenuMorePrograms"=dword:00000000 |
|
||||||
;t Some settings might not be available in older Windows 10 versions. |
|
||||||
|
|
||||||
|
|
||||||
;T Window switcher |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer] |
|
||||||
;z 3 Window switcher (Alt+Tab) style * |
|
||||||
;x 0 Windows 10 (default) |
|
||||||
;x 1 Windows NT |
|
||||||
;x 2 Simple Window Switcher |
|
||||||
"AltTabSettings"=dword:00000000 |
|
||||||
;t The following settings only apply to the Simple Window Switcher: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;b Include desktop |
|
||||||
"IncludeWallpaper"=dword:00000001 |
|
||||||
;b Always show on primary monitor |
|
||||||
"PrimaryOnly"=dword:00000000 |
|
||||||
;b Show windows only from current monitor |
|
||||||
"PerMonitor"=dword:00000000 |
|
||||||
;b Display only the most recent window (per application switcher) |
|
||||||
"SwitcherIsPerApplication"=dword:00000000 |
|
||||||
;b %PLACEHOLDER_0001% |
|
||||||
"NoPerApplicationList"=dword:00000000 |
|
||||||
;c 2 Theme |
|
||||||
;x 0 Default |
|
||||||
;x 1 Acrylic |
|
||||||
"Theme"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewHost] |
|
||||||
;c 19 Opacity |
|
||||||
;x 100 Opaque |
|
||||||
;x 98 98 % |
|
||||||
;x 96 96 % |
|
||||||
;x 95 95 % (default) |
|
||||||
;x 94 94 % |
|
||||||
;x 92 92 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
;x 50 50 % |
|
||||||
;x 45 45 % |
|
||||||
;x 40 40 % |
|
||||||
;x 35 35 % |
|
||||||
;x 30 30 % |
|
||||||
"Grid_backgroundPercent"=dword:0000005F |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;c 3 Color scheme |
|
||||||
;x 0 Follow system setting (default) |
|
||||||
;x 1 Light |
|
||||||
;x 2 Dark |
|
||||||
"ColorScheme"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
|
||||||
;c 20 Row height |
|
||||||
;x 330 330 pt |
|
||||||
;x 320 320 pt |
|
||||||
;x 310 310 pt |
|
||||||
;x 300 300 pt |
|
||||||
;x 290 290 pt |
|
||||||
;x 280 280 pt |
|
||||||
;x 270 270 pt |
|
||||||
;x 260 260 pt |
|
||||||
;x 250 250 pt |
|
||||||
;x 240 240 pt |
|
||||||
;x 230 230 pt (default) |
|
||||||
;x 220 220 pt |
|
||||||
;x 210 210 pt |
|
||||||
;x 200 200 pt |
|
||||||
;x 190 190 pt |
|
||||||
;x 180 180 pt |
|
||||||
;x 170 170 pt |
|
||||||
;x 160 160 pt |
|
||||||
;x 150 150 pt |
|
||||||
;x 140 140 pt |
|
||||||
"RowHeight"=dword:000000e6 |
|
||||||
;c 10 Maximum width (percentage of screen width) |
|
||||||
;x 100 100 % (not recommended) |
|
||||||
;x 95 95 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % (default) |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
"MaxWidth"=dword:00000050 |
|
||||||
;c 10 Maximum height (percentage of screen height) |
|
||||||
;x 100 100 % (not recommended) |
|
||||||
;x 95 95 % |
|
||||||
;x 90 90 % |
|
||||||
;x 85 85 % |
|
||||||
;x 80 80 % (default) |
|
||||||
;x 75 75 % |
|
||||||
;x 70 70 % |
|
||||||
;x 65 65 % |
|
||||||
;x 60 60 % |
|
||||||
;x 55 55 % |
|
||||||
"MaxHeight"=dword:00000050 |
|
||||||
;c 11 Window padding |
|
||||||
;x 50 50 pt |
|
||||||
;x 45 45 pt |
|
||||||
;x 40 40 pt (default) |
|
||||||
;x 35 30 pt |
|
||||||
;x 30 30 pt |
|
||||||
;x 25 25 pt |
|
||||||
;x 20 20 pt |
|
||||||
;x 15 15 pt |
|
||||||
;x 10 10 pt |
|
||||||
;x 5 5 pt |
|
||||||
;x 0 None |
|
||||||
"MasterPadding"=dword:00000028 |
|
||||||
;c 11 Show delay |
|
||||||
;x 0 None |
|
||||||
;x 25 25 ms |
|
||||||
;x 50 50 ms |
|
||||||
;x 75 75 ms |
|
||||||
;x 100 100 ms (default) |
|
||||||
;x 125 125 ms |
|
||||||
;x 150 150 ms |
|
||||||
;x 200 200 ms |
|
||||||
;x 300 300 ms |
|
||||||
;x 400 400 ms |
|
||||||
;x 500 500 ms |
|
||||||
"ShowDelay"=dword:00000064 |
|
||||||
;q |
|
||||||
;y Learn more about Simple Window Switcher 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Simple-Window-Switcher |
|
||||||
;t Some settings might not be available in older Windows 10 versions. |
|
||||||
|
|
||||||
|
|
||||||
;T Weather |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Show Weather on the taskbar |
|
||||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_PeopleBand"=dword:00000000 |
|
||||||
;c 5 Layout |
|
||||||
;x 0 Icon and description (default) |
|
||||||
;x 3 Icon and temperature |
|
||||||
;x 1 Icon only |
|
||||||
;x 4 Temperature only |
|
||||||
;x 5 Temperature and description |
|
||||||
"WeatherViewMode"=dword:00000000 |
|
||||||
;c 3 Widget size |
|
||||||
;x 0 Automatic (fit contents) (default) |
|
||||||
;x 2 Automatic (fit contents) with threshold |
|
||||||
;x 1 Fixed |
|
||||||
"WeatherFixedSize"=dword:00000000 |
|
||||||
;c 2 Widget position |
|
||||||
;x 0 Right / bottom (default) |
|
||||||
;x 1 Left / top |
|
||||||
"WeatherToLeft"=dword:00000000 |
|
||||||
;c 7 Update frequency |
|
||||||
;x 60 Every minute |
|
||||||
;x 300 Every 5 minutes |
|
||||||
;x 900 Every 15 minutes |
|
||||||
;x 1200 Every 20 minutes (default) |
|
||||||
;x 1800 Every half an hour |
|
||||||
;x 3600 Every hour |
|
||||||
;x 7200 Every couple of hours |
|
||||||
"WeatherContentUpdateMode"=dword:000004B0 |
|
||||||
;c 2 Temperature unit |
|
||||||
;x 0 Celsius (default) |
|
||||||
;x 1 Fahrenheit |
|
||||||
"WeatherTemperatureUnit"=dword:00000000 |
|
||||||
;w Location |
|
||||||
;Search City or Zip Code; the program looks up "weather in /* what you typed */" on Google. Leave blank for the default value (current location). |
|
||||||
;Current location (default) |
|
||||||
"WeatherLocation"="" |
|
||||||
;;;c 2 Location accuracy |
|
||||||
;;;x 0 Generic (based on the IP address) (default) |
|
||||||
;;;x 1 Precise (geolocation) |
|
||||||
;;"WeatherLocationType"=dword:00000000 |
|
||||||
;w Language |
|
||||||
;Type the short code for the language you'd like the weather data to be displayed in. For example, try "en", "ro", "de", "fr" etc. Leave blank for the default value (language of the Windows OS). |
|
||||||
;System language (default) |
|
||||||
"WeatherLanguage"="" |
|
||||||
;c 3 Color scheme |
|
||||||
;x 0 Follow system setting (default) |
|
||||||
;x 1 Light |
|
||||||
;x 2 Dark |
|
||||||
"WeatherTheme"=dword:00000000 |
|
||||||
;c 2 Icon pack |
|
||||||
;x 0 Microsoft (default) |
|
||||||
;x 1 Google |
|
||||||
"WeatherIconPack"=dword:00000000 |
|
||||||
;c 2 Display widget contents |
|
||||||
;x 0 On a single line (default) |
|
||||||
;x 1 On 2 lines, if possible |
|
||||||
"WeatherContentsMode"=dword:00000000 |
|
||||||
;c 17 Zoom |
|
||||||
;x 25 25 % |
|
||||||
;x 33 33 % |
|
||||||
;x 50 50 % |
|
||||||
;x 67 67 % |
|
||||||
;x 75 75 % |
|
||||||
;x 80 80 % |
|
||||||
;x 90 90 % |
|
||||||
;x 0 100 % (default) |
|
||||||
;x 110 110 % |
|
||||||
;x 125 125 % |
|
||||||
;x 150 150 % |
|
||||||
;x 175 175 % |
|
||||||
;x 200 200 % |
|
||||||
;x 250 250 % |
|
||||||
;x 300 300 % |
|
||||||
;x 400 400 % |
|
||||||
;x 500 500 % |
|
||||||
"WeatherZoomFactor"=dword:00000000 |
|
||||||
;q |
|
||||||
;y Learn more about the Weather taskbar widget 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Weather |
|
||||||
;t %WEATHERLASTUPDATETEXT% |
|
||||||
;u Update weather now |
|
||||||
;update_weather |
|
||||||
;u Clear weather widget local data |
|
||||||
;clear_data_weather |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;T Other |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Remember last used section in this window |
|
||||||
"LastSectionInProperties"=dword:00000000 |
|
||||||
;b Open clock flyout when pressing Win+C instead of Microsoft Teams * |
|
||||||
"ClockFlyoutOnWinC"=dword:00000000 |
|
||||||
;b Show separators between taskbar toolbars * |
|
||||||
"ToolbarSeparators"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;b Show Command Prompt instead of PowerShell in Win+X menu * |
|
||||||
"DontUsePowerShellOnWinX"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Remove shortcut key from program settings item in Win+X menu |
|
||||||
"NoMenuAccelerator"=dword:00000000 |
|
||||||
;b Disable Office hotkeys (Ctrl+Alt+Shift+Windows key combinations) * |
|
||||||
"DisableOfficeHotkeys"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
|
||||||
;c 6 Default action in the Alt+F4 dialog on the desktop |
|
||||||
;x 256 Switch user |
|
||||||
;x 1 Sign out |
|
||||||
;x 16 Sleep |
|
||||||
;x 64 Hibernate |
|
||||||
;x 2 Shut down (default) |
|
||||||
;x 4 Restart |
|
||||||
"Start_PowerButtonAction"=dword:00000002 |
|
||||||
;t Prevent the following Control Panel links from being redirected to the Settings app: |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b System / About page |
|
||||||
"DoNotRedirectSystemToSettingsApp"=dword:00000000 |
|
||||||
;b Programs and Features |
|
||||||
"DoNotRedirectProgramsAndFeaturesToSettingsApp"=dword:00000000 |
|
||||||
;b Adjust date/time |
|
||||||
"DoNotRedirectDateAndTimeToSettingsApp"=dword:00000000 |
|
||||||
;b Customize notification icons |
|
||||||
"DoNotRedirectNotificationIconsToSettingsApp"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T Updates |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;z 3 When File Explorer starts |
|
||||||
;x 1 Notify about available updates (default) |
|
||||||
;x 0 Prompt to install available updates |
|
||||||
;x 2 Do not check for updates |
|
||||||
"UpdatePolicy"=dword:00000001 |
|
||||||
;b Receive pre-release versions, if available (not recommended) |
|
||||||
"UpdatePreferStaging"=dword:00000000 |
|
||||||
;b Suggest the latest version on the server, even if it's older (not recommended) |
|
||||||
"UpdateAllowDowngrades"=dword:00000000 |
|
||||||
;t Update servers: |
|
||||||
;w Releases |
|
||||||
;Type a URL that serves resources adhering to GitHub's releases API. To learn how to configure your own update server, please consult the wiki. |
|
||||||
;github.com/valinet/ExplorerPatcher/releases/latest |
|
||||||
"UpdateURL"="" |
|
||||||
;w Pre-releases |
|
||||||
;Type a URL that serves resources adhering to GitHub's pre-releases API. To learn how to configure your own update server, please consult the wiki. |
|
||||||
;api.github.com/repos/valinet/ExplorerPatcher/releases?per_page=1 |
|
||||||
"UpdateURLStaging"="" |
|
||||||
;y Check for updates |
|
||||||
;;;EP_CHECK_FOR_UPDATES |
|
||||||
;y Update program and restart File Explorer |
|
||||||
;;;EP_INSTALL_UPDATES |
|
||||||
;y Read about changes in the latest releases 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/blob/master/CHANGELOG.md |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Configure-updates |
|
||||||
|
|
||||||
|
|
||||||
;T Advanced |
|
||||||
;e Only change these settings after reading the documentation about them. |
|
||||||
;y Learn more 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/About-advanced-settings |
|
||||||
;q |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Enable console |
|
||||||
"AllocConsole"=dword:00000000 |
|
||||||
;b Dump memory leaks |
|
||||||
"Memcheck"=dword:00000000 |
|
||||||
;b Double click taskbar to toggle auto-hide (only works when the taskbar is locked) |
|
||||||
"TaskbarAutohideOnDoubleClick"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Control Panel\Desktop] |
|
||||||
;b Show Windows build info on the desktop * |
|
||||||
"PaintDesktopVersion"=dword:00000000 |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Enable advanced mitigations for correct rendering using classic theme * |
|
||||||
"ClassicThemeMitigations"=dword:00000000 |
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1eeb5b5a-06fb-4732-96b3-975c0194eb39}\InprocServer32] |
|
||||||
;d Enable SysListView32 for Explorer views * |
|
||||||
@="" |
|
||||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
|
||||||
;b Hide the program settings item ("Properties") from the taskbar context menu |
|
||||||
"NoPropertiesInContextMenu"=dword:00000000 |
|
||||||
;b Enable symbols download * |
|
||||||
"EnableSymbolDownload"=dword:00000001 |
|
||||||
;b Pinned items act as quick launch (don't group pinned items with active apps) * |
|
||||||
"PinnedItemsActAsQuickLaunch"=dword:00000000 |
|
||||||
;b When the taskbar shows button labels, remove the extra gap around pinned items * |
|
||||||
"RemoveExtraGapAroundPinnedItems"=dword:00000000 |
|
||||||
|
|
||||||
|
|
||||||
;T About |
|
||||||
;e ExplorerPatcher |
|
||||||
;e Version %VERSIONINFORMATIONSTRING% |
|
||||||
;t © 2006-2022 VALINET Solutions SRL. All rights reserved. |
|
||||||
;e |
|
||||||
;e This project aims to enhance the working environment on Windows. |
|
||||||
;e Proudly engineered by Valentin-Gabriel Radu. |
|
||||||
;t Running on Windows 10, OS Build %OSVERSIONSTRING% |
|
||||||
;y Visit project GitHub (https://github.com/valinet) 🡕 |
|
||||||
;https://github.com/valinet |
|
||||||
;q |
|
||||||
;y Visit web site (https://www.valinet.ro) 🡕 |
|
||||||
;https://www.valinet.ro |
|
||||||
;y E-mail author (valentingabrielradu@gmail.com) 🡕 |
|
||||||
;mailto:valentingabrielradu@gmail.com |
|
||||||
;y Donate (using PayPal) 🡕 |
|
||||||
;https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher¤cy_code=EUR |
|
||||||
;y Frequently Asked Questions 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Frequently-asked-questions |
|
||||||
;y Learn more managing these settings 🡕 |
|
||||||
;https://github.com/valinet/ExplorerPatcher/wiki/Settings-management |
|
||||||
;u Import settings |
|
||||||
;import |
|
||||||
;u Export current settings |
|
||||||
;export |
|
||||||
;u Restore default settings |
|
||||||
;reset |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;f |
|
||||||
;u Restart File Explorer (*) |
|
||||||
;restart |
|
||||||
;;u Restore default settings |
|
||||||
;;reset |
|
||||||
;;u About ExplorerPatcher |
|
||||||
;;about |
|
||||||
@ -1 +1,2 @@ |
|||||||
custom: ['https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher'] |
custom: ['https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher'] |
||||||
|
github: 'Amrsatrio' |
||||||
|
|||||||
@ -1 +1 @@ |
|||||||
Subproject commit 3582747da01b6a52aa0b7d7472c18c0a391cfd3f |
Subproject commit afdff313b005792f58fbaa8ec08dfbc9ea921aba |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
# ExplorerPatcher Custom Libraries Chainloader |
||||||
|
|
||||||
|
ExplorerPatcher has a simple, built-in mechanism that allows users to load their own DLL into `explorer.exe` right after ExplorerPatcher finishes initializing its hooks. Interested users should place a DLL called `ep_extra.dll` in `C:\Windows`. When ExplorerPatcher finishes its setup, it loads the `ep_extra.dll` library and calls the `ep_extra_EntryPoint` function. Although this is very useful so that users can load their custom code, it is quite limited at the moment, as it loads just one DLL. |
||||||
|
|
||||||
|
This project is a solution to this issue. A chainloader is implemented here, that looks for other modules matching the `ep_extra_*.dll` pattern in `C:\Windows` as well, and loads them one after the other. |
||||||
@ -0,0 +1,100 @@ |
|||||||
|
// Microsoft Visual C++ generated resource script. |
||||||
|
// |
||||||
|
#include "resource.h" |
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 2 resource. |
||||||
|
// |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// English (United States) resources |
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
#pragma code_page(1252) |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// TEXTINCLUDE |
||||||
|
// |
||||||
|
|
||||||
|
1 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"resource.h\0" |
||||||
|
END |
||||||
|
|
||||||
|
2 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"#include ""winres.h""\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
3 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION 1,0,0,1 |
||||||
|
PRODUCTVERSION 1,0,0,1 |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x2L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "VALINET Solutions SRL" |
||||||
|
VALUE "FileDescription", "ExplorerPatcher Custom Libraries Chainloader" |
||||||
|
VALUE "FileVersion", "1.0.0.0" |
||||||
|
VALUE "InternalName", "ep_extra.dll" |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2006-2025 VALINET Solutions SRL. All rights reserved." |
||||||
|
VALUE "OriginalFilename", "ep_extra.dll" |
||||||
|
VALUE "ProductName", "ExplorerPatcher" |
||||||
|
VALUE "ProductVersion", "1.0.0.0" |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
||||||
|
|
||||||
|
#endif // English (United States) resources |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 3 resource. |
||||||
|
// |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
|
|
||||||
@ -0,0 +1,179 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>16.0</VCProjectVersion> |
||||||
|
<Keyword>Win32Proj</Keyword> |
||||||
|
<ProjectGuid>{93fa47cc-7753-4f86-b583-69048f51c5ab}</ProjectGuid> |
||||||
|
<RootNamespace>epextra</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<ModuleDefinitionFile> |
||||||
|
</ModuleDefinitionFile> |
||||||
|
<AdditionalOptions>/EXPORT:ep_extra_EntryPoint %(AdditionalOptions)</AdditionalOptions> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<ModuleDefinitionFile> |
||||||
|
</ModuleDefinitionFile> |
||||||
|
<AdditionalOptions>/EXPORT:ep_extra_EntryPoint %(AdditionalOptions)</AdditionalOptions> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<ModuleDefinitionFile> |
||||||
|
</ModuleDefinitionFile> |
||||||
|
<AdditionalOptions>/EXPORT:ep_extra_EntryPoint %(AdditionalOptions)</AdditionalOptions> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<ModuleDefinitionFile> |
||||||
|
</ModuleDefinitionFile> |
||||||
|
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions> |
||||||
|
</Link> |
||||||
|
<MASM /> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="worker.c" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<MASM Include="main.asm" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="resource.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="ep_extra.rc" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" /> |
||||||
|
</ImportGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup> |
||||||
|
<Filter Include="Source Files"> |
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
||||||
|
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Header Files"> |
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
||||||
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Resource Files"> |
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
||||||
|
</Filter> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="worker.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<MASM Include="main.asm"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</MASM> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="resource.h"> |
||||||
|
<Filter>Header Files</Filter> |
||||||
|
</ClInclude> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="ep_extra.rc"> |
||||||
|
<Filter>Resource Files</Filter> |
||||||
|
</ResourceCompile> |
||||||
|
</ItemGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,18 @@ |
|||||||
|
EXTERN worker : PROC |
||||||
|
|
||||||
|
.CODE |
||||||
|
|
||||||
|
ep_extra_EntryPoint PROC EXPORT |
||||||
|
PUSH RBP |
||||||
|
MOV RBP, RSP |
||||||
|
SUB RSP, 30H |
||||||
|
CALL worker |
||||||
|
CMP RAX, 0 |
||||||
|
JE finish |
||||||
|
JMP RAX |
||||||
|
finish: |
||||||
|
LEAVE |
||||||
|
RET |
||||||
|
ep_extra_EntryPoint ENDP |
||||||
|
|
||||||
|
END |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by ep_extra.rc
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS |
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101 |
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001 |
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001 |
||||||
|
#define _APS_NEXT_SYMED_VALUE 101 |
||||||
|
#endif |
||||||
|
#endif |
||||||
@ -0,0 +1,82 @@ |
|||||||
|
#include <Windows.h> |
||||||
|
#include <Shlwapi.h> |
||||||
|
#pragma comment(lib, "Shlwapi.lib") |
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
HMODULE hModule = NULL; |
||||||
|
HANDLE sigFinish = NULL; |
||||||
|
void* pFinishProc = NULL; |
||||||
|
|
||||||
|
void done() { |
||||||
|
WaitForSingleObject(sigFinish, INFINITE); |
||||||
|
FreeLibraryAndExitThread(hModule, 0); |
||||||
|
} |
||||||
|
|
||||||
|
void* worker() { |
||||||
|
wchar_t pattern[MAX_PATH]; |
||||||
|
GetWindowsDirectoryW(pattern, MAX_PATH); |
||||||
|
wcscat_s(pattern, MAX_PATH, L"\\ep_extra_*.dll"); |
||||||
|
|
||||||
|
WIN32_FIND_DATA data; |
||||||
|
HANDLE hFind = FindFirstFileW(pattern, &data); |
||||||
|
if (hFind != INVALID_HANDLE_VALUE) { |
||||||
|
do { |
||||||
|
wprintf(L">> Found ep_extra library: \"%s\"\n", data.cFileName); |
||||||
|
GetWindowsDirectoryW(pattern, MAX_PATH); |
||||||
|
wcscat_s(pattern, MAX_PATH, L"\\"); |
||||||
|
wcscat_s(pattern, MAX_PATH, data.cFileName); |
||||||
|
HMODULE hLib = LoadLibraryW(pattern); |
||||||
|
if (hLib) { |
||||||
|
FARPROC proc = (FARPROC)(GetProcAddress(hLib, "setup")); |
||||||
|
if (proc) { |
||||||
|
if (proc()) FreeLibrary(hLib); |
||||||
|
} |
||||||
|
else FreeLibrary(hLib); |
||||||
|
} |
||||||
|
} while (FindNextFileW(hFind, &data)); |
||||||
|
FindClose(hFind); |
||||||
|
} |
||||||
|
|
||||||
|
sigFinish = CreateEventW(NULL, FALSE, FALSE, NULL); |
||||||
|
if (sigFinish) { |
||||||
|
BYTE payload[] = { |
||||||
|
0x48, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mov rcx, sigFinish
|
||||||
|
0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mov rax, SetEvent
|
||||||
|
0xFF, 0xD0, // call SetEvent
|
||||||
|
0xC9, // leave
|
||||||
|
0xC3 // ret
|
||||||
|
}; |
||||||
|
*(INT64*)(payload + 2) = sigFinish; |
||||||
|
*(INT64*)(payload + 12) = SetEvent; |
||||||
|
|
||||||
|
pFinishProc = VirtualAlloc(NULL, sizeof(payload), MEM_COMMIT, PAGE_EXECUTE_READWRITE); |
||||||
|
if (pFinishProc) { |
||||||
|
memcpy(pFinishProc, payload, sizeof(payload)); |
||||||
|
SHCreateThread(done, 0, CTF_NOADDREFLIB, NULL); |
||||||
|
return pFinishProc; |
||||||
|
} |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL WINAPI DllMain( |
||||||
|
_In_ HINSTANCE hinstDLL, |
||||||
|
_In_ DWORD fdwReason, |
||||||
|
_In_ LPVOID lpvReserved |
||||||
|
) |
||||||
|
{ |
||||||
|
switch (fdwReason) |
||||||
|
{ |
||||||
|
case DLL_PROCESS_ATTACH: |
||||||
|
DisableThreadLibraryCalls(hinstDLL); |
||||||
|
hModule = hinstDLL; |
||||||
|
break; |
||||||
|
case DLL_THREAD_ATTACH: |
||||||
|
break; |
||||||
|
case DLL_THREAD_DETACH: |
||||||
|
break; |
||||||
|
case DLL_PROCESS_DETACH: |
||||||
|
break; |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
# ExplorerPatcher Windows 7 Alt-Tab Module |
||||||
|
|
||||||
|
This module patches the Windows 7 genuine Alt-Tab implementation to work on newer Windows versions. |
||||||
|
|
||||||
|
To install, make sure you have the following files in `C:\Windows`: |
||||||
|
|
||||||
|
* `ep_extra_valinet.win7alttab.dll` - this DLL |
||||||
|
* `ep_extra.dll` - a chainloader capable of being invoked by ExplorerPatcher (implements `ep_extra_EntryPoint` and which loads other `ep_extra_*.dll` modules |
||||||
|
* `AltTab.dll` - a copy of the `AltTab.dll` in `C:\Windows\System32` from a Windows 7 installation |
||||||
@ -0,0 +1,100 @@ |
|||||||
|
// Microsoft Visual C++ generated resource script. |
||||||
|
// |
||||||
|
#include "resource.h" |
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 2 resource. |
||||||
|
// |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// English (United States) resources |
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
#pragma code_page(1252) |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// TEXTINCLUDE |
||||||
|
// |
||||||
|
|
||||||
|
1 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"resource.h\0" |
||||||
|
END |
||||||
|
|
||||||
|
2 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"#include ""winres.h""\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
3 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION 1,0,0,1 |
||||||
|
PRODUCTVERSION 1,0,0,1 |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x1L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "VALINET Solutions SRL" |
||||||
|
VALUE "FileDescription", "ExplorerPatcher Windows 7 Alt-Tab Module" |
||||||
|
VALUE "FileVersion", "1.0.0.0" |
||||||
|
VALUE "InternalName", "ep_extra_valinet.win7alttab" |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2006-2025 VALINET Solutions SRL. All rights reserved." |
||||||
|
VALUE "OriginalFilename", "ep_extra_valinet.win7alttab" |
||||||
|
VALUE "ProductName", "ExplorerPatcher" |
||||||
|
VALUE "ProductVersion", "1.0.0.0" |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
||||||
|
|
||||||
|
#endif // English (United States) resources |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 3 resource. |
||||||
|
// |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
|
|
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>16.0</VCProjectVersion> |
||||||
|
<Keyword>Win32Proj</Keyword> |
||||||
|
<ProjectGuid>{a66c5f27-dbf8-45a4-bdf3-ba54d8d82d0f}</ProjectGuid> |
||||||
|
<RootNamespace>epextravalinetwin7alttab</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_error.c" /> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_tshwnd.c" /> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowHelpers.c" /> |
||||||
|
<ClCompile Include="main.c" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="..\libs\libvalinet\valinet\hooking\iatpatch.h" /> |
||||||
|
<ClInclude Include="resource.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="Resource.rc" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
</ImportGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,44 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup> |
||||||
|
<Filter Include="Source Files"> |
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
||||||
|
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Header Files"> |
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
||||||
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Resource Files"> |
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
||||||
|
</Filter> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="main.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowHelpers.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_error.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_tshwnd.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="resource.h"> |
||||||
|
<Filter>Header Files</Filter> |
||||||
|
</ClInclude> |
||||||
|
<ClInclude Include="..\libs\libvalinet\valinet\hooking\iatpatch.h"> |
||||||
|
<Filter>Header Files</Filter> |
||||||
|
</ClInclude> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="Resource.rc"> |
||||||
|
<Filter>Resource Files</Filter> |
||||||
|
</ResourceCompile> |
||||||
|
</ItemGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,120 @@ |
|||||||
|
#include <initguid.h> |
||||||
|
#include <Windows.h> |
||||||
|
#include "../libs/libvalinet/valinet/hooking/iatpatch.h" |
||||||
|
#include "../libs/sws/SimpleWindowSwitcher/sws_WindowHelpers.h" |
||||||
|
#pragma comment(lib, "Uxtheme.lib") |
||||||
|
|
||||||
|
HMODULE hModule = NULL; |
||||||
|
HMODULE hAltTab = NULL; |
||||||
|
IOleCommandTarget* pAltTabSSO = NULL; |
||||||
|
|
||||||
|
DEFINE_GUID(CLSID_AltTabSSO, |
||||||
|
0xA1607060, 0x5D4C, 0x467A, 0xB7, 0x11, 0x2B, 0x59, 0xA6, 0xF2, 0x59, 0x57); |
||||||
|
|
||||||
|
HRESULT AltTab_DwmpActivateLivePreview(int s, HWND hWnd, int c, int d) { |
||||||
|
return S_OK; |
||||||
|
} |
||||||
|
|
||||||
|
int AltTab_LoadStringW(HINSTANCE hInstance, UINT uID, LPWSTR lpBuffer, int cchBufferMax) { |
||||||
|
if (uID == 0x3E8) { |
||||||
|
swprintf_s(lpBuffer, cchBufferMax, L"AltTab"); return 6; |
||||||
|
} |
||||||
|
else if (uID == 0x3EA) { |
||||||
|
if (cchBufferMax < MAX_PATH) return 0; |
||||||
|
sws_WindowHelpers_GetDesktopText(lpBuffer); |
||||||
|
int len = wcslen(lpBuffer); |
||||||
|
for (int i = 0; i < len; ++i) if (lpBuffer[i] == L'&') lpBuffer[i] = L'\u200E'; |
||||||
|
return len; |
||||||
|
} |
||||||
|
return LoadStringW(hInstance, uID, lpBuffer, cchBufferMax); |
||||||
|
} |
||||||
|
|
||||||
|
HTHEME AltTab_OpenThemeData(HWND hwnd, LPCWSTR pszClassList) { |
||||||
|
if (!wcscmp(pszClassList, L"AltTab")) return OpenThemeData(hwnd, L"WINDOW"); |
||||||
|
return OpenThemeData(hwnd, pszClassList); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT AltTab_DrawThemeTextEx(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int cchText, DWORD dwTextFlags, LPRECT pRect, const DTTOPTS* pOptions) { |
||||||
|
HRESULT hr = S_OK; |
||||||
|
HTHEME hTheme2 = OpenThemeData(NULL, L"TEXTSTYLE"); |
||||||
|
if (hTheme2) hr = DrawThemeTextEx(hTheme2, hdc, iPartId + 1, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions); |
||||||
|
if (hTheme2) CloseThemeData(hTheme2); |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL AltTab_IsWindowEnabled(HWND hWnd) { |
||||||
|
if (!IsWindowEnabled(hWnd)) return FALSE; |
||||||
|
BOOL isCloaked; |
||||||
|
DwmGetWindowAttribute(hWnd, DWMWA_CLOAKED, &isCloaked, sizeof(BOOL)); |
||||||
|
if (isCloaked) return FALSE; |
||||||
|
if (sws_IsShellFrameWindow(hWnd) && !_sws_GhostWindowFromHungWindow(hWnd)) return TRUE; |
||||||
|
if (_sws_IsShellManagedWindow(hWnd) && !sws_WindowHelpers_ShouldTreatShellManagedWindowAsNotShellManaged(hWnd)) return FALSE; |
||||||
|
if (sws_WindowHelpers_IsWindowShellManagedByExplorerPatcher(hWnd)) return FALSE; |
||||||
|
return TRUE; |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT AltTab_DwmExtendFrameIntoClientArea(HWND hWnd, const MARGINS* pMarInset) { |
||||||
|
HRESULT hr = DwmExtendFrameIntoClientArea(hWnd, pMarInset); |
||||||
|
sws_WindowHelpers_SetMicaMaterialForThisWindow(hWnd, TRUE); |
||||||
|
return hr; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL AltTab_PostMessageW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { |
||||||
|
if (hWnd == FindWindowW(L"Shell_TrayWnd", NULL) && uMsg == 0x5B7 && wParam == 0 && lParam == 0) { |
||||||
|
return PostMessageW(hWnd, WM_COMMAND, 407, 0); |
||||||
|
} |
||||||
|
return PostMessageW(hWnd, uMsg, wParam, lParam); |
||||||
|
} |
||||||
|
|
||||||
|
__declspec(dllexport) void clean() { |
||||||
|
if (pAltTabSSO) pAltTabSSO->lpVtbl->Release(pAltTabSSO); |
||||||
|
if (hAltTab) sws_WindowHelpers_Clear(); |
||||||
|
} |
||||||
|
|
||||||
|
__declspec(dllexport) int setup() { |
||||||
|
hAltTab = LoadLibraryW(L"AltTab.dll"); |
||||||
|
if (hAltTab) { |
||||||
|
sws_WindowHelpers_Initialize(); |
||||||
|
VnPatchIAT(hAltTab, "dwmapi.dll", "DwmExtendFrameIntoClientArea", AltTab_DwmExtendFrameIntoClientArea); |
||||||
|
VnPatchIAT(hAltTab, "dwmapi.dll", (LPCSTR)113, AltTab_DwmpActivateLivePreview); |
||||||
|
VnPatchIAT(hAltTab, "user32.dll", "PostMessageW", AltTab_PostMessageW); |
||||||
|
VnPatchIAT(hAltTab, "user32.dll", "LoadStringW", AltTab_LoadStringW); |
||||||
|
VnPatchIAT(hAltTab, "user32.dll", "IsWindowEnabled", AltTab_IsWindowEnabled); |
||||||
|
VnPatchDelayIAT(hAltTab, "uxtheme.dll", "OpenThemeData", AltTab_OpenThemeData); |
||||||
|
VnPatchDelayIAT(hAltTab, "uxtheme.dll", "DrawThemeTextEx", AltTab_DrawThemeTextEx); |
||||||
|
HRESULT(*pDllGetClassObject)(REFCLSID, REFIID, LPVOID) = GetProcAddress(hAltTab, "DllGetClassObject"); |
||||||
|
IClassFactory* pFactory = NULL; |
||||||
|
if (pDllGetClassObject && SUCCEEDED(pDllGetClassObject(&CLSID_AltTabSSO, &IID_IClassFactory, &pFactory)) && pFactory) { |
||||||
|
if (SUCCEEDED(pFactory->lpVtbl->CreateInstance(pFactory, NULL, &IID_IOleCommandTarget, &pAltTabSSO)) && pAltTabSSO) { |
||||||
|
if (SUCCEEDED(pAltTabSSO->lpVtbl->Exec(pAltTabSSO, &CGID_ShellServiceObject, 2, 0, NULL, NULL))) { |
||||||
|
printf(">>> Using Windows 7 AltTab\n"); |
||||||
|
} |
||||||
|
} |
||||||
|
pFactory->lpVtbl->Release(pFactory); |
||||||
|
} |
||||||
|
FreeLibrary(hAltTab); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL WINAPI DllMain( |
||||||
|
_In_ HINSTANCE hinstDLL, |
||||||
|
_In_ DWORD fdwReason, |
||||||
|
_In_ LPVOID lpvReserved |
||||||
|
) { |
||||||
|
switch (fdwReason) |
||||||
|
{ |
||||||
|
case DLL_PROCESS_ATTACH: |
||||||
|
DisableThreadLibraryCalls(hinstDLL); |
||||||
|
hModule = hinstDLL; |
||||||
|
break; |
||||||
|
case DLL_THREAD_ATTACH: |
||||||
|
break; |
||||||
|
case DLL_THREAD_DETACH: |
||||||
|
break; |
||||||
|
case DLL_PROCESS_DETACH: |
||||||
|
break; |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by Resource.rc
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS |
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101 |
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001 |
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001 |
||||||
|
#define _APS_NEXT_SYMED_VALUE 101 |
||||||
|
#endif |
||||||
|
#endif |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,30 @@ |
|||||||
|
#include <Windows.h> |
||||||
|
|
||||||
|
extern "C" |
||||||
|
{ |
||||||
|
|
||||||
|
HMODULE hModule = nullptr; |
||||||
|
|
||||||
|
BOOL WINAPI DllMain( |
||||||
|
_In_ HINSTANCE hinstDLL, |
||||||
|
_In_ DWORD fdwReason, |
||||||
|
_In_ LPVOID lpvReserved |
||||||
|
) |
||||||
|
{ |
||||||
|
switch (fdwReason) |
||||||
|
{ |
||||||
|
case DLL_PROCESS_ATTACH: |
||||||
|
DisableThreadLibraryCalls(hinstDLL); |
||||||
|
hModule = hinstDLL; |
||||||
|
break; |
||||||
|
case DLL_THREAD_ATTACH: |
||||||
|
break; |
||||||
|
case DLL_THREAD_DETACH: |
||||||
|
break; |
||||||
|
case DLL_PROCESS_DETACH: |
||||||
|
break; |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,161 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|ARM64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>ARM64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|ARM64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>ARM64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>17.0</VCProjectVersion> |
||||||
|
<Keyword>Win32Proj</Keyword> |
||||||
|
<ProjectGuid>{2351a0df-782c-4d74-85b7-0847d245d6b4}</ProjectGuid> |
||||||
|
<RootNamespace>epgui</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)\build\$(Configuration)\$(Platform)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<ItemDefinitionGroup> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)libs\libvalinet;$(SolutionDir)\ep_weather_host;$(SolutionDir)\ep_weather_host\$(Platform)\$(Configuration);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> |
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> |
||||||
|
<ClCompile> |
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> |
||||||
|
<ClCompile> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<PreprocessorDefinitions>NDEBUG;WINRT_NO_SOURCE_LOCATION;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="..\ExplorerPatcher\fmemopen.c" /> |
||||||
|
<ClCompile Include="..\ExplorerPatcher\getline.c" /> |
||||||
|
<ClCompile Include="..\ExplorerPatcher\Localization.cpp" /> |
||||||
|
<ClCompile Include="..\ExplorerPatcher\utility.c" /> |
||||||
|
<ClCompile Include="..\ep_weather_host_stub\$(Platform)\$(Configuration)\ep_weather_host_i.c" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="GUI.h" /> |
||||||
|
<!--<ClInclude Include="GUI2.h" />--> |
||||||
|
<ClInclude Include="pch.h" /> |
||||||
|
<ClInclude Include="resources\EPSettingsResources.h" /> |
||||||
|
<ClInclude Include="resources\EPSharedResources.h" /> |
||||||
|
<ClInclude Include="resources\resource.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="resources\ep_gui.rc" /> |
||||||
|
<ResourceCompile Include="resources\lang\ep_gui.*.rc" /> |
||||||
|
<ResourceCompile Include="..\ExplorerPatcher-L10N\resources\lang\ep_gui.*.rc" Condition="Exists('..\ExplorerPatcher-L10N\resources\lang')" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<None Include="resources\settings.reg" /> |
||||||
|
<None Include="resources\settings10.reg" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="dllmain.cpp" /> |
||||||
|
<ClCompile Include="GUI.c" /> |
||||||
|
<!--<ClCompile Include="GUI2.cpp"> |
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader> |
||||||
|
</ClCompile>--> |
||||||
|
<ClCompile Include="pch.cpp"> |
||||||
|
<PrecompiledHeader>Create</PrecompiledHeader> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
||||||
|
<PropertyGroup> |
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> |
||||||
|
</PropertyGroup> |
||||||
|
</Target> |
||||||
|
</Project> |
||||||
@ -0,0 +1,387 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
// 1001 - 2200
|
||||||
|
|
||||||
|
#define IDS_TB 1001 |
||||||
|
#define IDS_TB_STYLE 1002 |
||||||
|
#define IDS_TB_STYLE_0 1003 |
||||||
|
#define IDS_TB_STYLE_1 1004 |
||||||
|
#define IDS_TB_MORE 1005 |
||||||
|
#define IDS_TB_CUSTOMIZETRAYICONS 1006 |
||||||
|
#define IDS_TB_CUSTOMIZESYSTEMICONS 1007 |
||||||
|
#define IDS_TB_PRIMARYTBPOS 1008 |
||||||
|
#define IDS_TB_POSBOTTOM 1009 |
||||||
|
#define IDS_TB_POSTOP 1010 |
||||||
|
#define IDS_TB_POSLEFT 1011 |
||||||
|
#define IDS_TB_POSRIGHT 1012 |
||||||
|
#define IDS_TB_SECONDARYTBPOS 1013 |
||||||
|
#define IDS_TB_EXTRABTN 1014 |
||||||
|
#define IDS_TB_EXTRABTN_0 1015 |
||||||
|
#define IDS_TB_EXTRABTN_2 1016 |
||||||
|
#define IDS_TB_EXTRABTN_1 1017 |
||||||
|
#define IDS_TB_SEARCHMODE_W11 1018 |
||||||
|
#define IDS_TB_SEARCHMODE 1019 |
||||||
|
#define IDS_TB_SEARCHMODE_0 1020 |
||||||
|
#define IDS_TB_SEARCHMODE_1 1021 |
||||||
|
#define IDS_TB_SEARCHMODE_2 1022 |
||||||
|
#define IDS_TB_CORTANABTN 1023 |
||||||
|
#define IDS_TB_TASKVIEWBTN 1024 |
||||||
|
#define IDS_TB_WIDGETSBTN 1025 |
||||||
|
#define IDS_TB_AUTOHIDETB 1026 |
||||||
|
#define IDS_TB_STARTBTNSTYLE 1027 |
||||||
|
#define IDS_TB_STARTBTNSTYLE_0 1028 |
||||||
|
#define IDS_TB_STARTBTNSTYLE_1 1029 |
||||||
|
#define IDS_TB_PRIMARYTBALIGN 1030 |
||||||
|
#define IDS_TB_TBALIGN_0 1031 |
||||||
|
#define IDS_TB_TBALIGN_1 1032 |
||||||
|
#define IDS_TB_TBALIGN_5 1033 |
||||||
|
#define IDS_TB_TBALIGN_3 1034 |
||||||
|
#define IDS_TB_TBALIGN_7 1035 |
||||||
|
#define IDS_TB_SECONDARYTBALIGN 1036 |
||||||
|
#define IDS_TB_PRIMARYTBGLOM 1037 |
||||||
|
#define IDS_TB_GLOM_0_D 1038 |
||||||
|
#define IDS_TB_GLOM_0 1039 |
||||||
|
#define IDS_TB_GLOM_1 1040 |
||||||
|
#define IDS_TB_GLOM_2 1042 |
||||||
|
#define IDS_TB_SECONDARYTBGLOM 1043 |
||||||
|
#define IDS_TB_ICONSIZE 1044 |
||||||
|
#define IDS_TB_ICONSIZE_1 1045 |
||||||
|
#define IDS_TB_ICONSIZE_0 1046 |
||||||
|
#define IDS_TB_STYLE_2 1047 |
||||||
|
#define IDS_TB_ALTIMPL_NOTICE 1048 |
||||||
|
|
||||||
|
#define IDS_TRAY 1101 |
||||||
|
#define IDS_TRAY_SKINMENUS 1102 |
||||||
|
#define IDS_TRAY_CENTERMENUS 1103 |
||||||
|
#define IDS_TRAY_FLYOUTMENUS 1104 |
||||||
|
#define IDS_TRAY_TOUCHKB 1105 |
||||||
|
#define IDS_TRAY_SHOWSECONDS 1106 |
||||||
|
#define IDS_TRAY_CCBTN 1107 |
||||||
|
#define IDS_TRAY_SHOWDESKTOPBTN 1108 |
||||||
|
#define IDS_TRAY_SHOWDESKTOPBTN_1 1109 |
||||||
|
#define IDS_TRAY_SHOWDESKTOPBTN_0 1110 |
||||||
|
#define IDS_TRAY_SHOWDESKTOPBTN_2 1111 |
||||||
|
#define IDS_TRAY_SKINICONS 1112 |
||||||
|
#define IDS_TRAY_REPLACENETWORK_L1 1113 |
||||||
|
#define IDS_TRAY_REPLACENETWORK_L2 1114 |
||||||
|
#define IDS_TRAY_REPLACENETWORK_0 1115 |
||||||
|
#define IDS_TRAY_REPLACENETWORK_1 1116 |
||||||
|
#define IDS_TRAY_REPLACENETWORK_2 1117 |
||||||
|
#define IDS_TRAY_SYSICONBEHAVIOR 1118 |
||||||
|
#define IDS_TRAY_NETWORK 1119 |
||||||
|
#define IDS_TRAY_NETWORK_6 1120 |
||||||
|
#define IDS_TRAY_NETWORK_5 1121 |
||||||
|
#define IDS_TRAY_NETWORK_0 1122 |
||||||
|
#define IDS_TRAY_NETWORK_2 1123 |
||||||
|
#define IDS_TRAY_NETWORK_1 1124 |
||||||
|
#define IDS_TRAY_SOUND 1125 |
||||||
|
#define IDS_TRAY_SOUND_1 1126 |
||||||
|
#define IDS_TRAY_SOUND_0 1127 |
||||||
|
#define IDS_TRAY_CLOCK 1128 |
||||||
|
#define IDS_TRAY_CLOCK_2 1129 |
||||||
|
#define IDS_TRAY_CLOCK_0 1130 |
||||||
|
#define IDS_TRAY_CLOCK_1 1131 |
||||||
|
#define IDS_TRAY_CLOCK_2_W10 1132 |
||||||
|
#define IDS_TRAY_BATTERY 1133 |
||||||
|
#define IDS_TRAY_BATTERY_0 1134 |
||||||
|
#define IDS_TRAY_BATTERY_1 1135 |
||||||
|
#define IDS_TRAY_LANGSWITCHER 1136 |
||||||
|
#define IDS_TRAY_LANGSWITCHER_0 1137 |
||||||
|
#define IDS_TRAY_LANGSWITCHER_1_21H2 1138 |
||||||
|
#define IDS_TRAY_LANGSWITCHER_7 1140 |
||||||
|
#define IDS_TRAY_LANGSWITCHER_1 1141 |
||||||
|
#define IDS_TRAY_LANGSWITCHER_4 1142 |
||||||
|
#define IDS_TRAY_OVERFLOWSTYLE 1143 |
||||||
|
#define IDS_TRAY_OVERFLOWSTYLE_0 1144 |
||||||
|
#define IDS_TRAY_OVERFLOWSTYLE_1 1145 |
||||||
|
|
||||||
|
#define IDS_EXP 1201 |
||||||
|
#define IDS_EXP_SHEXT_L1 1202 |
||||||
|
#define IDS_EXP_SHEXT_L2 1203 |
||||||
|
#define IDS_EXP_SHEXT_LEARN 1204 |
||||||
|
#define IDS_EXP_SHEXT_REGISTER 1205 |
||||||
|
#define IDS_EXP_DISABLECTXMENU 1206 |
||||||
|
#define IDS_EXP_LEGACYFTDIALOG 1207 |
||||||
|
#define IDS_EXP_CLASSICDRIVEGROUP 1208 |
||||||
|
#define IDS_EXP_CTRLINTF 1209 |
||||||
|
#define IDS_EXP_CTRLINTF_0_W11 1210 |
||||||
|
#define IDS_EXP_CTRLINTF_3 1211 |
||||||
|
#define IDS_EXP_CTRLINTF_4 1212 |
||||||
|
#define IDS_EXP_CTRLINTF_0_W10 1213 |
||||||
|
#define IDS_EXP_CTRLINTF_1_W11 1214 |
||||||
|
#define IDS_EXP_CTRLINTF_2 1215 |
||||||
|
#define IDS_EXP_NEWWINDOWS 1216 |
||||||
|
#define IDS_EXP_IMMERSIVEMENUS 1217 |
||||||
|
#define IDS_EXP_DISABLENAVBAR 1218 |
||||||
|
#define IDS_EXP_DISABLESEARCHBAR 1219 |
||||||
|
#define IDS_EXP_SHRINKADDRESSBAR 1220 |
||||||
|
#define IDS_EXP_HIDESEARCHBAR 1221 |
||||||
|
#define IDS_EXP_TITLEBAR 1222 |
||||||
|
#define IDS_EXP_TITLEBAR_0 1223 |
||||||
|
#define IDS_EXP_TITLEBAR_1 1224 |
||||||
|
#define IDS_EXP_TITLEBAR_2 1225 |
||||||
|
#define IDS_EXP_TITLEBAR_3 1226 |
||||||
|
#define IDS_EXP_MICA 1227 |
||||||
|
|
||||||
|
#define IDS_START 1301 |
||||||
|
#define IDS_START_STYLE 1302 |
||||||
|
#define IDS_START_STYLE_0 1303 |
||||||
|
#define IDS_START_STYLE_1 1304 |
||||||
|
#define IDS_START_MORE 1305 |
||||||
|
#define IDS_START_POSITION 1306 |
||||||
|
#define IDS_START_POSITION_0 1307 |
||||||
|
#define IDS_START_POSITION_1 1308 |
||||||
|
#define IDS_START_MAXFREQAPPS 1309 |
||||||
|
#define IDS_START_MAXFREQAPPS_0 1310 |
||||||
|
#define IDS_START_MAXFREQAPPS_6 1311 |
||||||
|
#define IDS_START_MAXFREQAPPS_99999 1312 |
||||||
|
#define IDS_START_MONITOROVERRIDE_L1 1313 |
||||||
|
#define IDS_START_MONITOROVERRIDE_L2 1314 |
||||||
|
#define IDS_START_MONITOROVERRIDE_1 1315 |
||||||
|
#define IDS_START_MONITOROVERRIDE_0 1316 |
||||||
|
#define IDS_START_MONITOROVERRIDE_2 1317 |
||||||
|
#define IDS_START_MONITOROVERRIDE_3 1318 |
||||||
|
#define IDS_START_MONITOROVERRIDE_4 1319 |
||||||
|
#define IDS_START_MONITOROVERRIDE_5 1320 |
||||||
|
#define IDS_START_MONITOROVERRIDE_6 1321 |
||||||
|
#define IDS_START_MONITOROVERRIDE_7 1322 |
||||||
|
#define IDS_START_MONITOROVERRIDE_8 1323 |
||||||
|
#define IDS_START_MONITOROVERRIDE_9 1324 |
||||||
|
#define IDS_START_NORECOMMENDED 1325 |
||||||
|
#define IDS_START_MAKEALLAPPSDEFAULT 1326 |
||||||
|
#define IDS_START_SHOWMORETILES 1327 |
||||||
|
#define IDS_START_CORNERPREF 1328 |
||||||
|
#define IDS_START_CORNERPREF_1 1329 |
||||||
|
#define IDS_START_CORNERPREF_2 1330 |
||||||
|
#define IDS_START_CORNERPREF_0 1331 |
||||||
|
#define IDS_START_DISPLAYMODE 1332 |
||||||
|
#define IDS_START_DISPLAYMODE_0 1333 |
||||||
|
#define IDS_START_DISPLAYMODE_1 1334 |
||||||
|
#define IDS_START_DISPLAYMODE_2 1335 |
||||||
|
#define IDS_START_APPLIST 1336 |
||||||
|
#define IDS_START_APPLIST_0 1337 |
||||||
|
#define IDS_START_APPLIST_3 1338 |
||||||
|
#define IDS_START_APPLIST_1 1339 |
||||||
|
#define IDS_START_NOTICE 1340 |
||||||
|
#define IDS_START_WIN10_NOTICE 1341 |
||||||
|
|
||||||
|
#define IDS_AT 1401 |
||||||
|
#define IDS_AT_STYLE 1402 |
||||||
|
#define IDS_AT_STYLE_0_W11 1403 |
||||||
|
#define IDS_AT_STYLE_0_W10 1404 |
||||||
|
#define IDS_AT_STYLE_3 1405 |
||||||
|
#define IDS_AT_STYLE_1 1406 |
||||||
|
#define IDS_AT_STYLE_2 1407 |
||||||
|
#define IDS_AT_SWS_INCLUDEWALLPAPER 1408 |
||||||
|
#define IDS_AT_SWS_PRIMARYONLY 1409 |
||||||
|
#define IDS_AT_SWS_PERMONITOR 1410 |
||||||
|
#define IDS_AT_SWS_GROUPWINDOWS 1411 |
||||||
|
#define IDS_AT_SWS_NOPERAPP 1412 |
||||||
|
#define IDS_AT_SWS_THEME 1413 |
||||||
|
#define IDS_AT_SWS_THEME_0 1414 |
||||||
|
#define IDS_AT_SWS_THEME_1 1415 |
||||||
|
#define IDS_AT_SWS_THEME_2 1416 |
||||||
|
#define IDS_AT_SWS_OPACITY 1417 |
||||||
|
#define IDS_AT_SWS_OPACITY_100 1418 |
||||||
|
#define IDS_AT_SWS_OPACITY_95 1419 |
||||||
|
#define IDS_AT_SWS_COLORSCHEME 1420 |
||||||
|
#define IDS_AT_SWS_COLORSCHEME_0 1421 |
||||||
|
#define IDS_AT_SWS_COLORSCHEME_1 1422 |
||||||
|
#define IDS_AT_SWS_COLORSCHEME_2 1423 |
||||||
|
#define IDS_AT_SWS_CORNERPREF 1424 |
||||||
|
#define IDS_AT_SWS_CORNERPREF_2 1425 |
||||||
|
#define IDS_AT_SWS_CORNERPREF_3 1426 |
||||||
|
#define IDS_AT_SWS_CORNERPREF_1 1427 |
||||||
|
#define IDS_AT_SWS_ROWHEIGHT 1428 |
||||||
|
#define IDS_AT_SWS_ROWHEIGHT_230 1429 |
||||||
|
#define IDS_AT_SWS_MAXWIDTH 1430 |
||||||
|
#define IDS_AT_SWS_MAXWIDTH_100 1431 |
||||||
|
#define IDS_AT_SWS_MAXWIDTH_80 1432 |
||||||
|
#define IDS_AT_SWS_MAXHEIGHT 1433 |
||||||
|
#define IDS_AT_SWS_MAXHEIGHT_100 1434 |
||||||
|
#define IDS_AT_SWS_MAXHEIGHT_80 1435 |
||||||
|
#define IDS_AT_SWS_PADDING 1436 |
||||||
|
#define IDS_AT_SWS_PADDING_20 1437 |
||||||
|
#define IDS_AT_SWS_PADDING_0 1438 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY 1439 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_0 1440 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_25 1441 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_50 1442 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_75 1443 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_100 1444 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_125 1445 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_150 1446 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_200 1447 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_300 1448 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_400 1449 |
||||||
|
#define IDS_AT_SWS_SHOWDELAY_500 1450 |
||||||
|
#define IDS_AT_SWS_SCROLLWHEEL 1451 |
||||||
|
#define IDS_AT_SWS_SCROLLWHEEL_0 1452 |
||||||
|
#define IDS_AT_SWS_SCROLLWHEEL_1 1453 |
||||||
|
#define IDS_AT_SWS_SCROLLWHEEL_2 1454 |
||||||
|
#define IDS_AT_SWS_LEARN 1455 |
||||||
|
|
||||||
|
#define IDS_WEATHER 1501 |
||||||
|
#define IDS_WEATHER_SHOW 1502 |
||||||
|
#define IDS_WEATHER_LOC 1503 |
||||||
|
#define IDS_WEATHER_LOC_PROMPT 1504 |
||||||
|
#define IDS_WEATHER_LOC_DEFAULT 1505 |
||||||
|
#define IDS_WEATHER_LAYOUT 1506 |
||||||
|
#define IDS_WEATHER_LAYOUT_0 1507 |
||||||
|
#define IDS_WEATHER_LAYOUT_3 1508 |
||||||
|
#define IDS_WEATHER_LAYOUT_1 1509 |
||||||
|
#define IDS_WEATHER_LAYOUT_4 1510 |
||||||
|
#define IDS_WEATHER_LAYOUT_5 1511 |
||||||
|
#define IDS_WEATHER_SIZE 1512 |
||||||
|
#define IDS_WEATHER_SIZE_0 1513 |
||||||
|
#define IDS_WEATHER_SIZE_2 1514 |
||||||
|
#define IDS_WEATHER_SIZE_1 1515 |
||||||
|
#define IDS_WEATHER_POSITION 1516 |
||||||
|
#define IDS_WEATHER_POSITION_0 1517 |
||||||
|
#define IDS_WEATHER_POSITION_1 1518 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ 1519 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_60 1520 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_300 1521 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_900 1522 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_1200 1523 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_1800 1524 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_3600 1525 |
||||||
|
#define IDS_WEATHER_UPDATEFREQ_7200 1526 |
||||||
|
#define IDS_WEATHER_TEMPUNIT 1527 |
||||||
|
#define IDS_WEATHER_TEMPUNIT_0 1528 |
||||||
|
#define IDS_WEATHER_TEMPUNIT_1 1529 |
||||||
|
#define IDS_WEATHER_LANG 1533 |
||||||
|
#define IDS_WEATHER_LANG_PROMPT 1534 |
||||||
|
#define IDS_WEATHER_LANG_DEFAULT 1535 |
||||||
|
#define IDS_WEATHER_COLORSCHEME 1536 |
||||||
|
#define IDS_WEATHER_COLORSCHEME_0 1537 |
||||||
|
#define IDS_WEATHER_COLORSCHEME_1 1538 |
||||||
|
#define IDS_WEATHER_COLORSCHEME_2 1539 |
||||||
|
#define IDS_WEATHER_CORNERPREF 1540 |
||||||
|
#define IDS_WEATHER_CORNERPREF_2 1541 |
||||||
|
#define IDS_WEATHER_CORNERPREF_3 1542 |
||||||
|
#define IDS_WEATHER_CORNERPREF_1 1543 |
||||||
|
#define IDS_WEATHER_ICONPACK 1544 |
||||||
|
#define IDS_WEATHER_ICONPACK_0 1545 |
||||||
|
#define IDS_WEATHER_ICONPACK_1 1546 |
||||||
|
#define IDS_WEATHER_CONTENTSMODE 1547 |
||||||
|
#define IDS_WEATHER_CONTENTSMODE_0 1548 |
||||||
|
#define IDS_WEATHER_CONTENTSMODE_1 1549 |
||||||
|
#define IDS_WEATHER_ZOOM 1550 |
||||||
|
#define IDS_WEATHER_ZOOM_100 1551 |
||||||
|
#define IDS_WEATHER_LEARN 1552 |
||||||
|
#define IDS_WEATHER_LASTUPDATE 1553 |
||||||
|
#define IDS_WEATHER_UPDATE 1554 |
||||||
|
#define IDS_WEATHER_CLEAR 1555 |
||||||
|
#define IDS_WEATHER_CLEAR_PROMPT 1556 |
||||||
|
#define IDS_WEATHER_CLEAR_WAIT 1557 |
||||||
|
#define IDS_WEATHER_CLEAR_SUCCESS 1558 |
||||||
|
#define IDS_WEATHER_CLEAR_FAILED 1559 |
||||||
|
|
||||||
|
#define IDS_SP 1601 |
||||||
|
#define IDS_SP_HIDEICON 1602 |
||||||
|
#define IDS_SP_DESKTOPMENU 1603 |
||||||
|
#define IDS_SP_DESKTOPMENU_0 1604 |
||||||
|
#define IDS_SP_DESKTOPMENU_32 1605 |
||||||
|
#define IDS_SP_DESKTOPMENU_48 1606 |
||||||
|
#define IDS_SP_DESKTOPMENU_288 1607 |
||||||
|
#define IDS_SP_DESKTOPMENU_800 1608 |
||||||
|
#define IDS_SP_DESKTOPMENU_304 1609 |
||||||
|
#define IDS_SP_DESKTOPMENU_816 1610 |
||||||
|
#define IDS_SP_DESKTOPMENU_1008 1611 |
||||||
|
#define IDS_SP_UPDATEFREQ 1612 |
||||||
|
#define IDS_SP_UPDATEFREQ_0 1613 |
||||||
|
#define IDS_SP_UPDATEFREQ_60 1614 |
||||||
|
#define IDS_SP_UPDATEFREQ_300 1615 |
||||||
|
#define IDS_SP_UPDATEFREQ_900 1616 |
||||||
|
#define IDS_SP_UPDATEFREQ_1200 1617 |
||||||
|
#define IDS_SP_UPDATEFREQ_1800 1618 |
||||||
|
#define IDS_SP_UPDATEFREQ_3600 1619 |
||||||
|
#define IDS_SP_UPDATEFREQ_7200 1620 |
||||||
|
#define IDS_SP_UPDATEFREQ_21600 1621 |
||||||
|
#define IDS_SP_UPDATEFREQ_43200 1622 |
||||||
|
#define IDS_SP_UPDATEFREQ_86400 1623 |
||||||
|
#define IDS_SP_MOREOPTIONS 1624 |
||||||
|
|
||||||
|
#define IDS_OTHER 1701 |
||||||
|
#define IDS_OTHER_REMEMBERLAST 1702 |
||||||
|
#define IDS_OTHER_CLOCKFLYOUT 1703 |
||||||
|
#define IDS_OTHER_TOOLBARSEPARATORS 1704 |
||||||
|
#define IDS_OTHER_WINXPROPERTIES 1705 |
||||||
|
#define IDS_OTHER_DONTUSEPOWERSHELL 1706 |
||||||
|
#define IDS_OTHER_WINXACCELERATOR 1707 |
||||||
|
#define IDS_OTHER_DISABLEOFFICE 1708 |
||||||
|
#define IDS_OTHER_DISABLEWINF 1709 |
||||||
|
#define IDS_OTHER_DISABLERC 1710 |
||||||
|
#define IDS_OTHER_DISABLEAEROSNAP 1711 |
||||||
|
#define IDS_OTHER_SNAPASSISTSTYLE 1712 |
||||||
|
#define IDS_OTHER_SNAPASSISTSTYLE_0 1713 |
||||||
|
#define IDS_OTHER_SNAPASSISTSTYLE_3 1714 |
||||||
|
#define IDS_OTHER_PWRBTNACTION 1715 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_256 1716 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_1 1717 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_16 1718 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_64 1719 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_2 1720 |
||||||
|
#define IDS_OTHER_PWRBTNACTION_4 1721 |
||||||
|
#define IDS_OTHER_NOREDIRECT 1722 |
||||||
|
#define IDS_OTHER_NOREDIRECT_SYSTEM 1723 |
||||||
|
#define IDS_OTHER_NOREDIRECT_PROGRAMS 1724 |
||||||
|
#define IDS_OTHER_NOREDIRECT_DATETIME 1725 |
||||||
|
#define IDS_OTHER_NOREDIRECT_TRAYICONS 1726 |
||||||
|
#define IDS_OTHER_LOGONLOGOFFSHUTDOWNSOUNDS 1727 |
||||||
|
|
||||||
|
#define IDS_UPDATES 1801 |
||||||
|
#define IDS_UPDATES_POLICY 1802 |
||||||
|
#define IDS_UPDATES_POLICY_1 1803 |
||||||
|
#define IDS_UPDATES_POLICY_0 1804 |
||||||
|
#define IDS_UPDATES_POLICY_2 1805 |
||||||
|
#define IDS_UPDATES_PREFER_STAGING 1806 |
||||||
|
#define IDS_UPDATES_DOWNGRADES 1807 |
||||||
|
#define IDS_UPDATES_UPDATESERVERS 1808 |
||||||
|
#define IDS_UPDATES_RELEASES 1809 |
||||||
|
#define IDS_UPDATES_RELEASES_PROMPT 1810 |
||||||
|
#define IDS_UPDATES_STAGING 1811 |
||||||
|
#define IDS_UPDATES_STAGING_PROMPT 1812 |
||||||
|
#define IDS_UPDATES_CHECK 1813 |
||||||
|
#define IDS_UPDATES_INSTALL 1814 |
||||||
|
#define IDS_UPDATES_CHANGES 1815 |
||||||
|
#define IDS_UPDATES_LEARN 1816 |
||||||
|
#define IDS_UPDATES_USELOCAL 1817 |
||||||
|
|
||||||
|
#define IDS_ADV 1901 |
||||||
|
#define IDS_ADV_DISCLAIMER 1902 |
||||||
|
#define IDS_ADV_LEARN 1903 |
||||||
|
#define IDS_ADV_CONSOLE 1904 |
||||||
|
#define IDS_ADV_MEMCHECK 1905 |
||||||
|
#define IDS_ADV_AUTOHIDE 1906 |
||||||
|
#define IDS_ADV_PAINTDESKTOPVERSION 1907 |
||||||
|
#define IDS_ADV_CLASSICTHEME 1908 |
||||||
|
#define IDS_ADV_SYSLISTVIEW32 1909 |
||||||
|
#define IDS_ADV_NOPROPERTIES 1910 |
||||||
|
#define IDS_ADV_SYMBOLS 1911 |
||||||
|
#define IDS_ADV_PINNEDITEMS 1912 |
||||||
|
#define IDS_ADV_REMOVEEXTRAGAP 1913 |
||||||
|
#define IDS_ADV_XAMLSOUNDS 1927 |
||||||
|
|
||||||
|
#define IDS_ABOUT 2001 |
||||||
|
#define IDS_ABOUT_VERSION 2002 |
||||||
|
#define IDS_ABOUT_PROJECT 2003 |
||||||
|
#define IDS_ABOUT_AUTHOR 2004 |
||||||
|
#define IDS_ABOUT_OS 2005 |
||||||
|
#define IDS_ABOUT_GITHUB 2006 |
||||||
|
#define IDS_ABOUT_WEBSITE 2007 |
||||||
|
#define IDS_ABOUT_DONATE 2009 |
||||||
|
#define IDS_ABOUT_FAQ 2010 |
||||||
|
#define IDS_ABOUT_SETTINGS 2011 |
||||||
|
#define IDS_ABOUT_IMPORT 2012 |
||||||
|
#define IDS_ABOUT_EXPORT 2013 |
||||||
|
#define IDS_ABOUT_EXPORT_SUCCESS 2014 |
||||||
|
#define IDS_ABOUT_RESET 2015 |
||||||
|
|
||||||
|
#define IDS_UNINSTALL 2101 |
||||||
|
#define IDS_UNINSTALL_UNINSTALL 2102 |
||||||
|
|
||||||
|
#define IDS_FOOTER_RESTART 2201 |
||||||
|
|
||||||
|
#define IDS_MAINTENANCE 2301 |
||||||
@ -0,0 +1,39 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
// 301-350
|
||||||
|
|
||||||
|
#define IDS_UPDATES_CHECKING_T 301 |
||||||
|
#define IDS_UPDATES_AVAILABLE_T 302 |
||||||
|
#define IDS_UPDATES_AVAILABLE_T_U 303 |
||||||
|
#define IDS_UPDATES_AVAILABLE_B 304 |
||||||
|
#define IDS_UPDATES_ISLATEST_T 305 |
||||||
|
#define IDS_UPDATES_ISLATEST_B 306 |
||||||
|
#define IDS_UPDATES_CHECKFAILED_T 307 |
||||||
|
#define IDS_UPDATES_CHECKFAILED_B 308 |
||||||
|
#define IDS_UPDATES_DOWNLOADING_T 309 |
||||||
|
#define IDS_UPDATES_SUCCESS_T 310 |
||||||
|
#define IDS_UPDATES_DLFAILED_T 311 |
||||||
|
#define IDS_UPDATES_DLFAILED_B 312 |
||||||
|
#define IDS_UPDATES_INSTALLEDVER 313 |
||||||
|
#define IDS_UPDATES_PROMPT 314 |
||||||
|
#define IDS_UPDATES_AVAILABLE_A 315 |
||||||
|
#define IDS_UPDATES_DOWNLOADING_0 316 |
||||||
|
|
||||||
|
// 351-400
|
||||||
|
|
||||||
|
#define IDS_SYM_DL_T 351 |
||||||
|
#define IDS_SYM_DL_B 352 |
||||||
|
#define IDS_SYM_SUCCESS_T 353 |
||||||
|
#define IDS_SYM_SUCCESS_B 354 |
||||||
|
#define IDS_SYM_FAILEDSOME_T 355 |
||||||
|
#define IDS_SYM_FAILEDSOME_B 356 |
||||||
|
#define IDS_SYM_FAILEDALL_T 357 |
||||||
|
#define IDS_SYM_FAILEDALL_B 358 |
||||||
|
|
||||||
|
// 401-500
|
||||||
|
|
||||||
|
#define IDS_CRASH_TITLE 401 |
||||||
|
#define IDS_CRASH_BODY 402 |
||||||
|
#define IDS_CRASH_ONCE 403 |
||||||
|
#define IDS_CRASH_MULTIPLE 404 |
||||||
|
#define IDS_CRASH_DISMISS 405 |
||||||
@ -0,0 +1,121 @@ |
|||||||
|
// Microsoft Visual C++ generated resource script. |
||||||
|
// |
||||||
|
#include "resource.h" |
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 2 resource. |
||||||
|
// |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// English (United States) resources |
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
#pragma code_page(1252) |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// TEXTINCLUDE |
||||||
|
// |
||||||
|
|
||||||
|
1 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"resource.h\0" |
||||||
|
END |
||||||
|
|
||||||
|
2 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"#include ""winres.h""\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
3 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
#include "..\version.h" |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION VER_FILE |
||||||
|
PRODUCTVERSION VER_PRODUCT |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x1L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "VALINET Solutions SRL" |
||||||
|
VALUE "FileDescription", "ExplorerPatcher Settings" |
||||||
|
VER_FILE_STRING |
||||||
|
VALUE "InternalName", "ep_gui.dll" |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2006-2025 VALINET Solutions SRL. All rights reserved." |
||||||
|
VALUE "OriginalFilename", "ep_gui.dll" |
||||||
|
VALUE "ProductName", "ExplorerPatcher" |
||||||
|
VER_PRODUCT_STRING |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// RCDATA |
||||||
|
// |
||||||
|
|
||||||
|
IDR_REGISTRY1 RCDATA "resources\settings.reg" |
||||||
|
IDR_REGISTRY2 RCDATA "resources\settings10.reg" |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// String Table |
||||||
|
// |
||||||
|
|
||||||
|
STRINGTABLE |
||||||
|
BEGIN |
||||||
|
IDS_PRODUCTNAME "ExplorerPatcher" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // English (United States) resources |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 3 resource. |
||||||
|
// |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
|
|
||||||
@ -0,0 +1,434 @@ |
|||||||
|
#include "resources/resource.h" |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
|
||||||
|
STRINGTABLE |
||||||
|
BEGIN |
||||||
|
IDS_UPDATES_CHECKING_T "Checking for updates…" |
||||||
|
IDS_UPDATES_AVAILABLE_T "Version %d.%d.%d.%d is available" |
||||||
|
IDS_UPDATES_AVAILABLE_T_U "New version available" |
||||||
|
IDS_UPDATES_AVAILABLE_B "Click here to learn more about this update." |
||||||
|
IDS_UPDATES_AVAILABLE_A "Update now" |
||||||
|
IDS_UPDATES_ISLATEST_T "No updates are available" |
||||||
|
IDS_UPDATES_ISLATEST_B "Please check back later." |
||||||
|
IDS_UPDATES_CHECKFAILED_T "Unable to check for updates" |
||||||
|
IDS_UPDATES_CHECKFAILED_B "Make sure that you are connected to the Internet and that the remote server is online." |
||||||
|
IDS_UPDATES_DOWNLOADING_T "Downloading and installing updates…" |
||||||
|
IDS_UPDATES_DOWNLOADING_0 "Preparing…" |
||||||
|
IDS_UPDATES_SUCCESS_T "Update successful" |
||||||
|
IDS_UPDATES_DLFAILED_T "Update failed" |
||||||
|
IDS_UPDATES_DLFAILED_B "The user has cancelled the process or an error has occured when attempting to install this update." |
||||||
|
IDS_UPDATES_INSTALLEDVER "Installed version: %d.%d.%d.%d" |
||||||
|
IDS_UPDATES_PROMPT "Would you like to install an update for ExplorerPatcher?\n\nDownloaded from:\n%s" |
||||||
|
|
||||||
|
IDS_SYM_DL_T "Downloading symbols for OS build %s, please wait…" |
||||||
|
IDS_SYM_DL_B "This may take several minutes. For now, ExplorerPatcher may have limited and/or broken functionality. Click here to learn more about symbols." |
||||||
|
IDS_SYM_SUCCESS_T "Successfully downloaded symbols for OS build %s" |
||||||
|
IDS_SYM_SUCCESS_B "Please restart File Explorer to restore proper functionality." |
||||||
|
IDS_SYM_FAILEDSOME_T "Downloaded some symbols for OS build %s" |
||||||
|
IDS_SYM_FAILEDSOME_B "Some other symbols could not be downloaded. This may be due to the current OS build being too recent or the Internet connection being unstable." |
||||||
|
IDS_SYM_FAILEDALL_T "Failed to download symbols for OS build %s" |
||||||
|
IDS_SYM_FAILEDALL_B "No symbols could be downloaded for this build. This may be due to the current OS build being too recent or the Internet connection being unavailable or unstable." |
||||||
|
|
||||||
|
IDS_CRASH_TITLE "Unfortunately, File Explorer is crashing :(" |
||||||
|
IDS_CRASH_BODY "It seems that File Explorer closed unexpectedly %1$s in less than %2$d seconds each time when starting up. This might indicate a problem caused by ExplorerPatcher, which might be unaware of recent changes in Windows, for example when running on a new OS build.\nHere are a few recommendations:\n• If an updated version is available, you can <A HREF=""%3$s"">update ExplorerPatcher and restart File Explorer</A>.\n• On GitHub, you can <A HREF=""%4$s"">view releases</A>, <A HREF=""%5$s"">check the current status</A>, <A HREF=""%6$s"">discuss</A> or <A HREF=""%7$s"">review the latest issues</A>.\n• If you suspect this is not caused by ExplorerPatcher, please uninstall any recently installed shell extensions or similar utilities.\n• If no fix is available for the time being, you can <A HREF=""%8$s"">uninstall ExplorerPatcher</A>, and then later reinstall it when a fix is published on GitHub. Rest assured, even if you uninstall, your program configuration will be preserved.\n\nI am sorry for the inconvenience this might cause; I am doing my best to try to keep this program updated and working.\n\nExplorerPatcher is disabled until the next File Explorer restart, in order to allow you to perform maintenance tasks and take the necessary actions." |
||||||
|
IDS_CRASH_ONCE "once" |
||||||
|
IDS_CRASH_MULTIPLE "%d times" |
||||||
|
IDS_CRASH_DISMISS "Dismiss" |
||||||
|
|
||||||
|
IDS_TB "Taskbar" |
||||||
|
|
||||||
|
IDS_TB_STYLE "Taskbar style" |
||||||
|
IDS_TB_STYLE_0 "Windows 11 (default)" |
||||||
|
IDS_TB_STYLE_1 "Windows 10" |
||||||
|
IDS_TB_STYLE_2 "Windows 10 (ExplorerPatcher)" |
||||||
|
IDS_TB_MORE "More taskbar options in the Settings app" |
||||||
|
IDS_TB_CUSTOMIZETRAYICONS "Customize notification area icons" |
||||||
|
IDS_TB_CUSTOMIZESYSTEMICONS "Customize system icons in the notification area" |
||||||
|
IDS_TB_PRIMARYTBPOS "Primary taskbar location on screen" |
||||||
|
IDS_TB_POSBOTTOM "Bottom (default)" |
||||||
|
IDS_TB_POSTOP "Top" |
||||||
|
IDS_TB_POSLEFT "Left" |
||||||
|
IDS_TB_POSRIGHT "Right" |
||||||
|
IDS_TB_SECONDARYTBPOS "Secondary taskbar(s) location on screen" |
||||||
|
IDS_TB_EXTRABTN "Extra button should be" |
||||||
|
IDS_TB_EXTRABTN_0 "Hidden (default)" |
||||||
|
IDS_TB_EXTRABTN_2 "Shown and open Cortana" |
||||||
|
IDS_TB_EXTRABTN_1 "Shown and open Widgets" |
||||||
|
IDS_TB_SEARCHMODE_W11 "Show Search button" |
||||||
|
IDS_TB_SEARCHMODE "Search" |
||||||
|
IDS_TB_SEARCHMODE_0 "Hidden" |
||||||
|
IDS_TB_SEARCHMODE_1 "Show search icon" |
||||||
|
IDS_TB_SEARCHMODE_2 "Show search box" |
||||||
|
IDS_TB_CORTANABTN "Show Cortana button" |
||||||
|
IDS_TB_TASKVIEWBTN "Show Task view button" |
||||||
|
IDS_TB_WIDGETSBTN "Show Widgets button" |
||||||
|
IDS_TB_AUTOHIDETB "Automatically hide the taskbar" |
||||||
|
IDS_TB_STARTBTNSTYLE "Start button style" |
||||||
|
IDS_TB_STARTBTNSTYLE_0 "Windows 10 (default)" |
||||||
|
IDS_TB_STARTBTNSTYLE_1 "Windows 11" |
||||||
|
IDS_TB_PRIMARYTBALIGN "Primary taskbar alignment" |
||||||
|
IDS_TB_TBALIGN_0 "At screen edge (default)" |
||||||
|
IDS_TB_TBALIGN_1 "Centered" |
||||||
|
IDS_TB_TBALIGN_5 "Centered, at screen edge when full" |
||||||
|
IDS_TB_TBALIGN_3 "Centered with Start button" |
||||||
|
IDS_TB_TBALIGN_7 "Centered with Start button, at screen edge when full" |
||||||
|
IDS_TB_SECONDARYTBALIGN "Secondary taskbar(s) alignment" |
||||||
|
IDS_TB_PRIMARYTBGLOM "Combine taskbar icons on primary taskbar" |
||||||
|
IDS_TB_GLOM_0_D "Always combine (default)" |
||||||
|
IDS_TB_GLOM_0 "Always combine" |
||||||
|
IDS_TB_GLOM_1 "Combine when taskbar is full" |
||||||
|
IDS_TB_GLOM_2 "Never combine" |
||||||
|
IDS_TB_SECONDARYTBGLOM "Combine taskbar icons on secondary taskbar(s)" |
||||||
|
IDS_TB_ICONSIZE "Taskbar icon size" |
||||||
|
IDS_TB_ICONSIZE_1 "Small" |
||||||
|
IDS_TB_ICONSIZE_0 "Large (default)" |
||||||
|
IDS_TB_ALTIMPL_NOTICE "Important notice regarding ExplorerPatcher's taskbar implementation (online)" |
||||||
|
|
||||||
|
IDS_TRAY "System tray" |
||||||
|
|
||||||
|
IDS_TRAY_SKINMENUS "Skin taskbar and tray pop-up menus" |
||||||
|
IDS_TRAY_CENTERMENUS "Center tray icon pop-up menus" |
||||||
|
IDS_TRAY_FLYOUTMENUS "Flyout behavior for tray icon pop-up menus" |
||||||
|
IDS_TRAY_TOUCHKB "Show touch keyboard button" |
||||||
|
IDS_TRAY_SHOWSECONDS "Show seconds in the clock" |
||||||
|
IDS_TRAY_CCBTN "Control Center button" |
||||||
|
IDS_TRAY_SHOWDESKTOPBTN "Show desktop button" |
||||||
|
IDS_TRAY_SHOWDESKTOPBTN_1 "Enabled (default)" |
||||||
|
IDS_TRAY_SHOWDESKTOPBTN_0 "Disabled" |
||||||
|
IDS_TRAY_SHOWDESKTOPBTN_2 "Hidden" |
||||||
|
IDS_TRAY_SKINICONS "Apply Windows 11 style to system tray icons" |
||||||
|
IDS_TRAY_OVERFLOWSTYLE "Hidden icons popup style" |
||||||
|
IDS_TRAY_OVERFLOWSTYLE_0 "Windows 10 (default)" |
||||||
|
IDS_TRAY_OVERFLOWSTYLE_1 "Windows 11" |
||||||
|
IDS_TRAY_REPLACENETWORK_L1 "Choosing 'Open Network && Internet settings' when right clicking the" |
||||||
|
IDS_TRAY_REPLACENETWORK_L2 "network icon should open" |
||||||
|
IDS_TRAY_REPLACENETWORK_0 "Network section in the Settings app (default)" |
||||||
|
IDS_TRAY_REPLACENETWORK_1 "Network and Sharing Center in Control Panel" |
||||||
|
IDS_TRAY_REPLACENETWORK_2 "Network Connections in Control Panel" |
||||||
|
IDS_TRAY_SYSICONBEHAVIOR "When clicking a system icon in the system tray, open:" |
||||||
|
IDS_TRAY_NETWORK "Network" |
||||||
|
IDS_TRAY_NETWORK_6 "Control Center" |
||||||
|
IDS_TRAY_NETWORK_5 "Windows 11 WiFi flyout" |
||||||
|
IDS_TRAY_NETWORK_0 "Windows 10 flyout (default)" |
||||||
|
IDS_TRAY_NETWORK_2 "Windows 8 flyout" |
||||||
|
IDS_TRAY_NETWORK_1 "Network section in the Settings app" |
||||||
|
IDS_TRAY_SOUND "Sound" |
||||||
|
IDS_TRAY_SOUND_1 "Windows 10 flyout (default)" |
||||||
|
IDS_TRAY_SOUND_0 "Windows 7 flyout" |
||||||
|
IDS_TRAY_CLOCK "Clock" |
||||||
|
IDS_TRAY_CLOCK_2 "Windows 11 flyout" |
||||||
|
IDS_TRAY_CLOCK_0 "Windows 10 flyout (default)" |
||||||
|
IDS_TRAY_CLOCK_1 "Windows 7" |
||||||
|
IDS_TRAY_CLOCK_2_W10 "Action Center" |
||||||
|
IDS_TRAY_BATTERY "Battery" |
||||||
|
IDS_TRAY_BATTERY_0 "Windows 10 flyout (default)" |
||||||
|
IDS_TRAY_BATTERY_1 "Windows 7" |
||||||
|
IDS_TRAY_LANGSWITCHER "Language switcher" |
||||||
|
IDS_TRAY_LANGSWITCHER_0 "Windows 11 (default)" |
||||||
|
IDS_TRAY_LANGSWITCHER_1_21H2 "Windows 10 (with link to ""Language Preferences"")" |
||||||
|
IDS_TRAY_LANGSWITCHER_7 "Windows 10" |
||||||
|
IDS_TRAY_LANGSWITCHER_1 "Windows 10 (with link to ""Language Preferences"") (no animation)" |
||||||
|
IDS_TRAY_LANGSWITCHER_4 "Windows 10 (no animation)" |
||||||
|
|
||||||
|
IDS_EXP "File Explorer" |
||||||
|
|
||||||
|
IDS_EXP_SHEXT_L1 "For the settings marked with (**) to work in Open or Save file dialogs as well, register" |
||||||
|
IDS_EXP_SHEXT_L2 "this utility as shell extension using the option below." |
||||||
|
IDS_EXP_SHEXT_LEARN "Learn more" |
||||||
|
IDS_EXP_SHEXT_REGISTER "Register as shell extension" |
||||||
|
IDS_EXP_DISABLECTXMENU "Disable the Windows 11 context menu" |
||||||
|
IDS_EXP_LEGACYFTDIALOG "Always use legacy file transfer dialog" |
||||||
|
IDS_EXP_CLASSICDRIVEGROUP "Use classic drive groupings in This PC" |
||||||
|
IDS_EXP_CTRLINTF "Control Interface" |
||||||
|
IDS_EXP_CTRLINTF_0_W11 "Windows 11 Command Bar (default)" |
||||||
|
IDS_EXP_CTRLINTF_0_W10 "Windows 10 Ribbon (default)" |
||||||
|
IDS_EXP_CTRLINTF_1_W11 "Windows 10 Ribbon" |
||||||
|
IDS_EXP_CTRLINTF_2 "Windows 7 Command Bar" |
||||||
|
IDS_EXP_CTRLINTF_3 "Windows 11 Command Bar (no Tabs, classic Address Bar)" |
||||||
|
IDS_EXP_CTRLINTF_4 "Windows 11 Command Bar (classic Address Bar)" |
||||||
|
IDS_EXP_NEWWINDOWS "The following settings take effect on newly created File Explorer windows:" |
||||||
|
IDS_EXP_IMMERSIVEMENUS "Use immersive menus when displaying Windows 10 context menus" |
||||||
|
IDS_EXP_DISABLENAVBAR "Disable navigation bar" |
||||||
|
IDS_EXP_DISABLESEARCHBAR "Disable modern search bar" |
||||||
|
IDS_EXP_SHRINKADDRESSBAR "Shrink address bar height" |
||||||
|
IDS_EXP_HIDESEARCHBAR "Hide search bar completely" |
||||||
|
IDS_EXP_TITLEBAR "Title bar" |
||||||
|
IDS_EXP_TITLEBAR_0 "Show icon and title (default)" |
||||||
|
IDS_EXP_TITLEBAR_1 "Hide title, show icon" |
||||||
|
IDS_EXP_TITLEBAR_2 "Hide icon, show title" |
||||||
|
IDS_EXP_TITLEBAR_3 "Hide icon and title" |
||||||
|
IDS_EXP_MICA "Apply Mica effect to the navigation bar of Windows 7 Explorer windows" |
||||||
|
|
||||||
|
IDS_START "Start menu" |
||||||
|
|
||||||
|
IDS_START_STYLE "Start menu style" |
||||||
|
IDS_START_STYLE_0 "Windows 11 (default)" |
||||||
|
IDS_START_STYLE_1 "Windows 10" |
||||||
|
IDS_START_MORE "More Start menu options in the Settings app" |
||||||
|
IDS_START_POSITION "Position on screen" |
||||||
|
IDS_START_POSITION_0 "At screen edge" |
||||||
|
IDS_START_POSITION_1 "Center (default)" |
||||||
|
IDS_START_MAXFREQAPPS "Maximum number of frequent apps to show" |
||||||
|
IDS_START_MAXFREQAPPS_0 "None" |
||||||
|
IDS_START_MAXFREQAPPS_6 "6 (default)" |
||||||
|
IDS_START_MAXFREQAPPS_99999 "Unlimited" |
||||||
|
IDS_START_MONITOROVERRIDE_L1 "When using multiple displays, open Start on this monitor when invoked using" |
||||||
|
IDS_START_MONITOROVERRIDE_L2 "the keyboard" |
||||||
|
IDS_START_MONITOROVERRIDE_1 "Primary monitor (default)" |
||||||
|
IDS_START_MONITOROVERRIDE_0 "Monitor on which the cursor is on" |
||||||
|
IDS_START_MONITOROVERRIDE_2 "Monitor #2" |
||||||
|
IDS_START_MONITOROVERRIDE_3 "Monitor #3" |
||||||
|
IDS_START_MONITOROVERRIDE_4 "Monitor #4" |
||||||
|
IDS_START_MONITOROVERRIDE_5 "Monitor #5" |
||||||
|
IDS_START_MONITOROVERRIDE_6 "Monitor #6" |
||||||
|
IDS_START_MONITOROVERRIDE_7 "Monitor #7" |
||||||
|
IDS_START_MONITOROVERRIDE_8 "Monitor #8" |
||||||
|
IDS_START_MONITOROVERRIDE_9 "Monitor #9" |
||||||
|
IDS_START_NORECOMMENDED "Disable the ""Recommended"" section" |
||||||
|
IDS_START_MAKEALLAPPSDEFAULT "Open Start in All apps by default" |
||||||
|
IDS_START_SHOWMORETILES "Show more tiles" |
||||||
|
IDS_START_CORNERPREF "Corner preference" |
||||||
|
IDS_START_CORNERPREF_1 "Rounded corners, floating menu" |
||||||
|
IDS_START_CORNERPREF_2 "Rounded corners, docked menu" |
||||||
|
IDS_START_CORNERPREF_0 "Not rounded" |
||||||
|
IDS_START_DISPLAYMODE "Display mode" |
||||||
|
IDS_START_DISPLAYMODE_0 "Default" |
||||||
|
IDS_START_DISPLAYMODE_1 "Start menu" |
||||||
|
IDS_START_DISPLAYMODE_2 "Full screen Start" |
||||||
|
IDS_START_APPLIST "App list" |
||||||
|
IDS_START_APPLIST_0 "Display" |
||||||
|
IDS_START_APPLIST_3 "Hide" |
||||||
|
IDS_START_APPLIST_1 "Disable" |
||||||
|
IDS_START_NOTICE "IMPORTANT, MUST READ: Notice regarding this feature (online)" |
||||||
|
IDS_START_WIN10_NOTICE "Some settings might not be available in older Windows 10 versions." |
||||||
|
|
||||||
|
IDS_AT "Window switcher" |
||||||
|
|
||||||
|
IDS_AT_STYLE "Window switcher (Alt+Tab) style" |
||||||
|
IDS_AT_STYLE_0_W11 "Windows 11 (default)" |
||||||
|
IDS_AT_STYLE_0_W10 "Windows 10 (default)" |
||||||
|
IDS_AT_STYLE_3 "Windows 10" |
||||||
|
IDS_AT_STYLE_1 "Windows NT" |
||||||
|
IDS_AT_STYLE_2 "Simple Window Switcher" |
||||||
|
IDS_AT_SWS_INCLUDEWALLPAPER "Show the desktop as the last window in the interaction list" |
||||||
|
IDS_AT_SWS_PRIMARYONLY "Always display switcher on primary monitor" |
||||||
|
IDS_AT_SWS_PERMONITOR "Display windows only from the monitor containing the cursor" |
||||||
|
IDS_AT_SWS_GROUPWINDOWS "Group windows of the same app" |
||||||
|
IDS_AT_SWS_NOPERAPP "Disable the interaction list for individual apps ( Alt + %c )" |
||||||
|
IDS_AT_SWS_THEME "Theme" |
||||||
|
IDS_AT_SWS_THEME_0 "Default" |
||||||
|
IDS_AT_SWS_THEME_1 "Acrylic" |
||||||
|
IDS_AT_SWS_THEME_2 "Mica (always opaque)" |
||||||
|
IDS_AT_SWS_OPACITY "Opacity" |
||||||
|
IDS_AT_SWS_OPACITY_100 "Opaque" |
||||||
|
IDS_AT_SWS_OPACITY_95 "95 % (default)" |
||||||
|
IDS_AT_SWS_COLORSCHEME "Color scheme" |
||||||
|
IDS_AT_SWS_COLORSCHEME_0 "Follow system setting (default)" |
||||||
|
IDS_AT_SWS_COLORSCHEME_1 "Light" |
||||||
|
IDS_AT_SWS_COLORSCHEME_2 "Dark" |
||||||
|
IDS_AT_SWS_CORNERPREF "Corner preference" |
||||||
|
IDS_AT_SWS_CORNERPREF_2 "Rounded (default)" |
||||||
|
IDS_AT_SWS_CORNERPREF_3 "Small rounded" |
||||||
|
IDS_AT_SWS_CORNERPREF_1 "Not rounded" |
||||||
|
IDS_AT_SWS_ROWHEIGHT "Row height" |
||||||
|
IDS_AT_SWS_ROWHEIGHT_230 "230 pt (default)" |
||||||
|
IDS_AT_SWS_MAXWIDTH "Maximum width (percentage of screen width)" |
||||||
|
IDS_AT_SWS_MAXWIDTH_100 "100 % (not recommended)" |
||||||
|
IDS_AT_SWS_MAXWIDTH_80 "80 % (default)" |
||||||
|
IDS_AT_SWS_MAXHEIGHT "Maximum height (percentage of screen height)" |
||||||
|
IDS_AT_SWS_MAXHEIGHT_100 "100 % (not recommended)" |
||||||
|
IDS_AT_SWS_MAXHEIGHT_80 "80 % (default)" |
||||||
|
IDS_AT_SWS_PADDING "Window padding" |
||||||
|
IDS_AT_SWS_PADDING_20 "20 pt (default)" |
||||||
|
IDS_AT_SWS_PADDING_0 "None" |
||||||
|
IDS_AT_SWS_SHOWDELAY "Show delay" |
||||||
|
IDS_AT_SWS_SHOWDELAY_0 "None" |
||||||
|
IDS_AT_SWS_SHOWDELAY_25 "25 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_50 "50 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_75 "75 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_100 "100 ms (default)" |
||||||
|
IDS_AT_SWS_SHOWDELAY_125 "125 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_150 "150 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_200 "200 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_300 "300 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_400 "400 ms" |
||||||
|
IDS_AT_SWS_SHOWDELAY_500 "500 ms" |
||||||
|
IDS_AT_SWS_SCROLLWHEEL "Use the scroll wheel to change selection" |
||||||
|
IDS_AT_SWS_SCROLLWHEEL_0 "Never (default)" |
||||||
|
IDS_AT_SWS_SCROLLWHEEL_1 "When cursor is over the switcher" |
||||||
|
IDS_AT_SWS_SCROLLWHEEL_2 "Always" |
||||||
|
IDS_AT_SWS_LEARN "Learn more about Simple Window Switcher" |
||||||
|
|
||||||
|
IDS_WEATHER "Weather" |
||||||
|
|
||||||
|
IDS_WEATHER_SHOW "Show Weather on the taskbar" |
||||||
|
IDS_WEATHER_LOC "Location" |
||||||
|
IDS_WEATHER_LOC_PROMPT "Search City or Zip Code; the program looks up ""weather in /* what you typed */"" on Google. Leave blank for the default value (current location)." |
||||||
|
IDS_WEATHER_LOC_DEFAULT "Current location (default)" |
||||||
|
IDS_WEATHER_LAYOUT "Layout" |
||||||
|
IDS_WEATHER_LAYOUT_0 "Icon and description (default)" |
||||||
|
IDS_WEATHER_LAYOUT_3 "Icon and temperature" |
||||||
|
IDS_WEATHER_LAYOUT_1 "Icon only" |
||||||
|
IDS_WEATHER_LAYOUT_4 "Temperature only" |
||||||
|
IDS_WEATHER_LAYOUT_5 "Temperature and description" |
||||||
|
IDS_WEATHER_SIZE "Widget size" |
||||||
|
IDS_WEATHER_SIZE_0 "Automatic (fit contents) (default)" |
||||||
|
IDS_WEATHER_SIZE_2 "Automatic (fit contents) with threshold" |
||||||
|
IDS_WEATHER_SIZE_1 "Fixed" |
||||||
|
IDS_WEATHER_POSITION "Widget position" |
||||||
|
IDS_WEATHER_POSITION_0 "Right / bottom (default)" |
||||||
|
IDS_WEATHER_POSITION_1 "Left / top" |
||||||
|
IDS_WEATHER_UPDATEFREQ "Update frequency" |
||||||
|
IDS_WEATHER_UPDATEFREQ_60 "Every minute" |
||||||
|
IDS_WEATHER_UPDATEFREQ_300 "Every 5 minutes" |
||||||
|
IDS_WEATHER_UPDATEFREQ_900 "Every 15 minutes" |
||||||
|
IDS_WEATHER_UPDATEFREQ_1200 "Every 20 minutes (default)" |
||||||
|
IDS_WEATHER_UPDATEFREQ_1800 "Every half an hour" |
||||||
|
IDS_WEATHER_UPDATEFREQ_3600 "Every hour" |
||||||
|
IDS_WEATHER_UPDATEFREQ_7200 "Every couple of hours" |
||||||
|
IDS_WEATHER_TEMPUNIT "Temperature unit" |
||||||
|
IDS_WEATHER_TEMPUNIT_0 "Celsius (default)" |
||||||
|
IDS_WEATHER_TEMPUNIT_1 "Fahrenheit" |
||||||
|
IDS_WEATHER_LANG "Language" |
||||||
|
IDS_WEATHER_LANG_PROMPT "Type the short code for the language you'd like the weather data to be displayed in. For example, try ""en"", ""ro"", ""de"", ""fr"" etc. Leave blank for the default value (language of the Windows OS)." |
||||||
|
IDS_WEATHER_LANG_DEFAULT "System language (default)" |
||||||
|
IDS_WEATHER_COLORSCHEME "Color scheme" |
||||||
|
IDS_WEATHER_COLORSCHEME_0 "Follow system setting (default)" |
||||||
|
IDS_WEATHER_COLORSCHEME_1 "Light" |
||||||
|
IDS_WEATHER_COLORSCHEME_2 "Dark" |
||||||
|
IDS_WEATHER_CORNERPREF "Corner preference" |
||||||
|
IDS_WEATHER_CORNERPREF_2 "Rounded (default)" |
||||||
|
IDS_WEATHER_CORNERPREF_3 "Small rounded" |
||||||
|
IDS_WEATHER_CORNERPREF_1 "Not rounded" |
||||||
|
IDS_WEATHER_ICONPACK "Icon pack" |
||||||
|
IDS_WEATHER_ICONPACK_0 "Microsoft (default)" |
||||||
|
IDS_WEATHER_ICONPACK_1 "Google" |
||||||
|
IDS_WEATHER_CONTENTSMODE "Display widget contents" |
||||||
|
IDS_WEATHER_CONTENTSMODE_0 "On a single line (default)" |
||||||
|
IDS_WEATHER_CONTENTSMODE_1 "On 2 lines, if possible" |
||||||
|
IDS_WEATHER_ZOOM "Zoom" |
||||||
|
IDS_WEATHER_ZOOM_100 "100 % (default)" |
||||||
|
IDS_WEATHER_LEARN "Learn more about the Weather taskbar widget" |
||||||
|
IDS_WEATHER_LASTUPDATE "Last updated on: %s, %s." |
||||||
|
IDS_WEATHER_UPDATE "Update weather now" |
||||||
|
IDS_WEATHER_CLEAR "Clear weather widget local data" |
||||||
|
IDS_WEATHER_CLEAR_PROMPT "Are you sure you want to permanently clear the weather widget's local data?\n\nThis will reset the internal components to their default state, but will preserve your preferences. This may fix the widget not loading the data properly, or having layout issues etc." |
||||||
|
IDS_WEATHER_CLEAR_WAIT "Please wait…" |
||||||
|
IDS_WEATHER_CLEAR_SUCCESS "Weather widget data cleared successfully." |
||||||
|
IDS_WEATHER_CLEAR_FAILED "An error has occured while clearing the data." |
||||||
|
|
||||||
|
IDS_SP "Spotlight" |
||||||
|
|
||||||
|
IDS_SP_HIDEICON "Hide the ""Learn about this picture"" icon" |
||||||
|
IDS_SP_DESKTOPMENU "Desktop context menu items" |
||||||
|
IDS_SP_DESKTOPMENU_0 "No items" |
||||||
|
IDS_SP_DESKTOPMENU_32 "Switch to the next picture" |
||||||
|
IDS_SP_DESKTOPMENU_48 "Learn about and switch to next picture" |
||||||
|
IDS_SP_DESKTOPMENU_288 "Info and switch to next picture" |
||||||
|
IDS_SP_DESKTOPMENU_800 "Info, copyright, and switch to next picture" |
||||||
|
IDS_SP_DESKTOPMENU_304 "Info, learn about, and switch to next picture" |
||||||
|
IDS_SP_DESKTOPMENU_816 "Info, copyright, learn about, and switch to next picture" |
||||||
|
IDS_SP_DESKTOPMENU_1008 "All items" |
||||||
|
IDS_SP_UPDATEFREQ "Update frequency" |
||||||
|
IDS_SP_UPDATEFREQ_0 "Let Windows decide the best schedule (default)" |
||||||
|
IDS_SP_UPDATEFREQ_60 "Every minute" |
||||||
|
IDS_SP_UPDATEFREQ_300 "Every 5 minutes" |
||||||
|
IDS_SP_UPDATEFREQ_900 "Every 15 minutes" |
||||||
|
IDS_SP_UPDATEFREQ_1200 "Every 20 minutes" |
||||||
|
IDS_SP_UPDATEFREQ_1800 "Every half an hour" |
||||||
|
IDS_SP_UPDATEFREQ_3600 "Every hour" |
||||||
|
IDS_SP_UPDATEFREQ_7200 "Every couple of hours" |
||||||
|
IDS_SP_UPDATEFREQ_21600 "Every 6 hours" |
||||||
|
IDS_SP_UPDATEFREQ_43200 "Every 12 hours" |
||||||
|
IDS_SP_UPDATEFREQ_86400 "Once a day" |
||||||
|
IDS_SP_MOREOPTIONS "Show more options" |
||||||
|
|
||||||
|
IDS_OTHER "Other" |
||||||
|
|
||||||
|
IDS_OTHER_REMEMBERLAST "Remember last used section in this window" |
||||||
|
IDS_OTHER_CLOCKFLYOUT "Open clock flyout when pressing Win+C instead of Microsoft Teams" |
||||||
|
IDS_OTHER_TOOLBARSEPARATORS "Show separators between taskbar toolbars" |
||||||
|
IDS_OTHER_WINXPROPERTIES "Add shortcut to program settings in Win+X menu" |
||||||
|
IDS_OTHER_DONTUSEPOWERSHELL "Show Command Prompt instead of PowerShell in Win+X menu" |
||||||
|
IDS_OTHER_WINXACCELERATOR "Remove shortcut key from program settings item in Win+X menu" |
||||||
|
IDS_OTHER_DISABLEOFFICE "Disable Office hotkeys (Ctrl+Alt+Shift+Windows key combinations)" |
||||||
|
IDS_OTHER_DISABLEWINF "Disable Win+F (Feedback Hub) hotkey" |
||||||
|
IDS_OTHER_DISABLERC "Disable rounded corners for application windows" |
||||||
|
IDS_OTHER_DISABLEAEROSNAP "Disable quadrants when snapping windows" |
||||||
|
IDS_OTHER_SNAPASSISTSTYLE "Snap Assist style" |
||||||
|
IDS_OTHER_SNAPASSISTSTYLE_0 "Windows 11 (default)" |
||||||
|
IDS_OTHER_SNAPASSISTSTYLE_3 "Windows 10" |
||||||
|
IDS_OTHER_PWRBTNACTION "Default action in the Alt+F4 dialog on the desktop" |
||||||
|
IDS_OTHER_PWRBTNACTION_256 "Switch user" |
||||||
|
IDS_OTHER_PWRBTNACTION_1 "Sign out" |
||||||
|
IDS_OTHER_PWRBTNACTION_16 "Sleep" |
||||||
|
IDS_OTHER_PWRBTNACTION_64 "Hibernate" |
||||||
|
IDS_OTHER_PWRBTNACTION_2 "Shut down (default)" |
||||||
|
IDS_OTHER_PWRBTNACTION_4 "Restart" |
||||||
|
IDS_OTHER_LOGONLOGOFFSHUTDOWNSOUNDS "Enable logon, logoff, and shutdown sounds" |
||||||
|
IDS_OTHER_NOREDIRECT "Prevent the following Control Panel links from being redirected to the Settings app:" |
||||||
|
IDS_OTHER_NOREDIRECT_SYSTEM "System / About page" |
||||||
|
IDS_OTHER_NOREDIRECT_PROGRAMS "Programs and Features" |
||||||
|
IDS_OTHER_NOREDIRECT_DATETIME "Adjust date/time" |
||||||
|
IDS_OTHER_NOREDIRECT_TRAYICONS "Customize notification icons" |
||||||
|
|
||||||
|
IDS_UPDATES "Updates" |
||||||
|
|
||||||
|
IDS_UPDATES_POLICY "When File Explorer starts" |
||||||
|
IDS_UPDATES_POLICY_1 "Notify about available updates (default)" |
||||||
|
IDS_UPDATES_POLICY_0 "Prompt to install available updates" |
||||||
|
IDS_UPDATES_POLICY_2 "Do not check for updates" |
||||||
|
IDS_UPDATES_PREFER_STAGING "Receive pre-release versions, if available (not recommended)" |
||||||
|
IDS_UPDATES_DOWNGRADES "Suggest the latest version on the server, even if it's older (not recommended)" |
||||||
|
IDS_UPDATES_USELOCAL "Build updates locally before installing" |
||||||
|
IDS_UPDATES_UPDATESERVERS "Update servers:" |
||||||
|
IDS_UPDATES_RELEASES "Releases" |
||||||
|
IDS_UPDATES_RELEASES_PROMPT "Type a URL that serves resources adhering to GitHub's releases API. To learn how to configure your own update server, please consult the wiki." |
||||||
|
IDS_UPDATES_STAGING "Pre-releases" |
||||||
|
IDS_UPDATES_STAGING_PROMPT "Type a URL that serves resources adhering to GitHub's pre-releases API. To learn how to configure your own update server, please consult the wiki." |
||||||
|
IDS_UPDATES_CHECK "Check for updates" |
||||||
|
IDS_UPDATES_INSTALL "Update program and restart File Explorer" |
||||||
|
IDS_UPDATES_CHANGES "Read about changes in the latest releases" |
||||||
|
IDS_UPDATES_LEARN "Learn more" |
||||||
|
|
||||||
|
IDS_ADV "Advanced" |
||||||
|
|
||||||
|
IDS_ADV_DISCLAIMER "Only change these settings after reading the documentation about them." |
||||||
|
IDS_ADV_LEARN "Learn more" |
||||||
|
IDS_ADV_CONSOLE "Enable console" |
||||||
|
IDS_ADV_MEMCHECK "Dump memory leaks" |
||||||
|
IDS_ADV_AUTOHIDE "Double click taskbar to toggle auto-hide (only works when locked)" |
||||||
|
IDS_ADV_PAINTDESKTOPVERSION "Show Windows build info on the desktop" |
||||||
|
IDS_ADV_CLASSICTHEME "Enable advanced mitigations for correct rendering using classic theme" |
||||||
|
IDS_ADV_SYSLISTVIEW32 "Enable SysListView32 for Explorer views" |
||||||
|
IDS_ADV_NOPROPERTIES "Do not change the taskbar context menu (e.g. do not display the ""Properties"" item)" |
||||||
|
IDS_ADV_SYMBOLS "Enable symbols download" |
||||||
|
IDS_ADV_PINNEDITEMS "Pinned items act as quick launch (don't group with active apps)" |
||||||
|
IDS_ADV_REMOVEEXTRAGAP "When the taskbar shows button labels, remove the extra gap around pinned items" |
||||||
|
IDS_ADV_XAMLSOUNDS "Enable UI sounds in Explorer's XAML views" |
||||||
|
|
||||||
|
IDS_ABOUT "About" |
||||||
|
|
||||||
|
IDS_ABOUT_VERSION "Version %d.%d.%d.%d%s" |
||||||
|
IDS_ABOUT_PROJECT "This project aims to enhance the working environment on Windows." |
||||||
|
IDS_ABOUT_AUTHOR "Proudly engineered by Valentin-Gabriel Radu." |
||||||
|
IDS_ABOUT_OS "Running on %s, OS Build %d.%d." |
||||||
|
IDS_ABOUT_GITHUB "Visit project GitHub" |
||||||
|
IDS_ABOUT_WEBSITE "Visit web site" |
||||||
|
IDS_ABOUT_DONATE "Donate" |
||||||
|
IDS_ABOUT_FAQ "Frequently Asked Questions" |
||||||
|
IDS_ABOUT_SETTINGS "Learn more about managing your settings" |
||||||
|
IDS_ABOUT_IMPORT "Import settings" |
||||||
|
IDS_ABOUT_EXPORT "Export current settings" |
||||||
|
IDS_ABOUT_EXPORT_SUCCESS "Settings have been exported successfully." |
||||||
|
IDS_ABOUT_RESET "Restore default settings" |
||||||
|
|
||||||
|
IDS_MAINTENANCE "Settings and uninstall" |
||||||
|
|
||||||
|
IDS_UNINSTALL "Uninstall" |
||||||
|
IDS_UNINSTALL_UNINSTALL "Uninstall ExplorerPatcher" |
||||||
|
|
||||||
|
IDS_FOOTER_RESTART "Restart File Explorer" |
||||||
|
END |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by ep_gui.rc
|
||||||
|
//
|
||||||
|
#define IDR_REGISTRY1 101 |
||||||
|
#define IDR_REGISTRY2 102 |
||||||
|
#define IDS_PRODUCTNAME 201 |
||||||
|
|
||||||
|
// 301-500
|
||||||
|
#include "EPSharedResources.h" |
||||||
|
|
||||||
|
// 1001-2200
|
||||||
|
#include "EPSettingsResources.h" |
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS |
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101 |
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001 |
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001 |
||||||
|
#define _APS_NEXT_SYMED_VALUE 101 |
||||||
|
#endif |
||||||
|
#endif |
||||||
@ -0,0 +1,801 @@ |
|||||||
|
Windows Registry Editor Version 5.00 |
||||||
|
|
||||||
|
|
||||||
|
;M Settings |
||||||
|
;q |
||||||
|
|
||||||
|
;T %R:1001% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 3 %R:1002% * |
||||||
|
;x 0 %R:1003% |
||||||
|
;x 1 %R:1004% |
||||||
|
;x 2 %R:1047% |
||||||
|
"OldTaskbar"=dword:00000002 |
||||||
|
;y %R:1005% 🡕 |
||||||
|
;ms-settings:taskbar |
||||||
|
;y %R:1006% 🡕 |
||||||
|
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} |
||||||
|
;y %R:1007% 🡕 |
||||||
|
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons |
||||||
|
;s Taskbar_LocationSection !(IsWindows11Version22H2OrHigher&&!IsOldTaskbar) |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 4 %R:1008% * |
||||||
|
;x 3 %R:1009% |
||||||
|
;x 1 %R:1010% |
||||||
|
;x 0 %R:1011% |
||||||
|
;x 2 %R:1012% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_TaskbarPosition"=dword:00000003 |
||||||
|
;c 4 %R:1013% |
||||||
|
;x 3 %R:1009% |
||||||
|
;x 1 %R:1010% |
||||||
|
;x 0 %R:1011% |
||||||
|
;x 2 %R:1012% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_MMTaskbarPosition"=dword:00000003 |
||||||
|
;g Taskbar_LocationSection |
||||||
|
;s Taskbar_CortanaButtonSection !IsWindows11Version22H2OrHigher |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 3 %R:1014% |
||||||
|
;x 0 %R:1015% |
||||||
|
;x 2 %R:1016% |
||||||
|
;x 1 %R:1017% |
||||||
|
"TaskbarDa"=dword:00000000 |
||||||
|
;g Taskbar_CortanaButtonSection |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search] |
||||||
|
;c 3 %R:1019% |
||||||
|
;x 0 %R:1020% |
||||||
|
;x 1 %R:1021% |
||||||
|
;x 2 %R:1022% |
||||||
|
"SearchboxTaskbarMode"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1024% |
||||||
|
"ShowTaskViewButton"=dword:00000001 |
||||||
|
;s Taskbar_CortanaButtonSection1 IsWindows11Version22H2OrHigher |
||||||
|
;s Taskbar_CortanaButtonSection2 !IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1025% |
||||||
|
"TaskbarDa"=dword:00000001 |
||||||
|
;g Taskbar_CortanaButtonSection2 |
||||||
|
;g Taskbar_CortanaButtonSection1 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1026% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_AutoHideTaskbar"=dword:00000000 |
||||||
|
;s Taskbar_Windows10Section IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 2 %R:1027% * |
||||||
|
;x 0 %R:1028% |
||||||
|
;x 1 %R:1029% |
||||||
|
"OrbStyle"=dword:00000000 |
||||||
|
;c 5 %R:1030% |
||||||
|
;x 0 %R:1031% |
||||||
|
;x 1 %R:1032% |
||||||
|
;x 5 %R:1033% |
||||||
|
;x 3 %R:1034% |
||||||
|
;x 7 %R:1035% |
||||||
|
"OldTaskbarAl"=dword:00000000 |
||||||
|
;c 5 %R:1036% |
||||||
|
;x 0 %R:1031% |
||||||
|
;x 1 %R:1032% |
||||||
|
;x 5 %R:1033% |
||||||
|
;x 3 %R:1034% |
||||||
|
;x 7 %R:1035% |
||||||
|
"MMOldTaskbarAl"=dword:00000000 |
||||||
|
;g Taskbar_Windows10Section |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 3 %R:1037% |
||||||
|
;x 0 %R:1038% |
||||||
|
;x 1 %R:1040% |
||||||
|
;x 2 %R:1042% |
||||||
|
"TaskbarGlomLevel"=dword:00000000 |
||||||
|
;c 3 %R:1043% |
||||||
|
;x 0 %R:1038% |
||||||
|
;x 1 %R:1040% |
||||||
|
;x 2 %R:1042% |
||||||
|
"MMTaskbarGlomLevel"=dword:00000000 |
||||||
|
;s Taskbar_Windows10Section IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 2 %R:1044% |
||||||
|
;x 1 %R:1045% |
||||||
|
;x 0 %R:1046% |
||||||
|
"TaskbarSmallIcons"=dword:00000000 |
||||||
|
;g Taskbar_Windows10Section |
||||||
|
;s Taskbar_AltImplSection IsAltImplTaskbar |
||||||
|
;y %R:1048% |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/ExplorerPatcher's-taskbar-implementation |
||||||
|
;g Taskbar_AltImplSection |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1101% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1102% |
||||||
|
"SkinMenus"=dword:00000001 |
||||||
|
;b %R:1103% |
||||||
|
"CenterMenus"=dword:00000001 |
||||||
|
;b %R:1104% |
||||||
|
"FlyoutMenus"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7] |
||||||
|
;b %R:1105% * |
||||||
|
"TipbandDesiredVisibility"=dword:00000000 |
||||||
|
;s SystemTray_Section98 IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1106% |
||||||
|
"ShowSecondsInSystemClock"=dword:00000000 |
||||||
|
;g SystemTray_Section98 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;i %R:1107% * |
||||||
|
"HideControlCenterButton"=dword:00000000 |
||||||
|
;s SystemTray_Section109 IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 3 %R:1108% |
||||||
|
;x 1 %R:1109% |
||||||
|
;x 0 %R:1110% |
||||||
|
;x 2 %R:1111% |
||||||
|
"TaskbarSD"=dword:00000001 |
||||||
|
;g SystemTray_Section109 |
||||||
|
;s SystemTray_Section117 !IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1108% |
||||||
|
"TaskbarSD"=dword:00000001 |
||||||
|
;g SystemTray_Section117 |
||||||
|
;s SystemTray_Windows10Section IsOldTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;p 2 |
||||||
|
;b %R:1112% * |
||||||
|
"SkinIcons"=dword:00000001 |
||||||
|
;s Taskbar_AltImplSection IsAltImplTaskbar |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 2 %R:1143% * |
||||||
|
;x 0 %R:1144% |
||||||
|
;x 1 %R:1145% |
||||||
|
"TrayOverflowStyle"=dword:00000000 |
||||||
|
;g Taskbar_AltImplSection |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;a %R:1113% |
||||||
|
;c 3 %R:1114% |
||||||
|
;x 0 %R:1115% |
||||||
|
;x 1 %R:1116% |
||||||
|
;x 2 %R:1117% |
||||||
|
"ReplaceNetwork"=dword:00000000 |
||||||
|
;q |
||||||
|
;t %R:1118% |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network] |
||||||
|
;c 7 %R:1119% |
||||||
|
;x 6 %R:1120% |
||||||
|
;x 5 %R:1121% |
||||||
|
;x 0 %R:1122% |
||||||
|
;x 2 %R:1123% |
||||||
|
;x 1 %R:1124% |
||||||
|
;x 3 %R:1116% |
||||||
|
;x 4 %R:1117% |
||||||
|
"ReplaceVan"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\MTCUVC] |
||||||
|
;c 2 %R:1125% |
||||||
|
;x 1 %R:1126% |
||||||
|
;x 0 %R:1127% |
||||||
|
"EnableMtcUvc"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
||||||
|
;c 3 %R:1128% |
||||||
|
;x 2 %R:1129% |
||||||
|
;x 0 %R:1130% |
||||||
|
;x 1 %R:1131% |
||||||
|
"UseWin32TrayClockExperience"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
||||||
|
;c 2 %R:1133% |
||||||
|
;x 0 %R:1134% |
||||||
|
;x 1 %R:1135% |
||||||
|
"UseWin32BatteryFlyout"=dword:00000000 |
||||||
|
;s SystemTray_LanguageSwitcherBefore22H2 !IsWindows11Version22H2OrHigher |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 3 %R:1136% * |
||||||
|
;x 0 %R:1137% |
||||||
|
;x 1 %R:1138% |
||||||
|
;x 4 %R:1140% |
||||||
|
"IMEStyle"=dword:00000000 |
||||||
|
;g SystemTray_LanguageSwitcherBefore22H2 |
||||||
|
;s SystemTray_LanguageSwitcherAfter22H2 IsWindows11Version22H2OrHigher |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 4 %R:1136% * |
||||||
|
;x 0 %R:1137% |
||||||
|
;x 7 %R:1140% |
||||||
|
;x 1 %R:1141% |
||||||
|
;x 4 %R:1142% |
||||||
|
"IMEStyle"=dword:00000000 |
||||||
|
;g SystemTray_LanguageSwitcherAfter22H2 |
||||||
|
;g SystemTray_Windows10Section |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;T %R:1201% |
||||||
|
;e %R:1202% |
||||||
|
;e %R:1203% |
||||||
|
;y %R:1204% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Using-ExplorerPatcher-as-shell-extension |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;q |
||||||
|
;b %R:1205% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000 |
||||||
|
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32] |
||||||
|
;d %R:1206% * |
||||||
|
@="" |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1207% |
||||||
|
"LegacyFileTransferDialog"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1208% |
||||||
|
"UseClassicDriveGrouping"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 4 %R:1209% * |
||||||
|
;x 0 %R:1210% |
||||||
|
;x 4 %R:1212% |
||||||
|
;x 1 %R:1214% |
||||||
|
;x 2 %R:1215% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_FileExplorerCommandUI"=dword:00000000 |
||||||
|
;t %R:1216% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;i %R:1217% ** |
||||||
|
"DisableImmersiveContextMenu"=dword:00000000 |
||||||
|
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{056440FD-8568-48e7-A632-72157243B55B}\InprocServer32] |
||||||
|
;d %R:1218% ** |
||||||
|
@="" |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1219% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_DisableModernSearchBar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1220% ** |
||||||
|
"ShrinkExplorerAddressBar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1221% ** |
||||||
|
"HideExplorerSearchBar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 4 %R:1222% |
||||||
|
;x 0 %R:1223% |
||||||
|
;x 1 %R:1224% |
||||||
|
;x 2 %R:1225% |
||||||
|
;x 3 %R:1226% |
||||||
|
"HideIconAndTitleInExplorer"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1227% ** |
||||||
|
"MicaEffectOnTitlebar"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;T %R:1301% |
||||||
|
;s StartMenu_StyleSection DoesWindows10StartMenuExist |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;z 2 %R:1302% * |
||||||
|
;x 0 %R:1303% |
||||||
|
;x 1 %R:1304% |
||||||
|
"Start_ShowClassicMode"=dword:00000000 |
||||||
|
;g StartMenu_StyleSection |
||||||
|
;y %R:1305% 🡕 |
||||||
|
;ms-settings:personalization-start |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 2 %R:1306% |
||||||
|
;x 0 %R:1307% |
||||||
|
;x 1 %R:1308% |
||||||
|
"TaskbarAl"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 22 %R:1309% |
||||||
|
;x 0 %R:1310% |
||||||
|
;x 1 1 |
||||||
|
;x 2 2 |
||||||
|
;x 3 3 |
||||||
|
;x 4 4 |
||||||
|
;x 5 5 |
||||||
|
;x 6 %R:1311% |
||||||
|
;x 7 7 |
||||||
|
;x 8 8 |
||||||
|
;x 9 9 |
||||||
|
;x 10 10 |
||||||
|
;x 11 11 |
||||||
|
;x 12 12 |
||||||
|
;x 13 13 |
||||||
|
;x 14 14 |
||||||
|
;x 15 15 |
||||||
|
;x 16 16 |
||||||
|
;x 17 17 |
||||||
|
;x 18 18 |
||||||
|
;x 19 19 |
||||||
|
;x 20 20 |
||||||
|
;x 99999 %R:1312% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_Start_MaximumFrequentApps"=dword:00000006 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
||||||
|
;a %R:1313% |
||||||
|
;c 10 %R:1314% |
||||||
|
;x 1 %R:1315% |
||||||
|
;x 0 %R:1316% |
||||||
|
;x 2 %R:1317% |
||||||
|
;x 3 %R:1318% |
||||||
|
;x 4 %R:1319% |
||||||
|
;x 5 %R:1320% |
||||||
|
;x 6 %R:1321% |
||||||
|
;x 7 %R:1322% |
||||||
|
;x 8 %R:1323% |
||||||
|
;x 9 %R:1324% |
||||||
|
"MonitorOverride"=dword:00000001 |
||||||
|
;s StartMenu_Windows11 !IsWindows10StartMenu |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1325% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartDocked_DisableRecommendedSection"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
||||||
|
;b %R:1326% |
||||||
|
"MakeAllAppsDefault"=dword:00000000 |
||||||
|
;g StartMenu_Windows11 |
||||||
|
;s StartMenu_Windows10 IsWindows10StartMenu |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1327% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_ShowMoreTiles"=dword:00000000 |
||||||
|
;c 3 %R:1328% |
||||||
|
;x 1 %R:1329% |
||||||
|
;x 2 %R:1330% |
||||||
|
;x 0 %R:1331% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_EnableRoundedCorners"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 3 %R:1332% |
||||||
|
;x 0 %R:1333% |
||||||
|
;x 1 %R:1334% |
||||||
|
;x 2 %R:1335% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_ForceStartSize"=dword:00000000 |
||||||
|
;c 3 %R:1336% |
||||||
|
;x 0 %R:1337% |
||||||
|
;x 3 %R:1338% |
||||||
|
;x 1 %R:1339% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_NoStartMenuMorePrograms"=dword:00000000 |
||||||
|
;y %R:1340% |
||||||
|
;https://github.com/valinet/ExplorerPatcher/discussions/1679 |
||||||
|
;g StartMenu_Windows10 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;T %R:1401% |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer] |
||||||
|
;z 4 %R:1402% * |
||||||
|
;x 0 %R:1403% |
||||||
|
;x 3 %R:1405% |
||||||
|
;x 1 %R:1406% |
||||||
|
;x 2 %R:1407% |
||||||
|
"AltTabSettings"=dword:00000000 |
||||||
|
;s WindowSwitcher_SWS IsSWSEnabled |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;b %R:1408% |
||||||
|
"IncludeWallpaper"=dword:00000001 |
||||||
|
;b %R:1409% |
||||||
|
"PrimaryOnly"=dword:00000000 |
||||||
|
;b %R:1410% |
||||||
|
"PerMonitor"=dword:00000000 |
||||||
|
;b %R:1411% |
||||||
|
"SwitcherIsPerApplication"=dword:00000000 |
||||||
|
;b %PLACEHOLDER_0001% |
||||||
|
"NoPerApplicationList"=dword:00000000 |
||||||
|
;c 3 %R:1413% |
||||||
|
;x 0 %R:1414% |
||||||
|
;x 1 %R:1415% |
||||||
|
;x 2 %R:1416% |
||||||
|
"Theme"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewHost] |
||||||
|
;c 19 %R:1417% |
||||||
|
;x 100 %R:1418% |
||||||
|
;x 98 98 % |
||||||
|
;x 96 96 % |
||||||
|
;x 95 %R:1419% |
||||||
|
;x 94 94 % |
||||||
|
;x 92 92 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 80 % |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
;x 50 50 % |
||||||
|
;x 45 45 % |
||||||
|
;x 40 40 % |
||||||
|
;x 35 35 % |
||||||
|
;x 30 30 % |
||||||
|
"Grid_backgroundPercent"=dword:0000005F |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;c 3 %R:1420% |
||||||
|
;x 0 %R:1421% |
||||||
|
;x 1 %R:1422% |
||||||
|
;x 2 %R:1423% |
||||||
|
"ColorScheme"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;c 3 %R:1424% |
||||||
|
;x 2 %R:1425% |
||||||
|
;x 3 %R:1426% |
||||||
|
;x 1 %R:1427% |
||||||
|
"CornerPreference"=dword:00000002 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;c 20 %R:1428% |
||||||
|
;x 330 330 pt |
||||||
|
;x 320 320 pt |
||||||
|
;x 310 310 pt |
||||||
|
;x 300 300 pt |
||||||
|
;x 290 290 pt |
||||||
|
;x 280 280 pt |
||||||
|
;x 270 270 pt |
||||||
|
;x 260 260 pt |
||||||
|
;x 250 250 pt |
||||||
|
;x 240 240 pt |
||||||
|
;x 230 %R:1429% |
||||||
|
;x 220 220 pt |
||||||
|
;x 210 210 pt |
||||||
|
;x 200 200 pt |
||||||
|
;x 190 190 pt |
||||||
|
;x 180 180 pt |
||||||
|
;x 170 170 pt |
||||||
|
;x 160 160 pt |
||||||
|
;x 150 150 pt |
||||||
|
;x 140 140 pt |
||||||
|
"RowHeight"=dword:000000e6 |
||||||
|
;c 10 %R:1430% |
||||||
|
;x 100 %R:1431% |
||||||
|
;x 95 95 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 %R:1432% |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
"MaxWidth"=dword:00000050 |
||||||
|
;c 10 %R:1433% |
||||||
|
;x 100 %R:1434% |
||||||
|
;x 95 95 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 %R:1435% |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
"MaxHeight"=dword:00000050 |
||||||
|
;c 11 %R:1436% |
||||||
|
;x 50 50 pt |
||||||
|
;x 45 45 pt |
||||||
|
;x 40 40 pt |
||||||
|
;x 35 30 pt |
||||||
|
;x 30 30 pt |
||||||
|
;x 25 25 pt |
||||||
|
;x 20 %R:1437% |
||||||
|
;x 15 15 pt |
||||||
|
;x 10 10 pt |
||||||
|
;x 5 5 pt |
||||||
|
;x 0 %R:1438% |
||||||
|
"MasterPadding"=dword:00000014 |
||||||
|
;c 11 %R:1439% |
||||||
|
;x 0 %R:1440% |
||||||
|
;x 25 %R:1441% |
||||||
|
;x 50 %R:1442% |
||||||
|
;x 75 %R:1443% |
||||||
|
;x 100 %R:1444% |
||||||
|
;x 125 %R:1445% |
||||||
|
;x 150 %R:1446% |
||||||
|
;x 200 %R:1447% |
||||||
|
;x 300 %R:1448% |
||||||
|
;x 400 %R:1449% |
||||||
|
;x 500 %R:1450% |
||||||
|
"ShowDelay"=dword:00000064 |
||||||
|
;c 3 %R:1451% |
||||||
|
;x 0 %R:1452% |
||||||
|
;x 1 %R:1453% |
||||||
|
;x 2 %R:1454% |
||||||
|
"ScrollWheelBehavior"=dword:00000000 |
||||||
|
;q |
||||||
|
;y %R:1455% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Simple-Window-Switcher |
||||||
|
;g WindowSwitcher_SWS |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;s Weather_Windows10 IsOldTaskbar |
||||||
|
;T %R:1501% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1502% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_PeopleBand"=dword:00000000 |
||||||
|
;s Weather_Section1 IsWeatherEnabled |
||||||
|
;w %R:1503% |
||||||
|
;%R:1504% |
||||||
|
;%R:1505% |
||||||
|
"WeatherLocation"="" |
||||||
|
;c 5 %R:1506% |
||||||
|
;x 0 %R:1507% |
||||||
|
;x 3 %R:1508% |
||||||
|
;x 1 %R:1509% |
||||||
|
;x 4 %R:1510% |
||||||
|
;x 5 %R:1511% |
||||||
|
"WeatherViewMode"=dword:00000000 |
||||||
|
;c 3 %R:1512% |
||||||
|
;x 0 %R:1513% |
||||||
|
;x 2 %R:1514% |
||||||
|
;x 1 %R:1515% |
||||||
|
"WeatherFixedSize"=dword:00000000 |
||||||
|
;c 2 %R:1516% |
||||||
|
;x 0 %R:1517% |
||||||
|
;x 1 %R:1518% |
||||||
|
"WeatherToLeft"=dword:00000000 |
||||||
|
;c 7 %R:1519% |
||||||
|
;x 60 %R:1520% |
||||||
|
;x 300 %R:1521% |
||||||
|
;x 900 %R:1522% |
||||||
|
;x 1200 %R:1523% |
||||||
|
;x 1800 %R:1524% |
||||||
|
;x 3600 %R:1525% |
||||||
|
;x 7200 %R:1526% |
||||||
|
"WeatherContentUpdateMode"=dword:000004B0 |
||||||
|
;c 2 %R:1527% |
||||||
|
;x 0 %R:1528% |
||||||
|
;x 1 %R:1529% |
||||||
|
"WeatherTemperatureUnit"=dword:00000000 |
||||||
|
;;;c 2 Location accuracy |
||||||
|
;;;x 0 Generic (based on the IP address) (default) |
||||||
|
;;;x 1 Precise (geolocation) |
||||||
|
;;"WeatherLocationType"=dword:00000000 |
||||||
|
;w %R:1533% |
||||||
|
;%R:1534% |
||||||
|
;%R:1535% |
||||||
|
"WeatherLanguage"="" |
||||||
|
;c 3 %R:1536% |
||||||
|
;x 0 %R:1537% |
||||||
|
;x 1 %R:1538% |
||||||
|
;x 2 %R:1539% |
||||||
|
"WeatherTheme"=dword:00000000 |
||||||
|
;c 3 %R:1540% |
||||||
|
;x 2 %R:1541% |
||||||
|
;x 3 %R:1542% |
||||||
|
;x 1 %R:1543% |
||||||
|
"WeatherWindowCornerPreference"=dword:00000002 |
||||||
|
;c 2 %R:1544% |
||||||
|
;x 0 %R:1545% |
||||||
|
;x 1 %R:1546% |
||||||
|
"WeatherIconPack"=dword:00000000 |
||||||
|
;c 2 %R:1547% |
||||||
|
;x 0 %R:1548% |
||||||
|
;x 1 %R:1549% |
||||||
|
"WeatherContentsMode"=dword:00000000 |
||||||
|
;c 17 %R:1550% |
||||||
|
;x 25 25 % |
||||||
|
;x 33 33 % |
||||||
|
;x 50 50 % |
||||||
|
;x 67 67 % |
||||||
|
;x 75 75 % |
||||||
|
;x 80 80 % |
||||||
|
;x 90 90 % |
||||||
|
;x 0 %R:1551% |
||||||
|
;x 110 110 % |
||||||
|
;x 125 125 % |
||||||
|
;x 150 150 % |
||||||
|
;x 175 175 % |
||||||
|
;x 200 200 % |
||||||
|
;x 250 250 % |
||||||
|
;x 300 300 % |
||||||
|
;x 400 400 % |
||||||
|
;x 500 500 % |
||||||
|
"WeatherZoomFactor"=dword:00000000 |
||||||
|
;q |
||||||
|
;g Weather_Section1 |
||||||
|
;y %R:1552% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Weather |
||||||
|
;s Weather_Section2 IsWeatherEnabled |
||||||
|
;t %WEATHERLASTUPDATETEXT% |
||||||
|
;u %R:1554% |
||||||
|
;update_weather |
||||||
|
;u %R:1555% |
||||||
|
;clear_data_weather |
||||||
|
;g Weather_Section2 |
||||||
|
;g Weather_Windows10 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;s Spotlight_SpotlightOSCheck DoesOSBuildSupportSpotlight |
||||||
|
;s Spotlight_SpotlightEnabledCheck IsSpotlightEnabled |
||||||
|
;T %R:1601% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1602% |
||||||
|
"SpotlightDisableIcon"=dword:00000000 |
||||||
|
;c 8 %R:1603% |
||||||
|
;x 0 %R:1604% |
||||||
|
;x 32 %R:1605% |
||||||
|
;x 48 %R:1606% |
||||||
|
;x 288 %R:1607% |
||||||
|
;x 800 %R:1608% |
||||||
|
;x 304 %R:1609% |
||||||
|
;x 816 %R:1610% |
||||||
|
;x 1008 %R:1611% |
||||||
|
"SpotlightDesktopMenuMask"=dword:00000000 |
||||||
|
;c 11 %R:1612% |
||||||
|
;x 0 %R:1613% |
||||||
|
;x 60 %R:1614% |
||||||
|
;x 300 %R:1615% |
||||||
|
;x 900 %R:1616% |
||||||
|
;x 1200 %R:1617% |
||||||
|
;x 1800 %R:1618% |
||||||
|
;x 3600 %R:1619% |
||||||
|
;x 7200 %R:1620% |
||||||
|
;x 21600 %R:1621% |
||||||
|
;x 43200 %R:1622% |
||||||
|
;x 86400 %R:1623% |
||||||
|
"SpotlightUpdateSchedule"=dword:00000000 |
||||||
|
;u %SPOTLIGHTCLICK% |
||||||
|
;spotlight_click |
||||||
|
;t %SPOTLIGHTINFOTIP1% |
||||||
|
;t %SPOTLIGHTINFOTIP2% |
||||||
|
;u %SPOTLIGHTNEXT% |
||||||
|
;spotlight_next |
||||||
|
;u %SPOTLIGHTLIKE% |
||||||
|
;spotlight_like |
||||||
|
;u %SPOTLIGHTDISLIKE% |
||||||
|
;spotlight_dislike |
||||||
|
;;;u %R:1624% |
||||||
|
;;;spotlight_menu |
||||||
|
;g Spotlight_SpotlightEnabledCheck |
||||||
|
;g Spotlight_SpotlightOSCheck |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;T %R:1701% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1702% |
||||||
|
"LastSectionInProperties"=dword:00000000 |
||||||
|
;b %R:1703% * |
||||||
|
"ClockFlyoutOnWinC"=dword:00000000 |
||||||
|
;b %R:1704% * |
||||||
|
"ToolbarSeparators"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1705% |
||||||
|
"PropertiesInWinX"=dword:00000000 |
||||||
|
;b %R:1707% |
||||||
|
"NoMenuAccelerator"=dword:00000000 |
||||||
|
;b %R:1708% * |
||||||
|
"DisableOfficeHotkeys"=dword:00000000 |
||||||
|
;b %R:1709% * |
||||||
|
"DisableWinFHotkey"=dword:00000000 |
||||||
|
;b %R:1710% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_DisableRoundedCorners"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1711% * |
||||||
|
"DisableAeroSnapQuadrants"=dword:00000000 |
||||||
|
;s Other_SnapAssistStyle !IsWindows11Version22H2OrHigher |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 2 %R:1712% |
||||||
|
;x 0 %R:1713% |
||||||
|
;x 3 %R:1714% |
||||||
|
"SnapAssistSettings"=dword:00000000 |
||||||
|
;g Other_SnapAssistStyle |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 6 %R:1715% |
||||||
|
;x 256 %R:1716% |
||||||
|
;x 1 %R:1717% |
||||||
|
;x 16 %R:1718% |
||||||
|
;x 64 %R:1719% |
||||||
|
;x 2 %R:1720% |
||||||
|
;x 4 %R:1721% |
||||||
|
"Start_PowerButtonAction"=dword:00000002 |
||||||
|
;s LogonLogoffShutdownSounds LogonLogoffShutdownSoundsAvailable |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1727% * |
||||||
|
"LogonLogoffShutdownSounds"=dword:00000000 |
||||||
|
;g LogonLogoffShutdownSounds |
||||||
|
;t %R:1722% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1723% |
||||||
|
"DoNotRedirectSystemToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1724% |
||||||
|
"DoNotRedirectProgramsAndFeaturesToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1725% |
||||||
|
"DoNotRedirectDateAndTimeToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1726% |
||||||
|
"DoNotRedirectNotificationIconsToSettingsApp"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1801% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 3 %R:1802% |
||||||
|
;x 1 %R:1803% |
||||||
|
;x 0 %R:1804% |
||||||
|
;x 2 %R:1805% |
||||||
|
"UpdatePolicy"=dword:00000001 |
||||||
|
;b %R:1806% |
||||||
|
"UpdatePreferStaging"=dword:00000000 |
||||||
|
;b %R:1807% |
||||||
|
"UpdateAllowDowngrades"=dword:00000000 |
||||||
|
;b %R:1817% |
||||||
|
"UpdateUseLocal"=dword:00000000 |
||||||
|
;t %R:1808% |
||||||
|
;w %R:1809% |
||||||
|
;%R:1810% |
||||||
|
;github.com/valinet/ExplorerPatcher/releases/latest |
||||||
|
"UpdateURL"="" |
||||||
|
;w %R:1811% |
||||||
|
;%R:1812% |
||||||
|
;api.github.com/repos/valinet/ExplorerPatcher/releases?per_page=1 |
||||||
|
"UpdateURLStaging"="" |
||||||
|
;y %R:1813% |
||||||
|
;;;EP_CHECK_FOR_UPDATES |
||||||
|
;y %R:1814% |
||||||
|
;;;EP_INSTALL_UPDATES |
||||||
|
;y %R:1815% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/blob/master/CHANGELOG.md |
||||||
|
;y %R:1816% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Configure-updates |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1901% |
||||||
|
;e %R:1902% |
||||||
|
;y %R:1903% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/About-advanced-settings |
||||||
|
;q |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1904% |
||||||
|
"AllocConsole"=dword:00000000 |
||||||
|
;b %R:1905% |
||||||
|
"Memcheck"=dword:00000000 |
||||||
|
;b %R:1906% |
||||||
|
"TaskbarAutohideOnDoubleClick"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Control Panel\Desktop] |
||||||
|
;b %R:1907% * |
||||||
|
"PaintDesktopVersion"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1908% * |
||||||
|
"ClassicThemeMitigations"=dword:00000000 |
||||||
|
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1eeb5b5a-06fb-4732-96b3-975c0194eb39}\InprocServer32] |
||||||
|
;d %R:1909% * |
||||||
|
@="" |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1910% |
||||||
|
"NoPropertiesInContextMenu"=dword:00000000 |
||||||
|
;b %R:1911% * |
||||||
|
"EnableSymbolDownload"=dword:00000001 |
||||||
|
;s Advanced_Windows10 IsOldTaskbar |
||||||
|
;b %R:1912% * |
||||||
|
"PinnedItemsActAsQuickLaunch"=dword:00000000 |
||||||
|
;b %R:1913% * |
||||||
|
"RemoveExtraGapAroundPinnedItems"=dword:00000000 |
||||||
|
;g Advanced_Windows10 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher] |
||||||
|
;b %R:1927% * |
||||||
|
"XamlSounds"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:2301% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 10001 %R:1533% |
||||||
|
"Language"=dword:00000000 |
||||||
|
;y %R:2011% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Settings-management |
||||||
|
;u %R:2012% |
||||||
|
;import |
||||||
|
;u %R:2013% |
||||||
|
;export |
||||||
|
;u %R:2015% |
||||||
|
;reset |
||||||
|
;u %R:2102% |
||||||
|
;uninstall |
||||||
|
|
||||||
|
|
||||||
|
;T %R:2001% |
||||||
|
;e %R:201% |
||||||
|
;e %VERSIONINFORMATIONSTRING% |
||||||
|
;t © 2006-2025 VALINET Solutions SRL. All rights reserved. |
||||||
|
;e |
||||||
|
;e %R:2003% |
||||||
|
;e %R:2004% |
||||||
|
;t %OSVERSIONSTRING% |
||||||
|
;y %R:2006% (https://github.com/valinet) 🡕 |
||||||
|
;https://github.com/valinet |
||||||
|
;q |
||||||
|
;y %R:2007% (https://www.valinet.ro) 🡕 |
||||||
|
;https://www.valinet.ro |
||||||
|
;y %R:2009% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher#donate |
||||||
|
;y %R:2010% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Frequently-asked-questions |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;f |
||||||
|
;u %R:2201% (*) |
||||||
|
;restart |
||||||
@ -0,0 +1,629 @@ |
|||||||
|
Windows Registry Editor Version 5.00 |
||||||
|
|
||||||
|
|
||||||
|
;M Settings |
||||||
|
;q |
||||||
|
|
||||||
|
;T %R:1001% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 2 %R:1002% * |
||||||
|
;x 1 %R:1404% |
||||||
|
;x 2 %R:1047% |
||||||
|
"OldTaskbar"=dword:00000001 |
||||||
|
;y %R:1005% 🡕 |
||||||
|
;ms-settings:taskbar |
||||||
|
;y %R:1006% 🡕 |
||||||
|
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} |
||||||
|
;y %R:1007% 🡕 |
||||||
|
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 4 %R:1008% * |
||||||
|
;x 3 %R:1009% |
||||||
|
;x 1 %R:1010% |
||||||
|
;x 0 %R:1011% |
||||||
|
;x 2 %R:1012% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_TaskbarPosition"=dword:00000003 |
||||||
|
;c 4 %R:1013% |
||||||
|
;x 3 %R:1009% |
||||||
|
;x 1 %R:1010% |
||||||
|
;x 0 %R:1011% |
||||||
|
;x 2 %R:1012% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_MMTaskbarPosition"=dword:00000003 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search] |
||||||
|
;c 3 %R:1019% |
||||||
|
;x 0 %R:1020% |
||||||
|
;x 1 %R:1021% |
||||||
|
;x 2 %R:1022% |
||||||
|
"SearchboxTaskbarMode"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1023% |
||||||
|
"ShowCortanaButton"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1024% |
||||||
|
"ShowTaskViewButton"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1026% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_AutoHideTaskbar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 2 %R:1027% * |
||||||
|
;x 0 %R:1028% |
||||||
|
;x 1 %R:1029% |
||||||
|
"OrbStyle"=dword:00000000 |
||||||
|
;c 5 %R:1030% |
||||||
|
;x 0 %R:1031% |
||||||
|
;x 1 %R:1032% |
||||||
|
;x 5 %R:1033% |
||||||
|
;x 3 %R:1034% |
||||||
|
;x 7 %R:1035% |
||||||
|
"OldTaskbarAl"=dword:00000000 |
||||||
|
;c 5 %R:1036% |
||||||
|
;x 0 %R:1031% |
||||||
|
;x 1 %R:1032% |
||||||
|
;x 5 %R:1033% |
||||||
|
;x 3 %R:1034% |
||||||
|
;x 7 %R:1035% |
||||||
|
"MMOldTaskbarAl"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 3 %R:1037% |
||||||
|
;x 0 %R:1038% |
||||||
|
;x 1 %R:1040% |
||||||
|
;x 2 %R:1042% |
||||||
|
"TaskbarGlomLevel"=dword:00000000 |
||||||
|
;c 3 %R:1043% |
||||||
|
;x 0 %R:1038% |
||||||
|
;x 1 %R:1040% |
||||||
|
;x 2 %R:1042% |
||||||
|
"MMTaskbarGlomLevel"=dword:00000000 |
||||||
|
;c 2 %R:1044% |
||||||
|
;x 1 %R:1045% |
||||||
|
;x 0 %R:1046% |
||||||
|
"TaskbarSmallIcons"=dword:00000000 |
||||||
|
;s Taskbar_AltImplSection IsAltImplTaskbar |
||||||
|
;y %R:1048% |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/ExplorerPatcher's-taskbar-implementation |
||||||
|
;g Taskbar_AltImplSection |
||||||
|
|
||||||
|
;T %R:1101% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1102% |
||||||
|
"SkinMenus"=dword:00000001 |
||||||
|
;b %R:1103% |
||||||
|
"CenterMenus"=dword:00000001 |
||||||
|
;b %R:1104% |
||||||
|
"FlyoutMenus"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7] |
||||||
|
;b %R:1105% * |
||||||
|
"TipbandDesiredVisibility"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1106% |
||||||
|
"ShowSecondsInSystemClock"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 3 %R:1108% |
||||||
|
;x 1 %R:1109% |
||||||
|
;x 0 %R:1110% |
||||||
|
;x 2 %R:1111% |
||||||
|
"TaskbarSD"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;p 2 |
||||||
|
;b %R:1112% * |
||||||
|
"SkinIcons"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;a %R:1113% |
||||||
|
;c 3 %R:1114% |
||||||
|
;x 0 %R:1115% |
||||||
|
;x 1 %R:1116% |
||||||
|
;x 2 %R:1117% |
||||||
|
"ReplaceNetwork"=dword:00000000 |
||||||
|
;q |
||||||
|
;t %R:1118% |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network] |
||||||
|
;c 5 %R:1119% |
||||||
|
;x 0 %R:1122% |
||||||
|
;x 2 %R:1123% |
||||||
|
;x 1 %R:1124% |
||||||
|
;x 3 %R:1116% |
||||||
|
;x 4 %R:1117% |
||||||
|
"ReplaceVan"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\MTCUVC] |
||||||
|
;c 2 %R:1125% |
||||||
|
;x 1 %R:1126% |
||||||
|
;x 0 %R:1127% |
||||||
|
"EnableMtcUvc"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
||||||
|
;c 3 %R:1128% |
||||||
|
;x 0 %R:1130% |
||||||
|
;x 1 %R:1131% |
||||||
|
;x 2 %R:1132% |
||||||
|
"UseWin32TrayClockExperience"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell] |
||||||
|
;c 2 %R:1133% |
||||||
|
;x 0 %R:1134% |
||||||
|
;x 1 %R:1135% |
||||||
|
"UseWin32BatteryFlyout"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1201% |
||||||
|
;e %R:1202% |
||||||
|
;e %R:1203% |
||||||
|
;y %R:1204% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Using-ExplorerPatcher-as-shell-extension |
||||||
|
;q |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1205% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1207% |
||||||
|
"LegacyFileTransferDialog"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1208% |
||||||
|
"UseClassicDriveGrouping"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;c 2 %R:1209% |
||||||
|
;x 0 %R:1213% |
||||||
|
;x 2 %R:1215% |
||||||
|
"FileExplorerCommandUI"=dword:00000000 |
||||||
|
;t %R:1216% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;i %R:1217% ** |
||||||
|
"DisableImmersiveContextMenu"=dword:00000000 |
||||||
|
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{056440FD-8568-48e7-A632-72157243B55B}\InprocServer32] |
||||||
|
;d %R:1218% ** |
||||||
|
@="" |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1219% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_DisableModernSearchBar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1220% ** |
||||||
|
"ShrinkExplorerAddressBar"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1221% ** |
||||||
|
"HideExplorerSearchBar"=dword:00000000 |
||||||
|
;p 2 |
||||||
|
;b Mica effect on title bar |
||||||
|
"MicaEffectOnTitlebar"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1301% |
||||||
|
;y %R:1305% 🡕 |
||||||
|
;ms-settings:personalization-start |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;z 2 %R:1306% |
||||||
|
;x 0 %R:1307% |
||||||
|
;x 1 %R:1308% |
||||||
|
"TaskbarAl"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 22 %R:1309% |
||||||
|
;x 0 %R:1310% |
||||||
|
;x 1 1 |
||||||
|
;x 2 2 |
||||||
|
;x 3 3 |
||||||
|
;x 4 4 |
||||||
|
;x 5 5 |
||||||
|
;x 6 %R:1311% |
||||||
|
;x 7 7 |
||||||
|
;x 8 8 |
||||||
|
;x 9 9 |
||||||
|
;x 10 10 |
||||||
|
;x 11 11 |
||||||
|
;x 12 12 |
||||||
|
;x 13 13 |
||||||
|
;x 14 14 |
||||||
|
;x 15 15 |
||||||
|
;x 16 16 |
||||||
|
;x 17 17 |
||||||
|
;x 18 18 |
||||||
|
;x 19 19 |
||||||
|
;x 20 20 |
||||||
|
;x 99999 %R:1312% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_Start_MaximumFrequentApps"=dword:00000006 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage] |
||||||
|
;e %R:1313% |
||||||
|
;z 10 %R:1314% |
||||||
|
;x 1 %R:1315% |
||||||
|
;x 0 %R:1316% |
||||||
|
;x 2 %R:1317% |
||||||
|
;x 3 %R:1318% |
||||||
|
;x 4 %R:1319% |
||||||
|
;x 5 %R:1320% |
||||||
|
;x 6 %R:1321% |
||||||
|
;x 7 %R:1322% |
||||||
|
;x 8 %R:1323% |
||||||
|
;x 9 %R:1324% |
||||||
|
"MonitorOverride"=dword:00000001 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 3 %R:1328% |
||||||
|
;x 1 %R:1329% |
||||||
|
;x 2 %R:1330% |
||||||
|
;x 0 %R:1331% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_StartUI_EnableRoundedCorners"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 3 %R:1332% |
||||||
|
;x 0 %R:1333% |
||||||
|
;x 1 %R:1334% |
||||||
|
;x 2 %R:1335% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_ForceStartSize"=dword:00000000 |
||||||
|
;z 3 %R:1336% |
||||||
|
;x 0 %R:1337% |
||||||
|
;x 3 %R:1338% |
||||||
|
;x 1 %R:1339% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_NoStartMenuMorePrograms"=dword:00000000 |
||||||
|
;t %R:1341% |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1401% |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer] |
||||||
|
;z 3 %R:1402% * |
||||||
|
;x 0 %R:1404% |
||||||
|
;x 1 %R:1406% |
||||||
|
;x 2 %R:1407% |
||||||
|
"AltTabSettings"=dword:00000000 |
||||||
|
;s WindowSwitcher_SWS IsSWSEnabled |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;b %R:1408% |
||||||
|
"IncludeWallpaper"=dword:00000001 |
||||||
|
;b %R:1409% |
||||||
|
"PrimaryOnly"=dword:00000000 |
||||||
|
;b %R:1410% |
||||||
|
"PerMonitor"=dword:00000000 |
||||||
|
;b %R:1411% |
||||||
|
"SwitcherIsPerApplication"=dword:00000000 |
||||||
|
;b %PLACEHOLDER_0001% |
||||||
|
"NoPerApplicationList"=dword:00000000 |
||||||
|
;c 2 %R:1413% |
||||||
|
;x 0 %R:1414% |
||||||
|
;x 1 %R:1415% |
||||||
|
"Theme"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewHost] |
||||||
|
;c 19 %R:1417% |
||||||
|
;x 100 %R:1418% |
||||||
|
;x 98 98 % |
||||||
|
;x 96 96 % |
||||||
|
;x 95 %R:1419% |
||||||
|
;x 94 94 % |
||||||
|
;x 92 92 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 80 % |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
;x 50 50 % |
||||||
|
;x 45 45 % |
||||||
|
;x 40 40 % |
||||||
|
;x 35 35 % |
||||||
|
;x 30 30 % |
||||||
|
"Grid_backgroundPercent"=dword:0000005F |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;c 3 %R:1420% |
||||||
|
;x 0 %R:1421% |
||||||
|
;x 1 %R:1422% |
||||||
|
;x 2 %R:1423% |
||||||
|
"ColorScheme"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws] |
||||||
|
;c 20 %R:1424% |
||||||
|
;x 330 330 pt |
||||||
|
;x 320 320 pt |
||||||
|
;x 310 310 pt |
||||||
|
;x 300 300 pt |
||||||
|
;x 290 290 pt |
||||||
|
;x 280 280 pt |
||||||
|
;x 270 270 pt |
||||||
|
;x 260 260 pt |
||||||
|
;x 250 250 pt |
||||||
|
;x 240 240 pt |
||||||
|
;x 230 %R:1429% |
||||||
|
;x 220 220 pt |
||||||
|
;x 210 210 pt |
||||||
|
;x 200 200 pt |
||||||
|
;x 190 190 pt |
||||||
|
;x 180 180 pt |
||||||
|
;x 170 170 pt |
||||||
|
;x 160 160 pt |
||||||
|
;x 150 150 pt |
||||||
|
;x 140 140 pt |
||||||
|
"RowHeight"=dword:000000e6 |
||||||
|
;c 10 %R:1430% |
||||||
|
;x 100 %R:1431% |
||||||
|
;x 95 95 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 %R:1432% |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
"MaxWidth"=dword:00000050 |
||||||
|
;c 10 %R:1433% |
||||||
|
;x 100 %R:1434% |
||||||
|
;x 95 95 % |
||||||
|
;x 90 90 % |
||||||
|
;x 85 85 % |
||||||
|
;x 80 %R:1435% |
||||||
|
;x 75 75 % |
||||||
|
;x 70 70 % |
||||||
|
;x 65 65 % |
||||||
|
;x 60 60 % |
||||||
|
;x 55 55 % |
||||||
|
"MaxHeight"=dword:00000050 |
||||||
|
;c 11 %R:1436% |
||||||
|
;x 50 50 pt |
||||||
|
;x 45 45 pt |
||||||
|
;x 40 40 pt |
||||||
|
;x 35 30 pt |
||||||
|
;x 30 30 pt |
||||||
|
;x 25 25 pt |
||||||
|
;x 20 %R:1437% |
||||||
|
;x 15 15 pt |
||||||
|
;x 10 10 pt |
||||||
|
;x 5 5 pt |
||||||
|
;x 0 %R:1438% |
||||||
|
"MasterPadding"=dword:00000014 |
||||||
|
;c 11 %R:1439% |
||||||
|
;x 0 %R:1440% |
||||||
|
;x 25 %R:1441% |
||||||
|
;x 50 %R:1442% |
||||||
|
;x 75 %R:1443% |
||||||
|
;x 100 %R:1444% |
||||||
|
;x 125 %R:1445% |
||||||
|
;x 150 %R:1446% |
||||||
|
;x 200 %R:1447% |
||||||
|
;x 300 %R:1448% |
||||||
|
;x 400 %R:1449% |
||||||
|
;x 500 %R:1450% |
||||||
|
"ShowDelay"=dword:00000064 |
||||||
|
;c 3 %R:1451% |
||||||
|
;x 0 %R:1452% |
||||||
|
;x 1 %R:1453% |
||||||
|
;x 2 %R:1454% |
||||||
|
"ScrollWheelBehavior"=dword:00000000 |
||||||
|
;q |
||||||
|
;y %R:1455% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Simple-Window-Switcher |
||||||
|
;g WindowSwitcher_SWS |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1501% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1502% |
||||||
|
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_PeopleBand"=dword:00000000 |
||||||
|
;s Weather_Section1 IsWeatherEnabled |
||||||
|
;w %R:1503% |
||||||
|
;%R:1504% |
||||||
|
;%R:1505% |
||||||
|
"WeatherLocation"="" |
||||||
|
;c 5 %R:1506% |
||||||
|
;x 0 %R:1507% |
||||||
|
;x 3 %R:1508% |
||||||
|
;x 1 %R:1509% |
||||||
|
;x 4 %R:1510% |
||||||
|
;x 5 %R:1511% |
||||||
|
"WeatherViewMode"=dword:00000000 |
||||||
|
;c 3 %R:1512% |
||||||
|
;x 0 %R:1513% |
||||||
|
;x 2 %R:1514% |
||||||
|
;x 1 %R:1515% |
||||||
|
"WeatherFixedSize"=dword:00000000 |
||||||
|
;c 2 %R:1516% |
||||||
|
;x 0 %R:1517% |
||||||
|
;x 1 %R:1518% |
||||||
|
"WeatherToLeft"=dword:00000000 |
||||||
|
;c 7 %R:1519% |
||||||
|
;x 60 %R:1520% |
||||||
|
;x 300 %R:1521% |
||||||
|
;x 900 %R:1522% |
||||||
|
;x 1200 %R:1523% |
||||||
|
;x 1800 %R:1524% |
||||||
|
;x 3600 %R:1525% |
||||||
|
;x 7200 %R:1526% |
||||||
|
"WeatherContentUpdateMode"=dword:000004B0 |
||||||
|
;c 2 %R:1527% |
||||||
|
;x 0 %R:1528% |
||||||
|
;x 1 %R:1529% |
||||||
|
"WeatherTemperatureUnit"=dword:00000000 |
||||||
|
;;;c 2 Location accuracy |
||||||
|
;;;x 0 Generic (based on the IP address) (default) |
||||||
|
;;;x 1 Precise (geolocation) |
||||||
|
;;"WeatherLocationType"=dword:00000000 |
||||||
|
;w %R:1533% |
||||||
|
;%R:1534% |
||||||
|
;%R:1535% |
||||||
|
"WeatherLanguage"="" |
||||||
|
;c 3 %R:1536% |
||||||
|
;x 0 %R:1537% |
||||||
|
;x 1 %R:1538% |
||||||
|
;x 2 %R:1539% |
||||||
|
"WeatherTheme"=dword:00000000 |
||||||
|
;c 2 %R:1544% |
||||||
|
;x 0 %R:1545% |
||||||
|
;x 1 %R:1546% |
||||||
|
"WeatherIconPack"=dword:00000000 |
||||||
|
;c 2 %R:1547% |
||||||
|
;x 0 %R:1548% |
||||||
|
;x 1 %R:1549% |
||||||
|
"WeatherContentsMode"=dword:00000000 |
||||||
|
;c 17 %R:1550% |
||||||
|
;x 25 25 % |
||||||
|
;x 33 33 % |
||||||
|
;x 50 50 % |
||||||
|
;x 67 67 % |
||||||
|
;x 75 75 % |
||||||
|
;x 80 80 % |
||||||
|
;x 90 90 % |
||||||
|
;x 0 %R:1551% |
||||||
|
;x 110 110 % |
||||||
|
;x 125 125 % |
||||||
|
;x 150 150 % |
||||||
|
;x 175 175 % |
||||||
|
;x 200 200 % |
||||||
|
;x 250 250 % |
||||||
|
;x 300 300 % |
||||||
|
;x 400 400 % |
||||||
|
;x 500 500 % |
||||||
|
"WeatherZoomFactor"=dword:00000000 |
||||||
|
;q |
||||||
|
;g Weather_Section1 |
||||||
|
;y %R:1552% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Weather |
||||||
|
;s Weather_Section2 IsWeatherEnabled |
||||||
|
;t %WEATHERLASTUPDATETEXT% |
||||||
|
;u %R:1554% |
||||||
|
;update_weather |
||||||
|
;u %R:1555% |
||||||
|
;clear_data_weather |
||||||
|
;g Weather_Section2 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;T %R:1701% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1702% |
||||||
|
"LastSectionInProperties"=dword:00000000 |
||||||
|
;b %R:1703% * |
||||||
|
"ClockFlyoutOnWinC"=dword:00000000 |
||||||
|
;b %R:1704% * |
||||||
|
"ToolbarSeparators"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;b %R:1706% * |
||||||
|
"DontUsePowerShellOnWinX"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1707% |
||||||
|
"NoMenuAccelerator"=dword:00000000 |
||||||
|
;b %R:1708% * |
||||||
|
"DisableOfficeHotkeys"=dword:00000000 |
||||||
|
;b %R:1709% * |
||||||
|
"DisableWinFHotkey"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] |
||||||
|
;c 6 %R:1715% |
||||||
|
;x 256 %R:1716% |
||||||
|
;x 1 %R:1717% |
||||||
|
;x 16 %R:1718% |
||||||
|
;x 64 %R:1719% |
||||||
|
;x 2 %R:1720% |
||||||
|
;x 4 %R:1721% |
||||||
|
"Start_PowerButtonAction"=dword:00000002 |
||||||
|
;s LogonLogoffShutdownSounds LogonLogoffShutdownSoundsAvailable |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1727% * |
||||||
|
"LogonLogoffShutdownSounds"=dword:00000000 |
||||||
|
;g LogonLogoffShutdownSounds |
||||||
|
;t %R:1722% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1723% |
||||||
|
"DoNotRedirectSystemToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1724% |
||||||
|
"DoNotRedirectProgramsAndFeaturesToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1725% |
||||||
|
"DoNotRedirectDateAndTimeToSettingsApp"=dword:00000000 |
||||||
|
;b %R:1726% |
||||||
|
"DoNotRedirectNotificationIconsToSettingsApp"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1801% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 3 %R:1802% |
||||||
|
;x 1 %R:1803% |
||||||
|
;x 0 %R:1804% |
||||||
|
;x 2 %R:1805% |
||||||
|
"UpdatePolicy"=dword:00000001 |
||||||
|
;b %R:1806% |
||||||
|
"UpdatePreferStaging"=dword:00000000 |
||||||
|
;b %R:1807% |
||||||
|
"UpdateAllowDowngrades"=dword:00000000 |
||||||
|
;b %R:1817% |
||||||
|
"UpdateUseLocal"=dword:00000000 |
||||||
|
;t %R:1808% |
||||||
|
;w %R:1809% |
||||||
|
;%R:1810% |
||||||
|
;github.com/valinet/ExplorerPatcher/releases/latest |
||||||
|
"UpdateURL"="" |
||||||
|
;w %R:1811% |
||||||
|
;%R:1812% |
||||||
|
;api.github.com/repos/valinet/ExplorerPatcher/releases?per_page=1 |
||||||
|
"UpdateURLStaging"="" |
||||||
|
;y %R:1813% |
||||||
|
;;;EP_CHECK_FOR_UPDATES |
||||||
|
;y %R:1814% |
||||||
|
;;;EP_INSTALL_UPDATES |
||||||
|
;y %R:1815% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/blob/master/CHANGELOG.md |
||||||
|
;y %R:1816% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Configure-updates |
||||||
|
|
||||||
|
|
||||||
|
;T %R:1901% |
||||||
|
;e %R:1902% |
||||||
|
;y %R:1903% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/About-advanced-settings |
||||||
|
;q |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1904% |
||||||
|
"AllocConsole"=dword:00000000 |
||||||
|
;b %R:1905% |
||||||
|
"Memcheck"=dword:00000000 |
||||||
|
;b %R:1906% |
||||||
|
"TaskbarAutohideOnDoubleClick"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Control Panel\Desktop] |
||||||
|
;b %R:1907% * |
||||||
|
"PaintDesktopVersion"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1908% * |
||||||
|
"ClassicThemeMitigations"=dword:00000000 |
||||||
|
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1eeb5b5a-06fb-4732-96b3-975c0194eb39}\InprocServer32] |
||||||
|
;d %R:1909% * |
||||||
|
@="" |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;b %R:1910% |
||||||
|
"NoPropertiesInContextMenu"=dword:00000000 |
||||||
|
;b %R:1911% * |
||||||
|
"EnableSymbolDownload"=dword:00000001 |
||||||
|
;b %R:1912% * |
||||||
|
"PinnedItemsActAsQuickLaunch"=dword:00000000 |
||||||
|
;b %R:1913% * |
||||||
|
"RemoveExtraGapAroundPinnedItems"=dword:00000000 |
||||||
|
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher] |
||||||
|
;b %R:1927% * |
||||||
|
"XamlSounds"=dword:00000000 |
||||||
|
|
||||||
|
|
||||||
|
;T %R:2301% |
||||||
|
[HKEY_CURRENT_USER\Software\ExplorerPatcher] |
||||||
|
;z 10001 %R:1533% |
||||||
|
"Language"=dword:00000000 |
||||||
|
;y %R:2011% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Settings-management |
||||||
|
;u %R:2012% |
||||||
|
;import |
||||||
|
;u %R:2013% |
||||||
|
;export |
||||||
|
;u %R:2015% |
||||||
|
;reset |
||||||
|
;u %R:2102% |
||||||
|
;uninstall |
||||||
|
|
||||||
|
|
||||||
|
;T %R:2001% |
||||||
|
;e %R:201% |
||||||
|
;e %VERSIONINFORMATIONSTRING% |
||||||
|
;t © 2006-2025 VALINET Solutions SRL. All rights reserved. |
||||||
|
;e |
||||||
|
;e %R:2003% |
||||||
|
;e %R:2004% |
||||||
|
;t %OSVERSIONSTRING% |
||||||
|
;y %R:2006% (https://github.com/valinet) 🡕 |
||||||
|
;https://github.com/valinet |
||||||
|
;q |
||||||
|
;y %R:2007% (https://www.valinet.ro) 🡕 |
||||||
|
;https://www.valinet.ro |
||||||
|
;y %R:2009% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher#donate |
||||||
|
;y %R:2010% 🡕 |
||||||
|
;https://github.com/valinet/ExplorerPatcher/wiki/Frequently-asked-questions |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;f |
||||||
|
;u %R:2201% (*) |
||||||
|
;restart |
||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue