From 6dc53bcc4845e8b9582f57fac16bf72163d6b7f9 Mon Sep 17 00:00:00 2001 From: henrypp Date: Fri, 20 Oct 2017 01:24:47 +0600 Subject: [PATCH] 3.3 --- .gitignore | 2 + CHANGELOG.md | 10 + bin/History.txt | 10 + bin/i18n/!example.txt | Bin 5890 -> 6472 bytes bin/i18n/Bulgarian.ini | Bin 6244 -> 6720 bytes bin/i18n/Chinese (Simplified).ini | Bin 4118 -> 4658 bytes bin/i18n/Chinese (Simplified2).ini | Bin 4112 -> 4650 bytes bin/i18n/Chinese (Traditional).ini | Bin 4306 -> 4844 bytes bin/i18n/French.ini | Bin 6732 -> 7204 bytes bin/i18n/German.ini | Bin 6406 -> 6874 bytes bin/i18n/Hungarian.ini | Bin 6114 -> 6578 bytes bin/i18n/Indonesian.ini | Bin 6770 -> 7150 bytes bin/i18n/Italiano.ini | Bin 6414 -> 6892 bytes bin/i18n/Korean.ini | Bin 4576 -> 5104 bytes bin/i18n/Persian.ini | Bin 5932 -> 6412 bytes bin/i18n/Polski.ini | Bin 6236 -> 6722 bytes bin/i18n/Portuguese (Brazil).ini | Bin 6602 -> 7070 bytes bin/i18n/Portuguese.ini | Bin 6330 -> 6796 bytes bin/i18n/Russian.ini | Bin 6300 -> 6824 bytes bin/i18n/Spanish.ini | Bin 6554 -> 7012 bytes bin/i18n/Spanish2.ini | Bin 6544 -> 6988 bytes bin/i18n/Spanish3.ini | Bin 6366 -> 6830 bytes bin/i18n/Swedish.ini | Bin 6176 -> 6654 bytes bin/i18n/Ukrainian.ini | Bin 6236 -> 6698 bytes build.bat | 2 +- memreduct.vcxproj | 28 +- memreduct.vcxproj.filters | 4 +- src/app.hpp | 4 +- src/main.cpp | 1316 ++++++++++++++++++---------- src/main.hpp | 104 +-- src/resource.hpp | 144 +-- src/resource.rc | 159 ++-- 32 files changed, 1076 insertions(+), 707 deletions(-) diff --git a/.gitignore b/.gitignore index b5661f8e..4de24967 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ $RECYCLE.BIN/ +.vs/ debug/ release/ x64/ @@ -29,5 +30,6 @@ Desktop.ini *.exp *.user *.iobj +*.ipch *.ipdb *.ilk diff --git a/CHANGELOG.md b/CHANGELOG.md index 9209f7c9..3f13f702 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +v3.3 (20 October 2017) ++ new settings dialog ++ added "combine memory lists" area (win10 and above) ++ added warning message for "standby list" & "modified page list" about freezes (issue #17) +- updated translations +- updated project sdk +- fixed freezes after auto-reduct +- fixed ui bugs +- fixed bugs + v3.2.2 (9 September 2017) + added set default language as in system + more precise cleaning result diff --git a/bin/History.txt b/bin/History.txt index 9209f7c9..3f13f702 100644 --- a/bin/History.txt +++ b/bin/History.txt @@ -1,3 +1,13 @@ +v3.3 (20 October 2017) ++ new settings dialog ++ added "combine memory lists" area (win10 and above) ++ added warning message for "standby list" & "modified page list" about freezes (issue #17) +- updated translations +- updated project sdk +- fixed freezes after auto-reduct +- fixed ui bugs +- fixed bugs + v3.2.2 (9 September 2017) + added set default language as in system + more precise cleaning result diff --git a/bin/i18n/!example.txt b/bin/i18n/!example.txt index c62615b1b2b7e4b6fac465ddb1e0d8662f9c7781..3aa50f8728225e3ba6aa47dc24342802fae786b7 100644 GIT binary patch delta 955 zcmb7DO-mb56g@&FLd`5>Y(WEEmejF8EcWHh9U3f*;m zSKasDm|WjwMOKV_10cP3Tgh|!NaEfvZnjCxZ6U8nY>(ED~^Y4 z{!*+fCXFOgvKU?H&6<5)g6Qbkx9DXgkt1CldkD}%6Rx3elD^2eXezqyvVMfJeDAxM z?&<_4q(AmTe#geUWOD5MahFW6@dR(MiX9XvI735Taj!<*vj>~Z?I7Dhtz(0xC#lb; zO7)^l(L@&8z}n0d^svoCh8civ+Q?bv3sL#|CeA7)y{=a99K z7#AhEat3==DUVkLgXUy^9_7h$ylMnYD&&pCuVQmMUpTwE z3qwB80hK_q6iAnYom2v3m4L+|4lQCRnas$gm~PL&%fQ9p$>72e%n;8I!r%{tK0w+N z=vPp9WdO}726`_UXi5%)70?t_p!ZaPFa{W6F+k5^gef*vljT`exsh~F=9F+WOa{dO k*mbGkAj<=~uN>^+OrTpcz;+b_$zq_IGN8(o$>kCk0a5c`5dZ)H diff --git a/bin/i18n/Bulgarian.ini b/bin/i18n/Bulgarian.ini index b40a8b604e0a9f0b8edaccf4808f760249151afd..e257176c0f95e2a6cc09ff50b55d42cbea081f8a 100644 GIT binary patch delta 647 zcmZ8ePfG%E5Pfx6gGi)E4@ImB(V;&E1$mG#HH&sFYC$}S=4yhvqFZ7Yze4c)7+nIt zK-Z3ahmL)Rdh=7kVi|rrGw;p3nfXe*AH7+|N**~BXtzkiQnqohY}2!G%}7Z_*OTho zSY1owhF^{t!4;4}PJI~10Z02K^<%`xRv-}=Wk|GfhD%*^t`scB?%>eMq+j3)DZU=s zsG^AuT$ucKX&!nQ(rYo^hfg!HgQ7;&m>uZIArg#N$gJtN%FNRuT=f}@k6(gYODY=< z?U%_D(FLt2&)yFI9IDB&f06tiD@gwaqEIK{&C!2KijoI}__)Wz6uQS|9kz`z=TAjc z|A>ywiHmV19%VLBr@2~im#l^!dN!so+Ng|lnL2g3{GK&rNctlqCMC$my7YWzBvNNY z-U|06yOWKHC&gs03DTUR`h0hFUh13dC6!IGq`pM9U6Lw1N=v)Go>@-dv8~UNGWn@q oRkDn8ZZZwo>+Ggk0!%_Yt)ox6Tx@cwp;pK~>NT=4b|RsLUm^E-Z~y=R delta 194 zcmX?L^2A_+4;!Q5Xwgj4oU6lokBa0J@DT@sd+X7Wv0cj6pwVOpHwHW~- C#v#Q3 diff --git a/bin/i18n/Chinese (Simplified).ini b/bin/i18n/Chinese (Simplified).ini index d3625ac0aab8ed9220eed540f235b7baf220a3ff..af4722fd26a8eebd044d4ebb9ece7f0392c5aa05 100644 GIT binary patch delta 648 zcmZ8e%}N4c6g`V^A(2IGTYO1HLPc$Y77}KYMQULK76dY*qY3JWPKrTTuh2ly6S$3h ziMH)}h!!ndcJ8Nw#c=uN{+x5qz4uwYt-L-MvniO!(sD>39XuMVGZ}groH24042;-f z0_Xfp=A|Z!B+TH$h%H#!zd{_B&Sz&(+|3Q6p(mrCBsPNsoM_%DHl!K5fJG~i;DSc6H#iP+ct)0C;p<#(q`dW7FHq9{R@)}-e% zBat#A^4eUPtWTCEo{-60qe?ZdYV+ODdEr;=CCrK_;g`soOOVaG)U@mCndJ%|+xn!G o$@lfD_6j)SCKHgoPR@GB0>u(f>u3`$M;jfhrxmhKa6k9*3*}~fJ^%m! delta 174 zcmdm_GEHGa0}G?!fy4JX9~^)08`X11^@s6 diff --git a/bin/i18n/Chinese (Simplified2).ini b/bin/i18n/Chinese (Simplified2).ini index 911fcf44e4c3bf200c3c93a7511fac8573865e10..f89e98e0b5abc3e836bcc1440e5c1fbc794a9e16 100644 GIT binary patch delta 643 zcmZ8e%}N4c6g`WPh{#$MLC`c*BvjP0g@l<|q!u+Gu4K&71a(BGblOZ$5Wze^%b-=@ z8}tM{K=05ibnaEb;^Xpt_vf5@?)_fO_l=K%F`q>S1==-I$VGv%IhUuG$0Z}B=+#K9 zq;SQPVP0wqNb{Y>NGTwtvGqH`LR#lnpYvcg?j5|bD^{z1U5F+8(&10LJ@q?E~zbXA9C ioN|*X$X+L3dcp#eC7$Z&5iTD#`lvt^vQN}lc>4vhD|od4 delta 165 zcmZ3bGC^TO1q+8EgDrza+>y@72Uz47jV5np(PT89{E83A*aHCRO)Z=N diff --git a/bin/i18n/Chinese (Traditional).ini b/bin/i18n/Chinese (Traditional).ini index 65dee2029690d7c52e4cb8d80cb88c39f1dabf90..607416b4298734ea7047a5c8c0817b26fcded885 100644 GIT binary patch delta 635 zcmZ8e-AV#s5IxXJV1!1u1*>2L{aBY>NT_WVsYNY_SF+~%1L}%yiQahE3+!tc2tGlt zP_NND)R|Gi;$!%}nK@_X%zU4*@5F3sZ0BI1NP9#Y`QY71Y!&DgaL-6N_%e=m(|F*q zm={bDSy;i3k=(S^F9*rc{=6BQ8IvqY1!Qom1=q?T&)5@eT7~o*+#$u=LkCr~(1i<= zZbY4Bj-3{+#$23ca@pf4HlS(!_!dk7Kxr#ND{?Gm6Ky* zn=hMEEH*EZ+$UX{HxNTGj_ghTQ&QABB*e!vnoH;jJ9XJJ&YZtgQ2nDgzNReBeR$N^ zLY?NS+8$XAop?2)FgkE1TBc52F3(sYBhp_OF)2aT)uZP#Bau2Iaywj>EKb%Xo)nY0 z7D#i68t^{Wywo?@ODdaWNqvbNxFk9Jk+!5nyo+ldYjg;MKM?vbgfMslmDn;oi@q{TqH9~?m042%RT)wkRDm#tp$Lfc7^2(W Yq~MbKT~k>5G&aWn*fhAl$=X5(0huN)mjD0& diff --git a/bin/i18n/French.ini b/bin/i18n/French.ini index 5bbe02e46aebc1c3109a54533d664a4fd0ad4e54..b9ec459d9731f54efa0d608c026bd1393d3cdc5f 100644 GIT binary patch delta 627 zcmY*W%}N4c6g{eG|) zM{&$A&bZ{H5kp)BjWr{u{en6%w)$_zx6zA{l)^3!b-|G`ND|8;M=O$kfFo@4b&BQYDI;+g+wMHTc6Sv4L>$k+n)i`YR<6G=M`EDoFb6{G1 z`Df;HRL)U9PQ^SKZE{4hiUoBa2=D?gHEL8o!}&0CmDQWn2{GmlRZIW6 z42^UX;tm}4RYQel>keCFRrQpAa|xpXtEbCU*p|)jMyGU1za(O^1zAyxp38_J6(aIl zT#zhFRwSMjld%Sw<}jcZ<+;kn8F`|RD=FDNN_sQ>@~ delta 204 zcmZ2tamHlBEH*~N$;;UcS&bNM8T=*}O6X3m;^v#&!^FoN&tN>+mED-pWO6;brKlrA z01)~xL;}@0G86z|4nyYThs>gzcd%b!pFBZ8WV3-l4To_EgFg`ZFoZC80@d3BaRx&r zLoq`pLo!1mP>&UZ0)r|;3J|L@#4r>Aao*&atjd;H#2K7{I+B63l|b*lSOJ#1L8`?98FM1oGGyuZX#OM;{B1p zpU|$K(68y-r-H?Bd2>I`x#!;dn)*5Ve2*;WVWUL5K^6u55jlt!=@oIsNJW1|^6Ob# z^Rt~UX2rA+P7lv?-1_j1$;n1ptpW_l4zCJprp@l9y zDE@miAAJnzwHXf((iC=3HdS?I2PU$QJ;q%k>*lR7^SB64M^_W$@0G(P{T5qGR*4hQ zC8H?M-VXm9sOnjdV(!Yr<{T$mI{YPY|c)*GfcetNcCfTdYu5sqVsfOAg&G9*H zac;z?$`%?l&*<$D)ig8DrW8a6?#R$ID9hvbWJ-pFKQN*wK^E4d7cwJ}1|#yiT$ij) z7ABsM$yk$0HLVKx?wY*tEA|p*MU?PMWZNUidSoj4FX?FMk delta 206 zcmca*+Gez&k8Sb+cCpDD*yJWFh>1;p$7aN9%wWsl!jQ^P%#g{DKKVbJBBROVbarKN zM}`0(^kIku$~!XTF_Z(<&66v<@3qHFSD TRz+?k@yQ2yg*R78CNKg34)-mN diff --git a/bin/i18n/Hungarian.ini b/bin/i18n/Hungarian.ini index 5cf75c67f38ab38dd5691506177521e9454289ba..ef8b7463be6f978786c663647c19047dd768c55b 100644 GIT binary patch delta 637 zcmZ8eO-lk{5Ps^gdx#sZl%ro`OiTq4UmLGfivhg{;ypw(3mYhFR*liVBD>fj?vq*5yUNJZJc5z8^kK%|$>oekjtF*C zO@Vz~zFaD?*}F_`mu%_XKq~%Bt`7e*vQ*n=Mua=uPck#?(`LssW6`94^^e~4jIK1d z5mI3jby}cWJ7hI<-syzGXu%(9nL1?!JkOdkApMbuMG3O34!wvGLFz>0_PHuqn=DH_ zDJEl$Gp$KhkN2j=rM|^pQrRL)>IFp2IDgZZRWN89lP)uf~5gP=RbSdS6M*{Q{s1c$feH delta 192 zcmdmF{78R;1skK`WLGxh$t|KrlmD;@F&a<4$!5xEGFg;eQQVOs00?~;A{lHMf*4X6 z@)%MWk{D7qtF!yFPtM^N*(}Asi9Ire!5;{H7(y64fvRm8+!!($s(?6~ArVMgF(@#o z0`;i^VGKhN5a$8aCNdN-z>% diff --git a/bin/i18n/Indonesian.ini b/bin/i18n/Indonesian.ini index 8bb5d0ca719712eb192fc771a51824ff098823f7..ce8b27771a2d5a1aca91b6049dbcdd6bfffd8f5f 100644 GIT binary patch delta 601 zcmZWm!Ab&A6g}CZ2^5WjlrknEC{RcUqCmvVEK-w_!cC&78RSefV`3ZW16sXhKM~9a z_(v^VwX1WV20{#v_wKppo^$V=@!r?|=eiNdBZm^tB{C?esIe0)GAiPNNEIoR)mwN~ zb(Z|fGB%boDD%saEBq3&$f+&loUzB<{fFF|mys&1y2+*GLk(#OthV>bt?riw`X? z9dZnH7!Dh!U+>OD49A{_l!kz%)fGF;rDGi4^|W6?3D zK7x@zY^H~p`U!3g1?f^-CTP>4#qU*5H(+Ith)Fe>`-zduj38|ya@RSvY(VCgNVH@- z6Q((3IlSXKFZw3EMA>9jFRm?3!WPRLloNuh+m}V!v~?*dL!@QsgBnh_k_==)e?R7! cd6NuVx8bl_);?MHKsQKZHHxfxw~>{(Uo1Lu$N&HU delta 251 zcmZur%L)Nu7(KtxFOfACEM{RPml9g z(iQaB+tAS=K68XRYOqj615H}nSYS=8Xmq}IB(URUW6y1c19=+@_Zjqg-D6}TLj!bK tEhg(Q)ZHH|mZ;P)AvBnL#bl;I*PM?fFk`;M?T<=XVJ-N>yO(HMya9o>GH?I@ diff --git a/bin/i18n/Italiano.ini b/bin/i18n/Italiano.ini index 6a640ca87fd5947a845288a03e706f9525c4517a..9236ff1a213fa27322f4e7509d9d5e2124703b6e 100644 GIT binary patch delta 637 zcmZ8eO-lk%6g@@E1knctwhCTC&>|^=7A_>rCXIB88W2}D=8OsIh>nSE{0D7j9nrQ` z;1B8#1pS51eJWTyF7MrY&$;*9`(BQ}Pd@LB)f_C?v|D6Qh+HGNQlwYJH6!KdXDJog z#^zQAH#`cWq~~#kH17Z{ zRM9{i9u(gmEkGATdQHZA2x$uYC}~uU*@2EEam2VwW=-E!W}X(|jo;S#%h5+{BT*qo z1lw9oj(r`z94fKcyF_l6Z0TLcZuA=48U1IZsdhj_hzC4QkqP!`vtyjOaN586M{j&i zSDf1jsIUQ_=4q`Rvg&%?*@VJq!5!%`K4p14&l)l$z0ZiE1X)&xUdW6@d`9GUxhh$k zEK58oCSy&IYKrRdKG1oouh>f}E3%}%MD{$AT>eK>yP=+0wjZ!<$dWSoscb4$!3Fo2 ffoyg5o9E0cA_6U=N4EUcM@vO4K*u89}zS;$}oG3hDtQO3k9Y{b-4c5Y4Me))l>Gwz)6R?!H3XAm|NR z^cwX9VVf4MIx{NRN-iJYH)m$foSC_wOTCqsUSK+fBut)DY~#@T4lGZlX{B*QB=3Fr zBi^rXX0AZ*F~1~li8K-CJBIsrJbPchxyb^u>d1T7!THyx;7`DflOv5C>?{8WD-MZe zn2w*$MXqXA~<1_bJI_(VVtnsVs>ORv{ZhbSF`+h?B?Sbrm{a7^ z>S{UKv#iKwS%-|$_}2ND5$E~_e|$>f==vI33_0YK=(5XoT6 zz<6TivCXSknOHa5aI>(vhcNg9p$|g{gC|glEyI&TGAFDU6c|()Qh->MA%>v{i1Qd` iTrN3&;G_Zr&*hrqSmY-MvIuh{iBHZImY%F9dh$A;xC+g&1a(BG!Zz~)t(rw|&?+Jj zS_VBzFVHh|?x%sRVz_*Bf6hJU-usez*m+B-SPm9!+8NR)hMQ__u0*edV@9fBB#{hX zReUjx6MhzJq|QbLR`{fnQAhjL@KY_1RP;jy83Ic9rXjz^55lMMYONn7z}HZEP`KBeJ32Iy1L3Y%qF{Jx9au#C-U; z5Dy&EIwZG9S7CXd0HM3W3SyXLHmfC_;+!=iFwYTeimd2qZTdEHM3+h2qMS=yPdaRn zvP*K4Ie#Lh{ztkQOldT^8INjPXwqD*yGPiSp8a=PlZXzZvVkV$y8P~S#gOP5Mhr@j zz4hq%%t)lkh`cp!O*SZd6EBcvGVi$5n3N6puImCJFi0k?4Z?&#A}%pCo~ErmU(YOu t@JQ>kqfEa4&jt@s+~pE;Qy0$?Xb|dYeFL_Ydyelo)XGUe`dTVPegM|Rdt?9r delta 213 zcmeA%TBEl?kB!lAvNfCby_IXVYXfnf#tjQr3|n00?~;A{lHM)Y;tF zblB9{T-g*D^ntYg=AUe5**1sq&0wz&Vekh+ABGSHPoR2R21m9tY(_x55{RuB6c|() zQh->MA%>v{i1UDI5*gANQh_pQ44Di$Ko&Mt!3>oQ#SA4t*<7H?a)x}M?rfm?JfL0$ TpiC-I4y=z2V*KWV;@*q^Cnzew diff --git a/bin/i18n/Polski.ini b/bin/i18n/Polski.ini index 8b37c787ed564c8bb78f193284b1a15c23041707..7f9f8d5f1101e1f564bc90f462a4b3c850a2bd6f 100644 GIT binary patch delta 634 zcmZ8eO-lk%6g@4P3Bm{jTLmv6C`eHHfS?Go$s)C=0dXZ`jwYyMI%U(wKhP%L9|>Hy z>38%yT6gYK!Qydw?|z(n&b{wD{k8Y;V#V@sP@>%;i-L}<+;Wj#5!Z}V^rw}NXK};h zFfTPF8qT#rfw4Qdv?}2jxWX~-03FoOLKi+1 z-##rs9}&Ga;{${=g)Nj#Rh`+PiDZyw+#|AX?iw@CD#T4}=-Wr`$S(j}P-r{uLiVv}>Cl3YbVc`Y<( zz7g6Zs%eIujVFi>ypd_spe&!~)s#epKQW>xK{nN+7cwJ}1|xEN+>`7~HYJ`kld&e1 zYFahmy<_syUy(~XE25;oL^gebJbp&oxS^R@Rv(ZyWJ{U+L^gF;#X0wwg=}^9m1oQ= aRs=@IfN1%s$p=M7AZhe_EIvM3QwzT+DRuJz delta 186 zcmX?Pa>rmp1skK`33`Xly((CIT)yxAoO{l_-!%D_`uL1&gkRti8QwnHsG^Au zJeYiYG#@>T=(QN{BcPc$z@1jrm>p{57)Ok|MAr1KGBa3(H+k4>u7&r}tweB#(0YW delta 178 zcmbPde#&^m4mL)^$w%3YCqH2km@LF@#b`V^kyCW?GH$-fHtYh7CX;8fTS_`I1OTBA zLnMPOgCj!$Lk>eGLo!1mL(%4=>}%O47YK-K787ve&<|no2SOi)5C%`6dRqoJhPMpG tP_O~fOJz_dc8@CUiS#0_km2j2hXy+6!-K`& z9?i!96M9|ZLxeO7`>1JFlhLsvX&e)G$!zM|VB~Eb-t=pGcO$yR1LaD;5*0b@SySJNR_H=>Zq~KfR#i?8+%A#lhM3tT~#T=tTCA(p7AoTa1>EYpR!U6hI5gPe?z5~ z#HYA2pJQ~;qIo({Kvr9qvRH#KdPHS4Ez0%yy=%sV>=6-*5@ewPq7mDA3bhDH$mKp| zx3W?3q?pV*%e3ZML%xR^mj)J_Nok8LX&{J4j?0^M)eCiIxscDcAuGz@=Z`B^c*(_Q fA!k_p74jrnr1~mv$g*vcC2Qr}uo1 delta 180 zcmeA%-DS9;fQ`{`axI%Ss}X}OgU@7raplQ!tUQzB*n}93Cv&qKGn!0xWjB{}WC#F4 zABISvDo2I_h8%`WhGd3BhN8{+?4j(NL-=_(^g|f@fzXE`guxT2)|SDI;VnZkRGk%r t0)r|;3J|L@#4r>Aao*%aR>{d(d_uz5i5J42TF7m@oO&g%A(;wHc#v8Dg}}pS)k{S$n{|W$N+e{zcnkKJlU0P zO1Oy`^Lx5@@?rLG;at|Gdzwjy6b*LYCuNys9AQM+`;>oHY&HB1FNJ8ivf!zi#3Y^gFTBKiwTPrknav8EhaB!4dfOF@@!fBS)5qxCUdh% zb1SkK0aY1-R8BTzi)1vMJe|#u(P(m`r2OPhY;ugola<*`8BHd~vx|#6G6Vpj4?`q_ zErUFZ1B(TV4T~v@?PNg~;mu|2UhJE__@A+R8?kt^fNZt~+G7E<#|P*VJD>|JSR8>o zD;8(4%M5^eL9Vc1v1j0A;9~G(aA62$h-V04@CQO4AnnNzFxj3})zOMUfkBla1&CD{ zVi<~mIFA9RA6c-dp1hw`nj1-c@u;(Q=+%9`{5l>N{e`(skyGtq=Usc7}+J-}A zhx!&3%VhM)5yb|!)mD6SR3$2d6?E4&vr5!xQTY+gS>_?Dcd3(LES#y<{&ks{>n6b+ z1njE?pXTWfdt^2Alz(#xqXT!O%lK@|;HRfZUb eA|TG2+|Md1j7@w$t35Z8_~cqC>CFOCA&dZ_Wh1Eo diff --git a/bin/i18n/Spanish2.ini b/bin/i18n/Spanish2.ini index e6e22cbc79a15c0d1f7b998f064a3fd341f1bf9e..307861ad4a556f64635bc7cd0b412b89af80ccad 100644 GIT binary patch delta 645 zcmZ8e-AV#s5IqIC-H1_;QUseIc#&8{frW&bS>#WY6kf@is|o5#Zi(G^Q}@EYLJv^* z8ofks(wR}g;$!%}`8hLZ&NtfsKKy+1`LoENK)XQ-Iq%&U59I0PQDmfyB#Pe8dcunu zt7|D-^JG{jwFRV+@s^AOqojV>J2v9uk?~;+(*);nic4)g-!8}4ElRWs;TO2#fHWMm zQAHCS*f9CFX%3z+px0u&2bX3dihHf9G27S39(EbGh^*;dW#(lO_Baw~EPETll~{!s zAzV;4SJ$}l5G2|aPff0X=RLaI-D40&YjM${^1** z;}xbF4jDF4r`gK2OH@Pmooy(HHmsqxsgst?^Qt8S!k-y2NkPQw(sP-SNSzV6ElMS_ ziCE%EGm&&sX-=zpymvG&{Y}o2&L&aPUm_8kAdCOeQrFd;MSX{3UAC0XPeiFi1?SW; j1yObOn`g|MtZ1QCJv7SdqxC4^Tp*0a=g)SOTjCn~i^9vb~>R zO!x#FTYtdcurl$?1rxL}o5{U%X3or+x%&}+-h9bw;WSLxv{NLI4J>VC%A#lCh)6Mb zn2iRH+FCS$V}2%cB+o_?X7H-5hw{oV2A|qi|2%XN@{=T5*h5AY9Vvw@u^jTWOVST; zh;5!Onkb`=798ljJ2V#^^yoE+cj3`=ETW*YDvaJKB#u?$B{D1OEHiRD4kw637W!|~ z`b6XeXOt{GGgM^Z`q85WOZ>X&NYZAjBk!)~LF2&bTr8#PhHfc4ril5;PGMYqXAyvwC_}#0F z9@#fUbV`slw&{6{2vQ{?XNgOcg~}Sm^QD-~J4n@sXZH0#UzcU&c?ZwhQ_9&s_=?T-pJKaX E-}e81>Hq)$ delta 188 zcmZ2yde3l!4;!Q5F&a;P&1TGKGFg?~Qqqwj00?~;A{lHM92p82 zau_lhk{J>iiZ%zbXR}Y<$1k!ufnR~cHiW?+2z?kr7(9XMZ5iAc-ZB(J)mkwqFsL%5 z0I@1V3_}qR=K;+s0-BQnR8hu|KRKLFRv3$_$?tiTxsk*t3-St2ejv%QIZx7o5dh#k BC{q9c diff --git a/bin/i18n/Swedish.ini b/bin/i18n/Swedish.ini index ff1b7baa18b69639cd008e80284257ee608ec519..044b784620573a0521dd4bcebc5371a35ec89ec1 100644 GIT binary patch delta 693 zcmah{&q@Mu5dONjP;8f|Ynxp>6e*o0Og9sC`?n#ULUT1iUC}i$h<%8CfqH|$V{gzi z)V)XO6n!%)*h!Y*=X^8Y%r`T>B!7?JK4WGcHXPbDGAKn~v7?PLy)rI{R3pQ|#@V}JT#e8<8pNoAa(paqx8phWBjF71x=a}<&0>!XW0+UUW9 z#or#y#{d(09pXa-Gz$q-G^@erSdkQx#A{?W^sO`UIDOrGH^M92QmZs8P>#cf6;sZP?L~^YFwr) zR@Nz=6q9*pnbtgO$oD|w(!gRfDQ%G@4FvJXsqtVP^#Yw)&f~Lfz=|^XiMwKjXIy*+ ia)!nKAV;D_s;}~fEGt)@U3a3w2hpy%J^k59to;GNvwqb8 delta 192 zcmexoyue_?9X3Y8$uHUTS&bNM8GI+d=F*%Tz%IaOJh_MAqHqh3_~8!v?mM|KvOb->~x^IG$1Pno654wG;7UGE=87LtKT{SV20WV`43ae#83%ty={y zqkqz$=pS_M)4-h!mpAv^d(J)YzMtgB{^yBd7GT3+Tp)w8DjB;=6=oHj5~-_KBOT4) zjGxWA^f<`DR$s)xq#vV%6i*LrH1U8A zTv+^f86LVAGJ7Q6gU_(Ag_`cVWp$vDJtT=Y$h_5Ola=RrxavEyG4dm8;ouxsv@A1= zbmeevO<%y#?h4GMQl&GSUTW0pQcb+vVI3wGSFw8Z+j z)0%Ykc<$)B=v$m6$`)DuK##NtcSvtiP8xjeUpDS>tWQa~M0&P3U!WuPW=7R}EIi7_R_FczLS%Lu delta 196 zcmZ2wa>rnU7aODD$hlfuscs7S)q`S;hHHSv-*CCO7g5PtKF% K*eoC^#RvdeX(D<6 diff --git a/build.bat b/build.bat index 2c8c27b9..45fed883 100644 --- a/build.bat +++ b/build.bat @@ -1,4 +1,4 @@ @echo off cd ..\builder -build "Mem Reduct" memreduct 3.2.1 +build "Mem Reduct" memreduct 3.3 diff --git a/memreduct.vcxproj b/memreduct.vcxproj index edbbfc06..e67d112d 100644 --- a/memreduct.vcxproj +++ b/memreduct.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -21,7 +21,7 @@ {7FB76828-A353-4113-82D7-CD728EED81DF} memreduct - 8.1 + 10.0.16299.0 memreduct v4.5 @@ -29,28 +29,28 @@ Application true - v140 + v141 Unicode true Application false - v140 + v141 true Unicode Application true - v140 + v141 Unicode true Application false - v140 + v141 true Unicode @@ -81,6 +81,7 @@ $(Platform)\$(Configuration)\$(ProjectName)\ + NativeRecommendedRules.ruleset $(SolutionDir)bin\$(PlatformArchitecture)\ @@ -91,6 +92,7 @@ $(Platform)\$(Configuration)\$(ProjectName)\ + NativeRecommendedRules.ruleset $(SolutionDir)bin\$(PlatformArchitecture)\ @@ -101,6 +103,7 @@ $(Platform)\$(Configuration)\$(ProjectName)\ + NativeRecommendedRules.ruleset $(SolutionDir)bin\$(PlatformArchitecture)\ @@ -111,6 +114,7 @@ $(Platform)\$(Configuration)\$(ProjectName)\ + NativeRecommendedRules.ruleset @@ -126,13 +130,14 @@ Sync false true - _UNICODE;UNICODE;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) + _UNICODE;UNICODE;_APP_HAVE_NTDLL;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) true false false true + false Debug @@ -165,13 +170,14 @@ Sync false true - _UNICODE;UNICODE;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) + _UNICODE;UNICODE;_APP_HAVE_NTDLL;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) true false false true + false Debug @@ -210,13 +216,14 @@ None - _UNICODE;UNICODE;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) + _UNICODE;UNICODE;_APP_HAVE_NTDLL;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) true false true true + false No @@ -254,12 +261,13 @@ None - _UNICODE;UNICODE;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) + _UNICODE;UNICODE;_APP_HAVE_NTDLL;_APP_HAVE_AUTORUN;_APP_HAVE_SKIPUAC;_APP_HAVE_TRAY;%(PreprocessorDefinitions) false true true + false No diff --git a/memreduct.vcxproj.filters b/memreduct.vcxproj.filters index ca7ab7ac..b19f2c5a 100644 --- a/memreduct.vcxproj.filters +++ b/memreduct.vcxproj.filters @@ -44,10 +44,10 @@ Header Files - + Header Files - + Header Files diff --git a/src/app.hpp b/src/app.hpp index 8115da75..76b71224 100644 --- a/src/app.hpp +++ b/src/app.hpp @@ -6,8 +6,8 @@ #define APP_NAME L"Mem Reduct" #define APP_NAME_SHORT L"memreduct" -#define APP_VERSION L"3.2.2" -#define APP_VERSION_RES 3,2,2,0 +#define APP_VERSION L"3.3" +#define APP_VERSION_RES 3,3,0,0 #define APP_COPYRIGHT L"(c) 2011-2017 " _APP_AUTHOR L". All Rights Reserved." #endif // __APP_H__ diff --git a/src/main.cpp b/src/main.cpp index 56ff5636..652b7fd9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,21 +11,22 @@ #include "resource.hpp" -STATIC_DATA config = {0}; +STATIC_DATA config; + +RECT icon_rc; +MEMORYINFO meminfo; rapp app (APP_NAME, APP_NAME_SHORT, APP_VERSION, APP_COPYRIGHT); std::vector limit_vec; std::vector interval_vec; -VOID generate_menu_array (UINT val, std::vector& pvc) +void generate_menu_array (UINT val, std::vector& pvc) { pvc.clear (); for (UINT i = 1; i < 10; i++) - { pvc.push_back (i * 10); - } for (UINT i = val - 2; i <= (val + 2); i++) { @@ -47,7 +48,7 @@ VOID BresenhamCircle (HDC dc, LONG radius, LPPOINT pt, COLORREF clr) SetPixel (dc, cy + pt->x, cx + pt->y, clr); // point (R, 0); SetPixel (dc, -cy + pt->x, cx + pt->y, clr); // point (-R, 0); - while (1) + while (true) { if (d > -cy) { @@ -66,7 +67,7 @@ VOID BresenhamCircle (HDC dc, LONG radius, LPPOINT pt, COLORREF clr) break; } // cy is 0, but these points are already drawn; - // the actual drawing: + // the actual drawing: SetPixel (dc, cx + pt->x, cy + pt->y, clr); // 0-90 degrees SetPixel (dc, -cx + pt->x, cy + pt->y, clr); // 90-180 degrees SetPixel (dc, -cx + pt->x, -cy + pt->y, clr); // 180-270 degrees @@ -80,7 +81,7 @@ VOID BresenhamLine (HDC dc, INT x0, INT y0, INT x1, INT y1, COLORREF clr) INT dy = abs (y1 - y0), sy = y0 < y1 ? 1 : -1; INT err = (dx > dy ? dx : -dy) / 2; - while (1) + while (true) { SetPixel (dc, x0, y0, clr); @@ -102,7 +103,59 @@ VOID BresenhamLine (HDC dc, INT x0, INT y0, INT x1, INT y1, COLORREF clr) } } -DWORD _app_getstatus (MEMORYINFO* m) +BOOL _app_confirmmessage (HWND hwnd, LPCWSTR title, LPCWSTR text, LPCWSTR cfg_name) +{ + if (!app.ConfigGet (cfg_name, true).AsBool ()) + return true; + + if (app.IsVistaOrLater ()) + { + TASKDIALOGCONFIG tdc = {0}; + + INT result = 0; + BOOL is_flagchecked = 0; + + WCHAR main[128] = {0}; + WCHAR flag[128] = {0}; + WCHAR content[256] = {0}; + + tdc.cbSize = sizeof (tdc); + tdc.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION; + tdc.hwndParent = hwnd; + tdc.pszWindowTitle = APP_NAME; + tdc.pfCallback = &_r_msg_callback; + tdc.pszMainIcon = TD_WARNING_ICON; + tdc.dwCommonButtons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON; + tdc.pszContent = content; + tdc.pszVerificationText = flag; + + if (title) + { + tdc.pszMainInstruction = main; + StringCchCopy (main, _countof (main), title); + } + + StringCchCopy (content, _countof (content), text); + StringCchCopy (flag, _countof (flag), I18N (&app, IDS_QUESTION_FLAG_CHK, 0)); + + if (_r_msg_taskdialog (&tdc, &result, nullptr, &is_flagchecked)) + { + if (result == IDYES) + { + app.ConfigSet (cfg_name, is_flagchecked ? false : true); + return true; + } + } + } + else + { + return _r_msg (hwnd, MB_YESNO | MB_ICONEXCLAMATION, APP_NAME, nullptr, L"%s", text) == IDYES; + } + + return false; +} + +DWORD _app_memorystatus (MEMORYINFO* m) { MEMORYSTATUSEX msex = {0}; SYSTEM_CACHE_INFORMATION sci = {0}; @@ -135,26 +188,28 @@ DWORD _app_getstatus (MEMORYINFO* m) return msex.dwMemoryLoad; } -DWORD _app_clean (HWND hwnd) +DWORD _app_memoryclean (HWND hwnd, bool is_preventfrezes) { - MEMORYINFO mem = {0}; + if (!app.IsAdmin ()) + return 0; + + MEMORYINFO mem; + UINT command = 0; - const DWORD mask = app.ConfigGet (L"ReductMask", MASK_DEFAULT).AsUlong (); + DWORD mask = app.ConfigGet (L"ReductMask2", REDUCT_MASK_DEFAULT).AsUlong (); + + if (is_preventfrezes) + mask &= ~REDUCT_MASK_FREEZES; // exclude freezes for autoclean feature ;) - if (!mask || !app.IsAdmin () || (hwnd && app.ConfigGet (L"ReductConfirmation", true).AsBool () && _r_msg (hwnd, MB_YESNO | MB_ICONQUESTION, APP_NAME, nullptr, I18N (&app, IDS_QUESTION, 0)) != IDYES)) + if (hwnd && !_app_confirmmessage (hwnd, nullptr, I18N (&app, IDS_QUESTION, 0), L"IsShowReductConfirmation")) return 0; + SetCursor (LoadCursor (nullptr, IDC_WAIT)); + // difference (before) - _app_getstatus (&mem); + _app_memorystatus (&mem); const DWORD reduct_before = DWORD (mem.total_phys - mem.free_phys); - // Working set - if (app.IsVistaOrLater () && (mask & REDUCT_WORKING_SET) != 0) - { - command = MemoryEmptyWorkingSets; - NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); - } - // System working set if ((mask & REDUCT_SYSTEM_WORKING_SET) != 0) { @@ -166,48 +221,124 @@ DWORD _app_clean (HWND hwnd) NtSetSystemInformation (SystemFileCacheInformation, &sci, sizeof (sci)); } - // Standby priority-0 list - if (app.IsVistaOrLater () && (mask & REDUCT_STANDBY_PRIORITY0_LIST) != 0) + if (app.IsVistaOrLater ()) { - command = MemoryPurgeLowPriorityStandbyList; - NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); - } + // Working set (vista and above) + if ((mask & REDUCT_WORKING_SET) != 0) + { + command = MemoryEmptyWorkingSets; + NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); + } - // Standby list - if (app.IsVistaOrLater () && (mask & REDUCT_STANDBY_LIST) != 0) - { - command = MemoryPurgeStandbyList; - NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); - } + // Standby priority-0 list (vista and above) + if ((mask & REDUCT_STANDBY_PRIORITY0_LIST) != 0) + { + command = MemoryPurgeLowPriorityStandbyList; + NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); + } - // Modified list - if (app.IsVistaOrLater () && (mask & REDUCT_MODIFIED_LIST) != 0) - { - command = MemoryFlushModifiedList; - NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); + // Standby list (vista and above) + if ((mask & REDUCT_STANDBY_LIST) != 0) + { + command = MemoryPurgeStandbyList; + NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); + } + + // Modified page list (vista and above) + if ((mask & REDUCT_MODIFIED_LIST) != 0) + { + command = MemoryFlushModifiedList; + NtSetSystemInformation (SystemMemoryListInformation, &command, sizeof (command)); + } + + // Combine memory lists (win 10 and above) + if (_r_sys_validversion (10, 0)) + { + if ((mask & REDUCT_COMBINE_MEMORY_LISTS) != 0) + { + MEMORY_COMBINE_INFORMATION_EX combineInfo = {0}; + + NtSetSystemInformation (SystemCombinePhysicalMemoryInformation, &combineInfo, sizeof (combineInfo)); + } + } } + SetCursor (LoadCursor (nullptr, IDC_ARROW)); + // difference (after) - _app_getstatus (&mem); + _app_memorystatus (&mem); const DWORD reduct_result = max (0, reduct_before - DWORD (mem.total_phys - mem.free_phys)); app.ConfigSet (L"StatisticLastReduct", _r_unixtime_now ()); // time of last cleaning if (app.ConfigGet (L"BalloonCleanResults", true).AsBool ()) - app.TrayPopup (NIIF_INFO, APP_NAME, _r_fmt (I18N (&app, IDS_STATUS_CLEANED, 0), _r_fmt_size64 ((DWORDLONG)reduct_result))); + app.TrayPopup (UID, NIIF_USER, APP_NAME, _r_fmt (I18N (&app, IDS_STATUS_CLEANED, 0), _r_fmt_size64 ((DWORDLONG)reduct_result).GetString ())); return reduct_result; } -HICON _app_drawicon () +void _app_fontinit (LOGFONT* plf, UINT scale) +{ + if (!plf) + return; + + rstring buffer = app.ConfigGet (L"TrayFont", FONT_DEFAULT); + + if (buffer) + { + rstring::rvector vc = buffer.AsVector (L";"); + + for (size_t i = 0; i < vc.size (); i++) + { + vc.at (i).Trim (L" \r\n"); + + if (vc.at (i).IsEmpty ()) + continue; + + if (i == 0) + { + StringCchCopy (plf->lfFaceName, LF_FACESIZE, vc.at (i)); + } + else if (i == 1) + { + plf->lfHeight = _r_dc_fontsizetoheight (vc.at (i).AsInt ()); + } + else if (i == 2) + { + plf->lfWeight = vc.at (i).AsInt (); + } + else + { + break; + } + } + } + + if (!plf->lfFaceName[0]) + StringCchCopy (plf->lfFaceName, LF_FACESIZE, L"Tahoma"); + + if (!plf->lfHeight) + plf->lfHeight = _r_dc_fontsizetoheight (8); + + if (!plf->lfWeight) + plf->lfWeight = FW_NORMAL; + + plf->lfQuality = app.ConfigGet (L"TrayUseTransparency", false).AsBool () || app.ConfigGet (L"TrayUseAntialiasing", false).AsBool () ? NONANTIALIASED_QUALITY : CLEARTYPE_QUALITY; + plf->lfCharSet = DEFAULT_CHARSET; + + if (scale) + plf->lfHeight *= scale; +} + +HICON _app_iconcreate () { COLORREF color = app.ConfigGet (L"TrayColorText", TRAY_COLOR_TEXT).AsUlong (); HBRUSH bg_brush = config.bg_brush; bool is_transparent = app.ConfigGet (L"TrayUseTransparency", false).AsBool (); const bool is_round = app.ConfigGet (L"TrayRoundCorners", false).AsBool (); - const bool has_danger = config.ms.percent_phys >= app.ConfigGet (L"TrayLevelDanger", 90).AsUlong (); - const bool has_warning = has_danger || config.ms.percent_phys >= app.ConfigGet (L"TrayLevelWarning", 60).AsUlong (); + const bool has_danger = meminfo.percent_phys >= app.ConfigGet (L"TrayLevelDanger", 90).AsUlong (); + const bool has_warning = has_danger || meminfo.percent_phys >= app.ConfigGet (L"TrayLevelWarning", 60).AsUlong (); if (has_danger || has_warning) { @@ -233,9 +364,7 @@ HICON _app_drawicon () const HBITMAP old_bitmap = (HBITMAP)SelectObject (config.cdc1, config.bitmap); // draw transparent mask - COLORREF clr_prev = SetBkColor (config.cdc1, TRAY_COLOR_MASK); - ExtTextOut (config.cdc1, 0, 0, ETO_OPAQUE, &config.rc, nullptr, 0, nullptr); - SetBkColor (config.cdc1, clr_prev); + _r_dc_fillrect (config.cdc1, &icon_rc, TRAY_COLOR_MASK); // draw background if (!is_transparent) @@ -243,7 +372,7 @@ HICON _app_drawicon () HGDIOBJ prev_pen = SelectObject (config.cdc1, GetStockObject (NULL_PEN)); HGDIOBJ prev_brush = SelectObject (config.cdc1, bg_brush); - RoundRect (config.cdc1, 0, 0, config.rc.right, config.rc.bottom, is_round ? ((config.rc.right - 2)) : 0, is_round ? ((config.rc.right) / 2) : 0); + RoundRect (config.cdc1, 0, 0, icon_rc.right, icon_rc.bottom, is_round ? ((icon_rc.right - 2)) : 0, is_round ? ((icon_rc.right) / 2) : 0); SelectObject (config.cdc1, prev_pen); SelectObject (config.cdc1, prev_brush); @@ -256,24 +385,22 @@ HICON _app_drawicon () { POINT pt = {0}; - pt.x = ((config.rc.left + config.rc.right) / 2) - 1; - pt.y = ((config.rc.top + config.rc.bottom) / 2) - 1; + pt.x = ((icon_rc.left + icon_rc.right) / 2) - 1; + pt.y = ((icon_rc.top + icon_rc.bottom) / 2) - 1; INT half = pt.x + 1; for (LONG i = 1; i < config.scale + 1; i++) - { BresenhamCircle (config.cdc1, half - (i), &pt, color); - } } else { for (LONG i = 0; i < config.scale; i++) { - BresenhamLine (config.cdc1, i, 0, i, config.rc.bottom, color); // left - BresenhamLine (config.cdc1, i, i, config.rc.right, i, color); // top - BresenhamLine (config.cdc1, (config.rc.right - 1) - i, 0, (config.rc.right - 1) - i, config.rc.bottom, color); // right - BresenhamLine (config.cdc1, 0, (config.rc.bottom - 1) - i, config.rc.right, (config.rc.bottom - 1) - i, color); // bottom + BresenhamLine (config.cdc1, i, 0, i, icon_rc.bottom, color); // left + BresenhamLine (config.cdc1, i, i, icon_rc.right, i, color); // top + BresenhamLine (config.cdc1, (icon_rc.right - 1) - i, 0, (icon_rc.right - 1) - i, icon_rc.bottom, color); // right + BresenhamLine (config.cdc1, 0, (icon_rc.bottom - 1) - i, icon_rc.right, (icon_rc.bottom - 1) - i, color); // bottom } } } @@ -282,17 +409,17 @@ HICON _app_drawicon () SetTextColor (config.cdc1, color); SetBkMode (config.cdc1, TRANSPARENT); - rstring buffer; - buffer.Format (L"%d", config.ms.percent_phys); + WCHAR buffer[8] = {0}; + StringCchPrintf (buffer, _countof (buffer), L"%d", meminfo.percent_phys); SelectObject (config.cdc1, config.font); - DrawTextEx (config.cdc1, buffer.GetBuffer (), static_cast(buffer.GetLength ()), &config.rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_NOCLIP, nullptr); + DrawTextEx (config.cdc1, buffer, static_cast(wcslen (buffer)), &icon_rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_NOCLIP, nullptr); // draw transparent mask HGDIOBJ old_mask = SelectObject (config.cdc2, config.bitmap_mask); SetBkColor (config.cdc1, TRAY_COLOR_MASK); - BitBlt (config.cdc2, 0, 0, config.rc.right, config.rc.bottom, config.cdc1, 0, 0, SRCCOPY); + BitBlt (config.cdc2, 0, 0, icon_rc.right, icon_rc.bottom, config.cdc1, 0, 0, SRCCOPY); SelectObject (config.cdc2, old_mask); SelectObject (config.cdc1, old_bitmap); @@ -307,115 +434,197 @@ HICON _app_drawicon () return CreateIconIndirect (&ii); } -VOID CALLBACK _app_timercallback (HWND hwnd, UINT, UINT_PTR, DWORD) +void CALLBACK _app_timercallback (HWND hwnd, UINT, UINT_PTR, DWORD) { - _app_getstatus (&config.ms); + _app_memorystatus (&meminfo); - // autoreduct + // autoreduct functional if (app.IsAdmin ()) { - if ((app.ConfigGet (L"AutoreductEnable", true).AsBool () && config.ms.percent_phys >= app.ConfigGet (L"AutoreductValue", 90).AsUlong ()) || + if ((app.ConfigGet (L"AutoreductEnable", true).AsBool () && meminfo.percent_phys >= app.ConfigGet (L"AutoreductValue", 90).AsUlong ()) || (app.ConfigGet (L"AutoreductIntervalEnable", false).AsBool () && (_r_unixtime_now () - app.ConfigGet (L"StatisticLastReduct", 0).AsLonglong ()) >= (app.ConfigGet (L"AutoreductIntervalValue", 30).AsInt () * 60))) { - _app_clean (nullptr); + _app_memoryclean (nullptr, true); } } - if (config.ms_prev != config.ms.percent_phys) + // refresh tray information { - app.TraySetInfo (_app_drawicon (), _r_fmt (I18N (&app, IDS_TOOLTIP, 0), config.ms.percent_phys, config.ms.percent_page, config.ms.percent_ws)); + HICON hicon = nullptr; + + // check previous percent to prevent icon redraw + if (!config.ms_prev || config.ms_prev != meminfo.percent_phys) + { + hicon = _app_iconcreate (); + config.ms_prev = meminfo.percent_phys; // store last percentage value (required!) + } - config.ms_prev = config.ms.percent_phys; // store last percentage value (required!) + app.TraySetInfo (UID, hicon, _r_fmt (L"%s: %d%%\r\n%s: %d%%\r\n%s: %d%%", I18N (&app, IDS_GROUP_1, 0), meminfo.percent_phys, I18N (&app, IDS_GROUP_2, 0), meminfo.percent_page, I18N (&app, IDS_GROUP_3, 0), meminfo.percent_ws)); } + // refresh listview information if (IsWindowVisible (hwnd)) { - // Physical memory - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt (L"%d%%", config.ms.percent_phys), 0, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_phys); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.free_phys), 1, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_phys); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.total_phys), 2, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_phys); - - // Page file - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt (L"%d%%", config.ms.percent_page), 3, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_page); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.free_page), 4, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_page); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.total_page), 5, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_page); - - // System working set - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt (L"%d%%", config.ms.percent_ws), 6, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_ws); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.free_ws), 7, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_ws); - _r_listview_additem (hwnd, IDC_LISTVIEW, _r_fmt_size64 (config.ms.total_ws), 8, 1, LAST_VALUE, LAST_VALUE, config.ms.percent_ws); - - SendDlgItemMessage (hwnd, IDC_LISTVIEW, LVM_REDRAWITEMS, 0, _r_listview_getitemcount (hwnd, IDC_LISTVIEW)); // redraw (required!) + _r_listview_setitem (hwnd, IDC_LISTVIEW, 0, 1, _r_fmt (L"%d%%", meminfo.percent_phys)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 1, 1, _r_fmt_size64 (meminfo.free_phys)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 2, 1, _r_fmt_size64 (meminfo.total_phys)); + + _r_listview_setitem (hwnd, IDC_LISTVIEW, 3, 1, _r_fmt (L"%d%%", meminfo.percent_page)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 4, 1, _r_fmt_size64 (meminfo.free_page)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 5, 1, _r_fmt_size64 (meminfo.total_page)); + + _r_listview_setitem (hwnd, IDC_LISTVIEW, 6, 1, _r_fmt (L"%d%%", meminfo.percent_ws)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 7, 1, _r_fmt_size64 (meminfo.free_ws)); + _r_listview_setitem (hwnd, IDC_LISTVIEW, 8, 1, _r_fmt_size64 (meminfo.total_ws)); + + // set item lparam information + for (size_t i = 0; i < _r_listview_getitemcount (hwnd, IDC_LISTVIEW); i++) + { + DWORD percent = 0; + + if (i < 3) + percent = meminfo.percent_phys; + else if (i < 6) + percent = meminfo.percent_page; + else if (i < 9) + percent = meminfo.percent_ws; + + _r_listview_setitem (hwnd, IDC_LISTVIEW, i, 0, nullptr, LAST_VALUE, LAST_VALUE, percent); + } + + _r_listview_redraw (hwnd, IDC_LISTVIEW); } } -BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) +void _app_iconredraw (HWND hwnd) { - switch (msg) + config.ms_prev = 0; + + if (hwnd) + _app_timercallback (hwnd, 0, 0, 0); +} + +void _app_iconinit (HWND hwnd) +{ + if (config.font) { - case _RM_INITIALIZE: - { - // clear params - config.ms_prev = 0; + DeleteObject (config.font); + config.font = nullptr; + } + + if (config.bg_brush) + { + DeleteObject (config.bg_brush); + config.bg_brush = nullptr; + } + + if (config.bg_brush_warning) + { + DeleteObject (config.bg_brush_warning); + config.bg_brush_warning = nullptr; + } - config.scale = app.ConfigGet (L"TrayUseAntialiasing", false).AsBool () ? 16 : 1; + if (config.bg_brush_danger) + { + DeleteObject (config.bg_brush_danger); + config.bg_brush_danger = nullptr; + } - // init resolution - config.rc.right = GetSystemMetrics (SM_CXSMICON) * config.scale; - config.rc.bottom = GetSystemMetrics (SM_CYSMICON) * config.scale; + if (config.bitmap) + { + DeleteObject (config.bitmap); + config.bitmap = nullptr; + } - // init device context - config.dc = GetDC (nullptr); + if (config.bitmap_mask) + { + DeleteObject (config.bitmap_mask); + config.bitmap_mask = nullptr; + } - config.cdc1 = CreateCompatibleDC (config.dc); - config.cdc2 = CreateCompatibleDC (config.dc); + if (config.cdc1) + { + DeleteDC (config.cdc1); + config.cdc1 = nullptr; + } - ReleaseDC (nullptr, config.dc); + if (config.cdc2) + { + DeleteDC (config.cdc2); + config.cdc2 = nullptr; + } - // init bitmap - BITMAPINFO bmi = {0}; + // common init + config.scale = app.ConfigGet (L"TrayUseAntialiasing", false).AsBool () ? 16 : 1; - bmi.bmiHeader.biSize = sizeof (bmi.bmiHeader); - bmi.bmiHeader.biWidth = config.rc.right; - bmi.bmiHeader.biHeight = config.rc.bottom; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; + // init font + LOGFONT lf = {0}; + _app_fontinit (&lf, config.scale); - config.bitmap = CreateDIBSection (config.dc, &bmi, DIB_RGB_COLORS, 0, nullptr, 0); - config.bitmap_mask = CreateBitmap (config.rc.right, config.rc.bottom, 1, 1, nullptr); + config.font = CreateFontIndirect (&lf); - // init brush - config.bg_brush = CreateSolidBrush (app.ConfigGet (L"TrayColorBg", TRAY_COLOR_BG).AsUlong ()); - config.bg_brush_warning = CreateSolidBrush (app.ConfigGet (L"TrayColorWarning", TRAY_COLOR_WARNING).AsUlong ()); - config.bg_brush_danger = CreateSolidBrush (app.ConfigGet (L"TrayColorDanger", TRAY_COLOR_DANGER).AsUlong ()); + // init rect + icon_rc.right = GetSystemMetrics (SM_CXSMICON) * config.scale; + icon_rc.bottom = GetSystemMetrics (SM_CYSMICON) * config.scale; - // init font - SecureZeroMemory (&config.lf, sizeof (config.lf)); + // init dc + HDC hdc = GetWindowDC (nullptr); - config.lf.lfQuality = (app.ConfigGet (L"TrayUseTransparency", false).AsBool () || app.ConfigGet (L"TrayUseAntialiasing", false).AsBool ()) ? NONANTIALIASED_QUALITY : CLEARTYPE_QUALITY; - config.lf.lfCharSet = DEFAULT_CHARSET; - config.lf.lfPitchAndFamily = FF_DONTCARE; - config.lf.lfWeight = app.ConfigGet (L"TrayFontWeight", FW_NORMAL).AsLong (); - config.lf.lfHeight = -MulDiv (app.ConfigGet (L"TrayFontSize", FONT_SIZE).AsInt (), GetDeviceCaps (config.cdc1, LOGPIXELSY), 72) * config.scale; + config.cdc1 = CreateCompatibleDC (hdc); + config.cdc2 = CreateCompatibleDC (hdc); - StringCchCopy (config.lf.lfFaceName, LF_FACESIZE, app.ConfigGet (L"TrayFontName", FONT_NAME)); + // init bitmap + BITMAPINFO bmi = {0}; - config.font = CreateFontIndirect (&config.lf); + bmi.bmiHeader.biSize = sizeof (bmi.bmiHeader); + bmi.bmiHeader.biWidth = icon_rc.right; + bmi.bmiHeader.biHeight = icon_rc.bottom; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; - // init hotkey - UINT hk = app.ConfigGet (L"HotkeyClean", MAKEWORD (VK_F1, HOTKEYF_CONTROL)).AsUint (); + config.bitmap = CreateDIBSection (hdc, &bmi, DIB_RGB_COLORS, 0, nullptr, 0); + config.bitmap_mask = CreateBitmap (icon_rc.right, icon_rc.bottom, 1, 1, nullptr); - if (app.IsAdmin () && hk && app.ConfigGet (L"HotkeyCleanEnable", true).AsBool ()) - { - RegisterHotKey (hwnd, UID, (HIBYTE (hk) & 2) | ((HIBYTE (hk) & 4) >> 2) | ((HIBYTE (hk) & 1) << 2), LOBYTE (hk)); - } + // init brush + config.bg_brush = CreateSolidBrush (app.ConfigGet (L"TrayColorBg", TRAY_COLOR_BG).AsUlong ()); + config.bg_brush_warning = CreateSolidBrush (app.ConfigGet (L"TrayColorWarning", TRAY_COLOR_WARNING).AsUlong ()); + config.bg_brush_danger = CreateSolidBrush (app.ConfigGet (L"TrayColorDanger", TRAY_COLOR_DANGER).AsUlong ()); - // init tray icon - app.TrayCreate (hwnd, UID, WM_TRAYICON, _app_drawicon (), false); + ReleaseDC (nullptr, hdc); - // init timer - _app_timercallback (hwnd, 0, 0, 0); + _app_iconredraw (hwnd); +} + +void _app_hotkeyinit (HWND hwnd) +{ + if (!app.IsAdmin ()) + return; + + UnregisterHotKey (hwnd, UID); + + if (app.ConfigGet (L"HotkeyCleanEnable", true).AsBool ()) + { + const UINT hk = app.ConfigGet (L"HotkeyClean", MAKEWORD (VK_F1, HOTKEYF_CONTROL)).AsUint (); + + if (hk) + RegisterHotKey (hwnd, UID, (HIBYTE (hk) & 2) | ((HIBYTE (hk) & 4) >> 2) | ((HIBYTE (hk) & 1) << 2), LOBYTE (hk)); + } +} + +BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) +{ + switch (msg) + { + case _RM_INITIALIZE: + { + _app_hotkeyinit (hwnd); + + _app_iconinit (nullptr); + + app.TrayCreate (hwnd, UID, WM_TRAYICON, _app_iconcreate (), false); + + _app_iconredraw (hwnd); SetTimer (hwnd, UID, TIMER, &_app_timercallback); break; @@ -423,32 +632,30 @@ BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) case _RM_LOCALIZE: { - _r_listview_deleteallitems (hwnd, IDC_LISTVIEW); - _r_listview_deleteallgroups (hwnd, IDC_LISTVIEW); + // localize menu + HMENU menu = GetMenu (hwnd); + + app.LocaleMenu (menu, I18N (&app, IDS_FILE, 0), 0, true, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0), IDM_SETTINGS, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_EXIT, 0), IDM_EXIT, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_HELP, 0), 1, true, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_WEBSITE, 0), IDM_WEBSITE, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_DONATE, 0), IDM_DONATE, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_CHECKUPDATES, 0), IDM_CHECKUPDATES, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ABOUT, 0), IDM_ABOUT, false, nullptr); // configure listview - for (INT i = 0; i < 3; i++) + for (INT i = 0, k = 0; i < 3; i++) { - _r_listview_addgroup (hwnd, IDC_LISTVIEW, I18N (&app, IDS_GROUP_1 + i, _r_fmt (L"IDS_GROUP_%d", i + 1)), i); + _r_listview_setgroup (hwnd, IDC_LISTVIEW, i, I18N (&app, IDS_GROUP_1 + i, _r_fmt (L"IDS_GROUP_%d", i + 1))); for (INT j = 0; j < 3; j++) - _r_listview_additem (hwnd, IDC_LISTVIEW, I18N (&app, IDS_ITEM_1 + j, _r_fmt (L"IDS_ITEM_%d", j + 1)), LAST_VALUE, 0, LAST_VALUE, i); + _r_listview_setitem (hwnd, IDC_LISTVIEW, k++, 0, I18N (&app, IDS_ITEM_1 + j, _r_fmt (L"IDS_ITEM_%d", j + 1))); } - // configure menu - HMENU menu = GetMenu (hwnd); - - app.LocaleMenu (menu, I18N (&app, IDS_FILE, 0), 0, true); - app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0), IDM_SETTINGS, false); - app.LocaleMenu (menu, I18N (&app, IDS_EXIT, 0), IDM_EXIT, false); - app.LocaleMenu (menu, I18N (&app, IDS_HELP, 0), 1, true); - app.LocaleMenu (menu, I18N (&app, IDS_WEBSITE, 0), IDM_WEBSITE, false); - app.LocaleMenu (menu, I18N (&app, IDS_DONATE, 0), IDM_DONATE, false); - app.LocaleMenu (menu, I18N (&app, IDS_CHECKUPDATES, 0), IDM_CHECKUPDATES, false); - app.LocaleMenu (menu, I18N (&app, IDS_ABOUT, 0), IDM_ABOUT, false); - // configure button SetDlgItemText (hwnd, IDC_CLEAN, I18N (&app, IDS_CLEAN, 0)); + _r_wnd_addstyle (hwnd, IDC_CLEAN, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); break; @@ -457,23 +664,8 @@ BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) case _RM_UNINITIALIZE: { app.TrayDestroy (UID); - - UnregisterHotKey (hwnd, UID); KillTimer (hwnd, UID); - DeleteObject (config.font); - - DeleteObject (config.bg_brush); - DeleteObject (config.bg_brush_warning); - DeleteObject (config.bg_brush_danger); - - DeleteObject (config.bitmap); - DeleteObject (config.bitmap_mask); - - DeleteDC (config.cdc1); - DeleteDC (config.cdc2); - DeleteDC (config.dc); - break; } } @@ -491,23 +683,12 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) { switch (page->dlg_id) { - case IDD_SETTINGS_1: + case IDD_SETTINGS_GENERAL: { - // localize - SetDlgItemText (hwnd, IDC_TITLE_1, I18N (&app, IDS_TITLE_1, 0)); - SetDlgItemText (hwnd, IDC_TITLE_2, I18N (&app, IDS_TITLE_2, 0)); - - SetDlgItemText (hwnd, IDC_ALWAYSONTOP_CHK, I18N (&app, IDS_ALWAYSONTOP_CHK, 0)); - SetDlgItemText (hwnd, IDC_LOADONSTARTUP_CHK, I18N (&app, IDS_LOADONSTARTUP_CHK, 0)); - SetDlgItemText (hwnd, IDC_REDUCTCONFIRMATION_CHK, I18N (&app, IDS_REDUCTCONFIRMATION_CHK, 0)); - SetDlgItemText (hwnd, IDC_SKIPUACWARNING_CHK, I18N (&app, IDS_SKIPUACWARNING_CHK, 0)); - SetDlgItemText (hwnd, IDC_CHECKUPDATES_CHK, I18N (&app, IDS_CHECKUPDATES_CHK, 0)); - - SetDlgItemText (hwnd, IDC_LANGUAGE_HINT, I18N (&app, IDS_LANGUAGE_HINT, 0)); - - // set checks +#ifdef _APP_HAVE_SKIPUAC if (!app.IsVistaOrLater () || !app.IsAdmin ()) _r_ctrl_enable (hwnd, IDC_SKIPUACWARNING_CHK, false); +#endif // _APP_HAVE_SKIPUAC CheckDlgButton (hwnd, IDC_ALWAYSONTOP_CHK, app.ConfigGet (L"AlwaysOnTop", false).AsBool () ? BST_CHECKED : BST_UNCHECKED); @@ -515,7 +696,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) CheckDlgButton (hwnd, IDC_LOADONSTARTUP_CHK, app.AutorunIsEnabled () ? BST_CHECKED : BST_UNCHECKED); #endif // _APP_HAVE_AUTORUN - CheckDlgButton (hwnd, IDC_REDUCTCONFIRMATION_CHK, app.ConfigGet (L"ReductConfirmation", true).AsBool () ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton (hwnd, IDC_REDUCTCONFIRMATION_CHK, app.ConfigGet (L"IsShowReductConfirmation", true).AsBool () ? BST_CHECKED : BST_UNCHECKED); #ifdef _APP_HAVE_SKIPUAC CheckDlgButton (hwnd, IDC_SKIPUACWARNING_CHK, app.SkipUacIsEnabled () ? BST_CHECKED : BST_UNCHECKED); @@ -525,30 +706,11 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) app.LocaleEnum (hwnd, IDC_LANGUAGE, false, 0); - SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)SendDlgItemMessage (hwnd, IDC_LANGUAGE, CB_GETCURSEL, 0, 0)); // check on save - break; } - case IDD_SETTINGS_2: + case IDD_SETTINGS_MEMORY: { - // localize - SetDlgItemText (hwnd, IDC_TITLE_3, I18N (&app, IDS_TITLE_3, 0)); - SetDlgItemText (hwnd, IDC_TITLE_4, I18N (&app, IDS_TITLE_4, 0)); - SetDlgItemText (hwnd, IDC_TITLE_5, I18N (&app, IDS_TITLE_5, 0)); - - SetDlgItemText (hwnd, IDC_WORKINGSET_CHK, I18N (&app, IDS_WORKINGSET_CHK, 0)); - SetDlgItemText (hwnd, IDC_SYSTEMWORKINGSET_CHK, I18N (&app, IDS_SYSTEMWORKINGSET_CHK, 0)); - SetDlgItemText (hwnd, IDC_STANDBYLISTPRIORITY0_CHK, I18N (&app, IDS_STANDBYLISTPRIORITY0_CHK, 0)); - SetDlgItemText (hwnd, IDC_STANDBYLIST_CHK, I18N (&app, IDS_STANDBYLIST_CHK, 0)); - SetDlgItemText (hwnd, IDC_MODIFIEDLIST_CHK, I18N (&app, IDS_MODIFIEDLIST_CHK, 0)); - - SetDlgItemText (hwnd, IDC_AUTOREDUCTENABLE_CHK, I18N (&app, IDS_AUTOREDUCTENABLE_CHK, 0)); - SetDlgItemText (hwnd, IDC_AUTOREDUCTINTERVALENABLE_CHK, I18N (&app, IDS_AUTOREDUCTINTERVALENABLE_CHK, 0)); - - SetDlgItemText (hwnd, IDC_HOTKEY_CLEAN_CHK, I18N (&app, IDS_HOTKEY_CLEAN_CHK, 0)); - - // set checks if (!app.IsVistaOrLater () || !app.IsAdmin ()) { _r_ctrl_enable (hwnd, IDC_WORKINGSET_CHK, false); @@ -565,13 +727,18 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) } } - DWORD mask = app.ConfigGet (L"ReductMask", MASK_DEFAULT).AsUlong (); + // Combine memory lists (win 10 and above) + if (!app.IsAdmin () || !_r_sys_validversion (10, 0)) + _r_ctrl_enable (hwnd, IDC_COMBINEMEMORYLISTS_CHK, false); + + const DWORD mask = app.ConfigGet (L"ReductMask2", REDUCT_MASK_DEFAULT).AsUlong (); CheckDlgButton (hwnd, IDC_WORKINGSET_CHK, ((mask & REDUCT_WORKING_SET) != 0) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_SYSTEMWORKINGSET_CHK, ((mask & REDUCT_SYSTEM_WORKING_SET) != 0) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_STANDBYLISTPRIORITY0_CHK, ((mask & REDUCT_STANDBY_PRIORITY0_LIST) != 0) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_STANDBYLIST_CHK, ((mask & REDUCT_STANDBY_LIST) != 0) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_MODIFIEDLIST_CHK, ((mask & REDUCT_MODIFIED_LIST) != 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton (hwnd, IDC_COMBINEMEMORYLISTS_CHK, ((mask & REDUCT_COMBINE_MEMORY_LISTS) != 0) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_AUTOREDUCTENABLE_CHK, app.ConfigGet (L"AutoreductEnable", true).AsBool () ? BST_CHECKED : BST_UNCHECKED); @@ -587,88 +754,44 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) SendDlgItemMessage (hwnd, IDC_HOTKEY_CLEAN, HKM_SETHOTKEY, app.ConfigGet (L"HotkeyClean", MAKEWORD (VK_F1, HOTKEYF_CONTROL)).AsUint (), 0); - SendMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_AUTOREDUCTENABLE_CHK, 0), 0); - SendMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_AUTOREDUCTINTERVALENABLE_CHK, 0), 0); - SendMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_HOTKEY_CLEAN_CHK, 0), 0); + PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_AUTOREDUCTENABLE_CHK, 0), 0); + PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_AUTOREDUCTINTERVALENABLE_CHK, 0), 0); + PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_HOTKEY_CLEAN_CHK, 0), 0); break; } - case IDD_SETTINGS_3: + case IDD_SETTINGS_APPEARANCE: { - // localize - SetDlgItemText (hwnd, IDC_TITLE_1, I18N (&app, IDS_TITLE_1, 0)); - SetDlgItemText (hwnd, IDC_TITLE_6, I18N (&app, IDS_TITLE_6, 0)); - - SetDlgItemText (hwnd, IDC_TRAYUSETRANSPARENCY_CHK, I18N (&app, IDS_TRAYUSETRANSPARENCY_CHK, 0)); - SetDlgItemText (hwnd, IDC_TRAYSHOWBORDER_CHK, I18N (&app, IDS_TRAYSHOWBORDER_CHK, 0)); - SetDlgItemText (hwnd, IDC_TRAYROUNDCORNERS_CHK, I18N (&app, IDS_TRAYROUNDCORNERS_CHK, 0)); - SetDlgItemText (hwnd, IDC_TRAYCHANGEBG_CHK, I18N (&app, IDS_TRAYCHANGEBG_CHK, 0)); - SetDlgItemText (hwnd, IDC_TRAYUSEANTIALIASING_CHK, I18N (&app, IDS_TRAYUSEANTIALIASING_CHK, 0)); - - SetDlgItemText (hwnd, IDC_FONT_HINT, I18N (&app, IDS_FONT_HINT, 0)); - SetDlgItemText (hwnd, IDC_COLOR_TEXT_HINT, I18N (&app, IDS_COLOR_TEXT_HINT, 0)); - SetDlgItemText (hwnd, IDC_COLOR_BACKGROUND_HINT, I18N (&app, IDS_COLOR_BACKGROUND_HINT, 0)); - SetDlgItemText (hwnd, IDC_COLOR_WARNING_HINT, I18N (&app, IDS_COLOR_WARNING_HINT, 0)); - SetDlgItemText (hwnd, IDC_COLOR_DANGER_HINT, I18N (&app, IDS_COLOR_DANGER_HINT, 0)); - - // set checks CheckDlgButton (hwnd, IDC_TRAYUSETRANSPARENCY_CHK, app.ConfigGet (L"TrayUseTransparency", false).AsBool () ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_TRAYSHOWBORDER_CHK, app.ConfigGet (L"TrayShowBorder", false).AsBool () ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_TRAYROUNDCORNERS_CHK, app.ConfigGet (L"TrayRoundCorners", false).AsBool () ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_TRAYCHANGEBG_CHK, app.ConfigGet (L"TrayChangeBg", true).AsBool () ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton (hwnd, IDC_TRAYUSEANTIALIASING_CHK, app.ConfigGet (L"TrayUseAntialiasing", false).AsBool () ? BST_CHECKED : BST_UNCHECKED); - _r_ctrl_settext (hwnd, IDC_FONT, L"%s, %dpx", app.ConfigGet (L"TrayFontName", FONT_NAME), app.ConfigGet (L"TrayFontSize", FONT_SIZE).AsInt ()); + { + LOGFONT lf = {0}; + _app_fontinit (&lf, 0); + + _r_ctrl_settext (hwnd, IDC_FONT, L"%s, %dpx", lf.lfFaceName, _r_dc_fontheighttosize (lf.lfHeight)); + } SetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_TEXT), GWLP_USERDATA, app.ConfigGet (L"TrayColorText", TRAY_COLOR_TEXT).AsUlong ()); SetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_BACKGROUND), GWLP_USERDATA, app.ConfigGet (L"TrayColorBg", TRAY_COLOR_BG).AsUlong ()); SetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_WARNING), GWLP_USERDATA, app.ConfigGet (L"TrayColorWarning", TRAY_COLOR_WARNING).AsUlong ()); SetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_DANGER), GWLP_USERDATA, app.ConfigGet (L"TrayColorDanger", TRAY_COLOR_DANGER).AsUlong ()); - _r_wnd_addstyle (hwnd, IDC_FONT, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - - _r_wnd_addstyle (hwnd, IDC_COLOR_TEXT, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - _r_wnd_addstyle (hwnd, IDC_COLOR_BACKGROUND, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - _r_wnd_addstyle (hwnd, IDC_COLOR_WARNING, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - _r_wnd_addstyle (hwnd, IDC_COLOR_DANGER, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - break; } - case IDD_SETTINGS_4: + case IDD_SETTINGS_TRAY: { - // localize - SetDlgItemText (hwnd, IDC_TITLE_7, I18N (&app, IDS_TITLE_7, 0)); - SetDlgItemText (hwnd, IDC_TITLE_8, I18N (&app, IDS_TITLE_8, 0)); - SetDlgItemText (hwnd, IDC_TITLE_9, I18N (&app, IDS_TITLE_9, 0)); - - SetDlgItemText (hwnd, IDC_TRAYLEVELWARNING_HINT, I18N (&app, IDS_TRAYLEVELWARNING_HINT, 0)); - SetDlgItemText (hwnd, IDC_TRAYLEVELDANGER_HINT, I18N (&app, IDS_TRAYLEVELDANGER_HINT, 0)); - - SetDlgItemText (hwnd, IDC_TRAYACTIONDC_HINT, I18N (&app, IDS_TRAYACTIONDC_HINT, 0)); - SetDlgItemText (hwnd, IDC_TRAYACTIONMC_HINT, I18N (&app, IDS_TRAYACTIONMC_HINT, 0)); - - SetDlgItemText (hwnd, IDC_SHOW_CLEAN_RESULT_CHK, I18N (&app, IDS_SHOW_CLEAN_RESULT_CHK, 0)); - - // set checks SendDlgItemMessage (hwnd, IDC_TRAYLEVELWARNING, UDM_SETRANGE32, 10, 99); SendDlgItemMessage (hwnd, IDC_TRAYLEVELWARNING, UDM_SETPOS32, 0, app.ConfigGet (L"TrayLevelWarning", 60).AsUint ()); SendDlgItemMessage (hwnd, IDC_TRAYLEVELDANGER, UDM_SETRANGE32, 10, 99); SendDlgItemMessage (hwnd, IDC_TRAYLEVELDANGER, UDM_SETPOS32, 0, app.ConfigGet (L"TrayLevelDanger", 90).AsUint ()); - SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_RESETCONTENT, 0, 0); - SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_RESETCONTENT, 0, 0); - - for (INT i = 0; i < 3; i++) - { - rstring item = I18N (&app, IDS_TRAY_ACTION_1 + i, _r_fmt (L"IDS_TRAY_ACTION_%d", i + 1)); - - SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_INSERTSTRING, i, (LPARAM)item.GetString ()); - SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_INSERTSTRING, i, (LPARAM)item.GetString ()); - } - SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_SETCURSEL, app.ConfigGet (L"TrayActionDc", 0).AsUint (), 0); SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_SETCURSEL, app.ConfigGet (L"TrayActionMc", 1).AsUint (), 0); @@ -681,94 +804,98 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) break; } - case _RM_SAVE: + case _RM_LOCALIZE: { + // localize titles + SetDlgItemText (hwnd, IDC_TITLE_1, I18N (&app, IDS_TITLE_1, 0)); + SetDlgItemText (hwnd, IDC_TITLE_2, I18N (&app, IDS_TITLE_2, 0)); + SetDlgItemText (hwnd, IDC_TITLE_3, I18N (&app, IDS_TITLE_3, 0)); + SetDlgItemText (hwnd, IDC_TITLE_4, I18N (&app, IDS_TITLE_4, 0)); + SetDlgItemText (hwnd, IDC_TITLE_5, I18N (&app, IDS_TITLE_5, 0)); + SetDlgItemText (hwnd, IDC_TITLE_6, I18N (&app, IDS_TITLE_6, 0)); + SetDlgItemText (hwnd, IDC_TITLE_7, I18N (&app, IDS_TITLE_7, 0)); + SetDlgItemText (hwnd, IDC_TITLE_8, I18N (&app, IDS_TITLE_8, 0)); + SetDlgItemText (hwnd, IDC_TITLE_9, I18N (&app, IDS_TITLE_9, 0)); + switch (page->dlg_id) { - case IDD_SETTINGS_1: + case IDD_SETTINGS_GENERAL: { - app.ConfigSet (L"AlwaysOnTop", (IsDlgButtonChecked (hwnd, IDC_ALWAYSONTOP_CHK) == BST_CHECKED) ? true : false); - -#ifdef _APP_HAVE_AUTORUN - app.AutorunEnable (IsDlgButtonChecked (hwnd, IDC_LOADONSTARTUP_CHK) == BST_CHECKED); -#endif // _APP_HAVE_AUTORUN - - app.ConfigSet (L"ReductConfirmation", (IsDlgButtonChecked (hwnd, IDC_REDUCTCONFIRMATION_CHK) == BST_CHECKED) ? true : false); - -#ifdef _APP_HAVE_SKIPUAC - if (!_r_sys_uacstate ()) - app.SkipUacEnable (IsDlgButtonChecked (hwnd, IDC_SKIPUACWARNING_CHK) == BST_CHECKED); -#endif // _APP_HAVE_SKIPUAC - - app.ConfigSet (L"CheckUpdates", (IsDlgButtonChecked (hwnd, IDC_CHECKUPDATES_CHK) == BST_CHECKED) ? true : false); - - // set language - app.ConfigSet (L"Language", _r_ctrl_gettext (hwnd, IDC_LANGUAGE)); + SetDlgItemText (hwnd, IDC_ALWAYSONTOP_CHK, I18N (&app, IDS_ALWAYSONTOP_CHK, 0)); + SetDlgItemText (hwnd, IDC_LOADONSTARTUP_CHK, I18N (&app, IDS_LOADONSTARTUP_CHK, 0)); + SetDlgItemText (hwnd, IDC_REDUCTCONFIRMATION_CHK, I18N (&app, IDS_REDUCTCONFIRMATION_CHK, 0)); + SetDlgItemText (hwnd, IDC_SKIPUACWARNING_CHK, I18N (&app, IDS_SKIPUACWARNING_CHK, 0)); + SetDlgItemText (hwnd, IDC_CHECKUPDATES_CHK, I18N (&app, IDS_CHECKUPDATES_CHK, 0)); - if (GetWindowLongPtr (hwnd, GWLP_USERDATA) != (INT)SendDlgItemMessage (hwnd, IDC_LANGUAGE, CB_GETCURSEL, 0, 0)) - return TRUE; // for restart + SetDlgItemText (hwnd, IDC_LANGUAGE_HINT, I18N (&app, IDS_LANGUAGE_HINT, 0)); break; } - case IDD_SETTINGS_2: + case IDD_SETTINGS_MEMORY: { - DWORD mask = 0; - - if (IsDlgButtonChecked (hwnd, IDC_WORKINGSET_CHK) == BST_CHECKED) - mask |= REDUCT_WORKING_SET; - - if (IsDlgButtonChecked (hwnd, IDC_SYSTEMWORKINGSET_CHK) == BST_CHECKED) - mask |= REDUCT_SYSTEM_WORKING_SET; + SetDlgItemText (hwnd, IDC_WORKINGSET_CHK, I18N (&app, IDS_WORKINGSET_CHK, 0)); + SetDlgItemText (hwnd, IDC_SYSTEMWORKINGSET_CHK, I18N (&app, IDS_SYSTEMWORKINGSET_CHK, 0)); + SetDlgItemText (hwnd, IDC_STANDBYLISTPRIORITY0_CHK, I18N (&app, IDS_STANDBYLISTPRIORITY0_CHK, 0)); + SetDlgItemText (hwnd, IDC_STANDBYLIST_CHK, _r_fmt (L"%s*", I18N (&app, IDS_STANDBYLIST_CHK, 0))); + SetDlgItemText (hwnd, IDC_MODIFIEDLIST_CHK, _r_fmt (L"%s*", I18N (&app, IDS_MODIFIEDLIST_CHK, 0))); + SetDlgItemText (hwnd, IDC_COMBINEMEMORYLISTS_CHK, I18N (&app, IDS_COMBINEMEMORYLISTS_CHK, 0)); - if (IsDlgButtonChecked (hwnd, IDC_STANDBYLISTPRIORITY0_CHK) == BST_CHECKED) - mask |= REDUCT_STANDBY_PRIORITY0_LIST; + SetDlgItemText (hwnd, IDC_AUTOREDUCTENABLE_CHK, I18N (&app, IDS_AUTOREDUCTENABLE_CHK, 0)); + SetDlgItemText (hwnd, IDC_AUTOREDUCTINTERVALENABLE_CHK, I18N (&app, IDS_AUTOREDUCTINTERVALENABLE_CHK, 0)); - if (IsDlgButtonChecked (hwnd, IDC_STANDBYLIST_CHK) == BST_CHECKED) - mask |= REDUCT_STANDBY_LIST; + SetDlgItemText (hwnd, IDC_HOTKEY_CLEAN_CHK, I18N (&app, IDS_HOTKEY_CLEAN_CHK, 0)); - if (IsDlgButtonChecked (hwnd, IDC_MODIFIEDLIST_CHK) == BST_CHECKED) - mask |= REDUCT_MODIFIED_LIST; + break; + } - app.ConfigSet (L"ReductMask", mask); + case IDD_SETTINGS_APPEARANCE: + { + SetDlgItemText (hwnd, IDC_TRAYUSETRANSPARENCY_CHK, I18N (&app, IDS_TRAYUSETRANSPARENCY_CHK, 0)); + SetDlgItemText (hwnd, IDC_TRAYSHOWBORDER_CHK, I18N (&app, IDS_TRAYSHOWBORDER_CHK, 0)); + SetDlgItemText (hwnd, IDC_TRAYROUNDCORNERS_CHK, I18N (&app, IDS_TRAYROUNDCORNERS_CHK, 0)); + SetDlgItemText (hwnd, IDC_TRAYCHANGEBG_CHK, I18N (&app, IDS_TRAYCHANGEBG_CHK, 0)); + SetDlgItemText (hwnd, IDC_TRAYUSEANTIALIASING_CHK, I18N (&app, IDS_TRAYUSEANTIALIASING_CHK, 0)); - app.ConfigSet (L"AutoreductEnable", (IsDlgButtonChecked (hwnd, IDC_AUTOREDUCTENABLE_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"AutoreductValue", (DWORD)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTVALUE, UDM_GETPOS32, 0, 0)); + SetDlgItemText (hwnd, IDC_FONT_HINT, I18N (&app, IDS_FONT_HINT, 0)); + SetDlgItemText (hwnd, IDC_COLOR_TEXT_HINT, I18N (&app, IDS_COLOR_TEXT_HINT, 0)); + SetDlgItemText (hwnd, IDC_COLOR_BACKGROUND_HINT, I18N (&app, IDS_COLOR_BACKGROUND_HINT, 0)); + SetDlgItemText (hwnd, IDC_COLOR_WARNING_HINT, I18N (&app, IDS_COLOR_WARNING_HINT, 0)); + SetDlgItemText (hwnd, IDC_COLOR_DANGER_HINT, I18N (&app, IDS_COLOR_DANGER_HINT, 0)); - app.ConfigSet (L"AutoreductIntervalEnable", (IsDlgButtonChecked (hwnd, IDC_AUTOREDUCTINTERVALENABLE_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"AutoreductIntervalValue", (DWORD)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTINTERVALVALUE, UDM_GETPOS32, 0, 0)); + _r_wnd_addstyle (hwnd, IDC_FONT, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); - app.ConfigSet (L"HotkeyCleanEnable", (IsDlgButtonChecked (hwnd, IDC_HOTKEY_CLEAN_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"HotkeyClean", (DWORD)SendDlgItemMessage (hwnd, IDC_HOTKEY_CLEAN, HKM_GETHOTKEY, 0, 0)); + _r_wnd_addstyle (hwnd, IDC_COLOR_TEXT, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); + _r_wnd_addstyle (hwnd, IDC_COLOR_BACKGROUND, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); + _r_wnd_addstyle (hwnd, IDC_COLOR_WARNING, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); + _r_wnd_addstyle (hwnd, IDC_COLOR_DANGER, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE); break; } - case IDD_SETTINGS_3: + case IDD_SETTINGS_TRAY: { - app.ConfigSet (L"TrayUseTransparency", (IsDlgButtonChecked (hwnd, IDC_TRAYUSETRANSPARENCY_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"TrayShowBorder", (IsDlgButtonChecked (hwnd, IDC_TRAYSHOWBORDER_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"TrayRoundCorners", (IsDlgButtonChecked (hwnd, IDC_TRAYROUNDCORNERS_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"TrayChangeBg", (IsDlgButtonChecked (hwnd, IDC_TRAYCHANGEBG_CHK) == BST_CHECKED) ? true : false); - app.ConfigSet (L"TrayUseAntialiasing", (IsDlgButtonChecked (hwnd, IDC_TRAYUSEANTIALIASING_CHK) == BST_CHECKED) ? true : false); + SetDlgItemText (hwnd, IDC_TRAYLEVELWARNING_HINT, I18N (&app, IDS_TRAYLEVELWARNING_HINT, 0)); + SetDlgItemText (hwnd, IDC_TRAYLEVELDANGER_HINT, I18N (&app, IDS_TRAYLEVELDANGER_HINT, 0)); - app.ConfigSet (L"TrayColorText", (DWORD)GetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_TEXT), GWLP_USERDATA)); - app.ConfigSet (L"TrayColorBg", (DWORD)GetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_BACKGROUND), GWLP_USERDATA)); - app.ConfigSet (L"TrayColorWarning", (DWORD)GetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_WARNING), GWLP_USERDATA)); - app.ConfigSet (L"TrayColorDanger", (DWORD)GetWindowLongPtr (GetDlgItem (hwnd, IDC_COLOR_DANGER), GWLP_USERDATA)); + SetDlgItemText (hwnd, IDC_TRAYACTIONDC_HINT, I18N (&app, IDS_TRAYACTIONDC_HINT, 0)); + SetDlgItemText (hwnd, IDC_TRAYACTIONMC_HINT, I18N (&app, IDS_TRAYACTIONMC_HINT, 0)); - break; - } + SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_RESETCONTENT, 0, 0); + SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_RESETCONTENT, 0, 0); - case IDD_SETTINGS_4: - { - app.ConfigSet (L"TrayActionDc", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_GETCURSEL, 0, 0)); - app.ConfigSet (L"TrayActionMc", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_GETCURSEL, 0, 0)); + for (INT i = 0; i < 3; i++) + { + rstring item = I18N (&app, IDS_TRAY_ACTION_1 + i, _r_fmt (L"IDS_TRAY_ACTION_%d", i + 1)); + + SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_INSERTSTRING, i, (LPARAM)item.GetString ()); + SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_INSERTSTRING, i, (LPARAM)item.GetString ()); + } - app.ConfigSet (L"TrayLevelWarning", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYLEVELWARNING, UDM_GETPOS32, 0, 0)); - app.ConfigSet (L"TrayLevelDanger", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYLEVELDANGER, UDM_GETPOS32, 0, 0)); + SendDlgItemMessage (hwnd, IDC_TRAYACTIONDC, CB_SETCURSEL, app.ConfigGet (L"TrayActionDc", 0).AsUint (), 0); + SendDlgItemMessage (hwnd, IDC_TRAYACTIONMC, CB_SETCURSEL, app.ConfigGet (L"TrayActionMc", 1).AsUint (), 0); - app.ConfigSet (L"BalloonCleanResults", (IsDlgButtonChecked (hwnd, IDC_SHOW_CLEAN_RESULT_CHK) == BST_CHECKED) ? true : false); + SetDlgItemText (hwnd, IDC_SHOW_CLEAN_RESULT_CHK, I18N (&app, IDS_SHOW_CLEAN_RESULT_CHK, 0)); break; } @@ -777,6 +904,12 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) break; } + case _RM_CLOSE: + { + //return TRUE; + break; + } + case _RM_MESSAGE: { LPMSG pmsg = (LPMSG)lpdata1; @@ -793,20 +926,20 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) { LPNMCUSTOMDRAW lpnmcd = (LPNMCUSTOMDRAW)pmsg->lParam; - if (nmlp->idFrom == IDC_COLOR_TEXT || - nmlp->idFrom == IDC_COLOR_BACKGROUND || - nmlp->idFrom == IDC_COLOR_WARNING || - nmlp->idFrom == IDC_COLOR_DANGER + const UINT ctrl_id = (UINT)nmlp->idFrom; + + if (ctrl_id == IDC_COLOR_TEXT || + ctrl_id == IDC_COLOR_BACKGROUND || + ctrl_id == IDC_COLOR_WARNING || + ctrl_id == IDC_COLOR_DANGER ) { - lpnmcd->rc.left += 3; - lpnmcd->rc.top += 3; - lpnmcd->rc.right -= 3; - lpnmcd->rc.bottom -= 3; + lpnmcd->rc.left += app.GetDPI (3); + lpnmcd->rc.top += app.GetDPI (3); + lpnmcd->rc.right -= app.GetDPI (3); + lpnmcd->rc.bottom -= app.GetDPI (3); - COLORREF clr_prev = SetBkColor (lpnmcd->hdc, static_cast(GetWindowLongPtr (nmlp->hwndFrom, GWLP_USERDATA))); - ExtTextOut (lpnmcd->hdc, 0, 0, ETO_OPAQUE, &lpnmcd->rc, nullptr, 0, nullptr); - SetBkColor (lpnmcd->hdc, clr_prev); + _r_dc_fillrect (lpnmcd->hdc, &lpnmcd->rc, (COLORREF)GetWindowLongPtr (nmlp->hwndFrom, GWLP_USERDATA)); SetWindowLongPtr (hwnd, DWLP_MSGRESULT, CDRF_DODEFAULT | CDRF_DOERASE); return CDRF_DODEFAULT | CDRF_DOERASE; @@ -819,29 +952,250 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) break; } + case WM_VSCROLL: + case WM_HSCROLL: + { + const UINT ctrl_id = GetDlgCtrlID ((HWND)pmsg->lParam); + bool is_stylechanged = false; + + if (ctrl_id == IDC_AUTOREDUCTVALUE) + { + app.ConfigSet (L"AutoreductValue", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_AUTOREDUCTINTERVALVALUE) + { + app.ConfigSet (L"AutoreductIntervalValue", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_TRAYLEVELWARNING) + { + is_stylechanged = true; + app.ConfigSet (L"TrayLevelWarning", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_TRAYLEVELDANGER) + { + is_stylechanged = true; + app.ConfigSet (L"TrayLevelDanger", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0)); + } + + if (is_stylechanged) + { + _app_iconredraw (nullptr); + _r_listview_redraw (app.GetHWND (), IDC_LISTVIEW); + } + + break; + } + case WM_COMMAND: { switch (LOWORD (pmsg->wParam)) { - case IDC_AUTOREDUCTENABLE_CHK: - case IDC_AUTOREDUCTINTERVALENABLE_CHK: + case IDC_AUTOREDUCTVALUE_CTRL: + case IDC_AUTOREDUCTINTERVALVALUE_CTRL: + case IDC_TRAYLEVELWARNING_CTRL: + case IDC_TRAYLEVELDANGER_CTRL: { - const UINT ctrl1 = LOWORD (pmsg->wParam); - const UINT ctrl2 = LOWORD (pmsg->wParam) + 1; + const UINT ctrl_id = LOWORD (pmsg->wParam); + const UINT notify_code = HIWORD (pmsg->wParam); + bool is_stylechanged = false; - const bool is_enabled = IsWindowEnabled (GetDlgItem (hwnd, ctrl1)) && (IsDlgButtonChecked (hwnd, ctrl1) == BST_CHECKED); + if (ctrl_id == IDC_AUTOREDUCTVALUE_CTRL && notify_code == EN_CHANGE) + { + app.ConfigSet (L"AutoreductValue", (DWORD)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTVALUE, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_AUTOREDUCTINTERVALVALUE_CTRL && notify_code == EN_CHANGE) + { + app.ConfigSet (L"AutoreductIntervalValue", (DWORD)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTINTERVALVALUE, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_TRAYLEVELWARNING_CTRL && notify_code == EN_CHANGE) + { + is_stylechanged = true; + app.ConfigSet (L"TrayLevelWarning", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYLEVELWARNING, UDM_GETPOS32, 0, 0)); + } + else if (ctrl_id == IDC_TRAYLEVELDANGER_CTRL && notify_code == EN_CHANGE) + { + is_stylechanged = true; + app.ConfigSet (L"TrayLevelDanger", (DWORD)SendDlgItemMessage (hwnd, IDC_TRAYLEVELDANGER, UDM_GETPOS32, 0, 0)); + } - _r_ctrl_enable (hwnd, ctrl2, is_enabled); - EnableWindow ((HWND)SendDlgItemMessage (hwnd, ctrl2, UDM_GETBUDDY, 0, 0), is_enabled); + if (is_stylechanged) + { + _app_iconredraw (nullptr); + _r_listview_redraw (app.GetHWND (), IDC_LISTVIEW); + } break; } + case IDC_ALWAYSONTOP_CHK: + case IDC_REDUCTCONFIRMATION_CHK: + case IDC_LOADONSTARTUP_CHK: + case IDC_SKIPUACWARNING_CHK: + case IDC_CHECKUPDATES_CHK: + case IDC_LANGUAGE: + case IDC_WORKINGSET_CHK: + case IDC_SYSTEMWORKINGSET_CHK: + case IDC_STANDBYLISTPRIORITY0_CHK: + case IDC_STANDBYLIST_CHK: + case IDC_MODIFIEDLIST_CHK: + case IDC_COMBINEMEMORYLISTS_CHK: + case IDC_AUTOREDUCTENABLE_CHK: + case IDC_AUTOREDUCTINTERVALENABLE_CHK: case IDC_HOTKEY_CLEAN_CHK: + case IDC_HOTKEY_CLEAN: + case IDC_TRAYUSETRANSPARENCY_CHK: + case IDC_TRAYSHOWBORDER_CHK: + case IDC_TRAYROUNDCORNERS_CHK: + case IDC_TRAYCHANGEBG_CHK: + case IDC_TRAYUSEANTIALIASING_CHK: + case IDC_TRAYACTIONDC: + case IDC_TRAYACTIONMC: + case IDC_SHOW_CLEAN_RESULT_CHK: { - const bool is_enabled = IsWindowEnabled (GetDlgItem (hwnd, IDC_HOTKEY_CLEAN_CHK)) && (IsDlgButtonChecked (hwnd, IDC_HOTKEY_CLEAN_CHK) == BST_CHECKED); + const UINT ctrl_id = LOWORD (pmsg->wParam); + const UINT notify_code = HIWORD (pmsg->wParam); + bool is_stylechanged = false; + + if (ctrl_id == IDC_ALWAYSONTOP_CHK && notify_code == BN_CLICKED) + { + app.ConfigSet (L"AlwaysOnTop", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_REDUCTCONFIRMATION_CHK && notify_code == BN_CLICKED) + { + app.ConfigSet (L"IsShowReductConfirmation", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_LOADONSTARTUP_CHK && notify_code == BN_CLICKED) + { + app.AutorunEnable (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED); + } + else if (ctrl_id == IDC_SKIPUACWARNING_CHK && notify_code == BN_CLICKED) + { + app.SkipUacEnable (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED); + } + else if (ctrl_id == IDC_CHECKUPDATES_CHK && notify_code == BN_CLICKED) + { + app.ConfigSet (L"CheckUpdates", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_LANGUAGE && notify_code == CBN_SELCHANGE) + { + app.LocaleApplyFromControl (hwnd, ctrl_id); + } + else if (( + ctrl_id == IDC_WORKINGSET_CHK || + ctrl_id == IDC_SYSTEMWORKINGSET_CHK || + ctrl_id == IDC_STANDBYLISTPRIORITY0_CHK || + ctrl_id == IDC_STANDBYLIST_CHK || + ctrl_id == IDC_MODIFIEDLIST_CHK || + ctrl_id == IDC_COMBINEMEMORYLISTS_CHK + ) && notify_code == BN_CLICKED) + { + DWORD mask = 0; + + if (IsDlgButtonChecked (hwnd, IDC_WORKINGSET_CHK) == BST_CHECKED) + mask |= REDUCT_WORKING_SET; + + if (IsDlgButtonChecked (hwnd, IDC_SYSTEMWORKINGSET_CHK) == BST_CHECKED) + mask |= REDUCT_SYSTEM_WORKING_SET; + + if (IsDlgButtonChecked (hwnd, IDC_STANDBYLISTPRIORITY0_CHK) == BST_CHECKED) + mask |= REDUCT_STANDBY_PRIORITY0_LIST; + + if (IsDlgButtonChecked (hwnd, IDC_STANDBYLIST_CHK) == BST_CHECKED) + mask |= REDUCT_STANDBY_LIST; + + if (IsDlgButtonChecked (hwnd, IDC_MODIFIEDLIST_CHK) == BST_CHECKED) + mask |= REDUCT_MODIFIED_LIST; + + if (IsDlgButtonChecked (hwnd, IDC_COMBINEMEMORYLISTS_CHK) == BST_CHECKED) + mask |= REDUCT_COMBINE_MEMORY_LISTS; + + if ( + (ctrl_id == IDC_STANDBYLIST_CHK && (mask & REDUCT_STANDBY_LIST) != 0) || + (ctrl_id == IDC_MODIFIEDLIST_CHK && (mask & REDUCT_MODIFIED_LIST) != 0) + ) + { + if (!_app_confirmmessage (hwnd, I18N (&app, IDS_QUESTION_WARNING_TITLE, 0), I18N (&app, IDS_QUESTION_WARNING, 0), L"IsShowWarningConfirmation")) + { + settings_callback (hwnd, _RM_INITIALIZE, nullptr, page); + return FALSE; + } + } + + app.ConfigSet (L"ReductMask2", mask); + } + else if (ctrl_id == IDC_AUTOREDUCTENABLE_CHK && notify_code == BN_CLICKED) + { + const bool is_enabled = (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED); + + EnableWindow ((HWND)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTVALUE, UDM_GETBUDDY, 0, 0), is_enabled); + + app.ConfigSet (L"AutoreductEnable", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_AUTOREDUCTINTERVALENABLE_CHK && notify_code == BN_CLICKED) + { + const bool is_enabled = (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED); - _r_ctrl_enable (hwnd, IDC_HOTKEY_CLEAN, is_enabled); + EnableWindow ((HWND)SendDlgItemMessage (hwnd, IDC_AUTOREDUCTINTERVALVALUE, UDM_GETBUDDY, 0, 0), is_enabled); + + app.ConfigSet (L"AutoreductIntervalEnable", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_HOTKEY_CLEAN_CHK && notify_code == BN_CLICKED) + { + const bool is_enabled = (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED); + + _r_ctrl_enable (hwnd, IDC_HOTKEY_CLEAN, is_enabled); + + app.ConfigSet (L"HotkeyCleanEnable", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + + _app_hotkeyinit (app.GetHWND ()); + } + else if (ctrl_id == IDC_HOTKEY_CLEAN && notify_code == EN_CHANGE) + { + app.ConfigSet (L"HotkeyClean", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, HKM_GETHOTKEY, 0, 0)); + + _app_hotkeyinit (app.GetHWND ()); + } + else if (ctrl_id == IDC_TRAYUSETRANSPARENCY_CHK && notify_code == BN_CLICKED) + { + is_stylechanged = true; + app.ConfigSet (L"TrayUseTransparency", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_TRAYSHOWBORDER_CHK && notify_code == BN_CLICKED) + { + is_stylechanged = true; + app.ConfigSet (L"TrayShowBorder", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_TRAYROUNDCORNERS_CHK && notify_code == BN_CLICKED) + { + is_stylechanged = true; + app.ConfigSet (L"TrayRoundCorners", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_TRAYCHANGEBG_CHK && notify_code == BN_CLICKED) + { + is_stylechanged = true; + app.ConfigSet (L"TrayChangeBg", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_TRAYUSEANTIALIASING_CHK && notify_code == BN_CLICKED) + { + is_stylechanged = true; + app.ConfigSet (L"TrayUseAntialiasing", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + else if (ctrl_id == IDC_TRAYACTIONDC && notify_code == CBN_SELCHANGE) + app.ConfigSet (L"TrayActionDc", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, CB_GETCURSEL, 0, 0)); + + else if (ctrl_id == IDC_TRAYACTIONMC && notify_code == CBN_SELCHANGE) + { + app.ConfigSet (L"TrayActionMc", (DWORD)SendDlgItemMessage (hwnd, ctrl_id, CB_GETCURSEL, 0, 0)); + } + else if (ctrl_id == IDC_SHOW_CLEAN_RESULT_CHK && notify_code == BN_CLICKED) + { + app.ConfigSet (L"BalloonCleanResults", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED) ? true : false); + } + + if (is_stylechanged) + { + _app_iconinit (nullptr); + } break; } @@ -851,10 +1205,12 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) case IDC_COLOR_WARNING: case IDC_COLOR_DANGER: { + const UINT ctrl_id = LOWORD (pmsg->wParam); + CHOOSECOLOR cc = {0}; COLORREF cust[16] = {TRAY_COLOR_TEXT, TRAY_COLOR_BG, TRAY_COLOR_WARNING, TRAY_COLOR_DANGER}; - HWND hctrl = GetDlgItem (hwnd, LOWORD (pmsg->wParam)); + HWND hctrl = GetDlgItem (hwnd, ctrl_id); cc.lStructSize = sizeof (cc); cc.Flags = CC_RGBINIT | CC_FULLOPEN; @@ -863,7 +1219,25 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) cc.rgbResult = static_cast(GetWindowLongPtr (hctrl, GWLP_USERDATA)); if (ChooseColor (&cc)) - SetWindowLongPtr (hctrl, GWLP_USERDATA, cc.rgbResult); + { + const COLORREF clr = cc.rgbResult; + + if (ctrl_id == IDC_COLOR_TEXT) + app.ConfigSet (L"TrayColorText", clr); + + else if (ctrl_id == IDC_COLOR_BACKGROUND) + app.ConfigSet (L"TrayColorBg", clr); + + else if (ctrl_id == IDC_COLOR_WARNING) + app.ConfigSet (L"TrayColorWarning", clr); + + else if (ctrl_id == IDC_COLOR_DANGER) + app.ConfigSet (L"TrayColorDanger", clr); + + SetWindowLongPtr (hctrl, GWLP_USERDATA, clr); + + _app_iconinit (nullptr); + } break; } @@ -876,18 +1250,21 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) cf.hwndOwner = hwnd; cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_NOSCRIPTSEL; - config.lf.lfHeight /= config.scale; // font size fix - cf.lpLogFont = &config.lf; + LOGFONT lf = {0}; + + _app_fontinit (&lf, 0); + + cf.lpLogFont = &lf; if (ChooseFont (&cf)) { - app.ConfigSet (L"TrayFontName", config.lf.lfFaceName); - app.ConfigSet (L"TrayFontSize", (DWORD)MulDiv (-config.lf.lfHeight, 72, GetDeviceCaps (config.cdc1, LOGPIXELSY))); - app.ConfigSet (L"TrayFontWeight", (DWORD)config.lf.lfWeight); + const DWORD size = _r_dc_fontheighttosize (lf.lfHeight); + + app.ConfigSet (L"TrayFont", _r_fmt (L"%s;%d;%d", lf.lfFaceName, size, lf.lfWeight)); - _r_ctrl_settext (hwnd, IDC_FONT, L"%s, %dpx", app.ConfigGet (L"TrayFontName", FONT_NAME), app.ConfigGet (L"TrayFontSize", FONT_SIZE).AsInt ()); + _r_ctrl_settext (hwnd, IDC_FONT, L"%s, %dpx", lf.lfFaceName, size); - initializer_callback (app.GetHWND (), _RM_INITIALIZE, nullptr, nullptr); + _app_iconinit (nullptr); } break; @@ -914,8 +1291,12 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) // set privileges if (app.IsAdmin ()) { - _r_sys_setprivilege (SE_INCREASE_QUOTA_NAME, true); - _r_sys_setprivilege (SE_PROF_SINGLE_PROCESS_NAME, true); + LPCWSTR privileges[] = { + SE_INCREASE_QUOTA_NAME, + SE_PROF_SINGLE_PROCESS_NAME, + }; + + _r_sys_setprivilege (privileges, _countof (privileges), true); } // uac indicator (windows vista and above) @@ -933,14 +1314,23 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) // configure listview _r_listview_setstyle (hwnd, IDC_LISTVIEW, LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP); - _r_listview_addcolumn (hwnd, IDC_LISTVIEW, nullptr, 50, 1, LVCFMT_RIGHT); - _r_listview_addcolumn (hwnd, IDC_LISTVIEW, nullptr, 50, 2, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_LISTVIEW, 1, nullptr, 50, LVCFMT_RIGHT); + _r_listview_addcolumn (hwnd, IDC_LISTVIEW, 2, nullptr, 50, LVCFMT_LEFT); + + // configure listview + for (INT i = 0, k = 0; i < 3; i++) + { + _r_listview_addgroup (hwnd, IDC_LISTVIEW, i, I18N (&app, IDS_GROUP_1 + i, _r_fmt (L"IDS_GROUP_%d", i + 1)), 0, 0); + + for (INT j = 0; j < 3; j++) + _r_listview_additem (hwnd, IDC_LISTVIEW, k++, 0, I18N (&app, IDS_ITEM_1 + j, _r_fmt (L"IDS_ITEM_%d", j + 1)), LAST_VALUE, i); + } // settings - app.AddSettingsPage (nullptr, IDD_SETTINGS_1, IDS_SETTINGS_1, L"IDS_SETTINGS_1", &settings_callback); - app.AddSettingsPage (nullptr, IDD_SETTINGS_2, IDS_SETTINGS_2, L"IDS_SETTINGS_2", &settings_callback); - app.AddSettingsPage (nullptr, IDD_SETTINGS_3, IDS_SETTINGS_3, L"IDS_SETTINGS_3", &settings_callback); - app.AddSettingsPage (nullptr, IDD_SETTINGS_4, IDS_SETTINGS_4, L"IDS_SETTINGS_4", &settings_callback); + app.AddSettingsPage (nullptr, IDD_SETTINGS_GENERAL, IDS_SETTINGS_GENERAL, L"IDS_SETTINGS_GENERAL", &settings_callback); + app.AddSettingsPage (nullptr, IDD_SETTINGS_MEMORY, IDS_SETTINGS_MEMORY, L"IDS_SETTINGS_MEMORY", &settings_callback); + app.AddSettingsPage (nullptr, IDD_SETTINGS_APPEARANCE, IDS_SETTINGS_APPEARANCE, L"IDS_SETTINGS_APPEARANCE", &settings_callback); + app.AddSettingsPage (nullptr, IDD_SETTINGS_TRAY, IDS_SETTINGS_TRAY, L"IDS_SETTINGS_TRAY", &settings_callback); break; } @@ -964,14 +1354,10 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) rc.top = rc.bottom - height; rc.bottom = rc.top + height; - COLORREF clr_prev = SetBkColor (dc, GetSysColor (COLOR_3DFACE)); - ExtTextOut (dc, 0, 0, ETO_OPAQUE, &rc, nullptr, 0, nullptr); - SetBkColor (dc, clr_prev); + _r_dc_fillrect (dc, &rc, GetSysColor (COLOR_3DFACE)); for (INT i = 0; i < rc.right; i++) - { - SetPixel (dc, i, rc.top, RGB (223, 223, 223)); - } + SetPixel (dc, i, rc.top, GetSysColor (COLOR_APPWORKSPACE)); EndPaint (hwnd, &ps); @@ -987,7 +1373,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case WM_HOTKEY: { if (wparam == UID) - _app_clean (nullptr); + _app_memoryclean (nullptr, true); break; } @@ -996,43 +1382,43 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { LPNMHDR nmlp = (LPNMHDR)lparam; - if (nmlp->idFrom == IDC_LISTVIEW) + if (nmlp->idFrom != IDC_LISTVIEW) + break; + + switch (nmlp->code) { - switch (nmlp->code) + case NM_CUSTOMDRAW: { - case NM_CUSTOMDRAW: + LONG result = CDRF_DODEFAULT; + LPNMLVCUSTOMDRAW lpnmlv = (LPNMLVCUSTOMDRAW)lparam; + + switch (lpnmlv->nmcd.dwDrawStage) { - LONG result = CDRF_DODEFAULT; - LPNMLVCUSTOMDRAW lpnmlv = (LPNMLVCUSTOMDRAW)lparam; + case CDDS_PREPAINT: + { + result = (CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYITEMDRAW); + break; + } - switch (lpnmlv->nmcd.dwDrawStage) + case CDDS_ITEMPREPAINT: { - case CDDS_PREPAINT: + if ((UINT)lpnmlv->nmcd.lItemlParam >= app.ConfigGet (L"TrayLevelDanger", 90).AsUint ()) { - result = (CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYITEMDRAW); - break; + lpnmlv->clrText = app.ConfigGet (L"TrayColorDanger", TRAY_COLOR_DANGER).AsUlong (); + result = (CDRF_NOTIFYPOSTPAINT | CDRF_NEWFONT); } - - case CDDS_ITEMPREPAINT: + else if ((UINT)lpnmlv->nmcd.lItemlParam >= app.ConfigGet (L"TrayLevelWarning", 60).AsUint ()) { - if ((UINT)lpnmlv->nmcd.lItemlParam >= app.ConfigGet (L"TrayLevelDanger", 90).AsUint ()) - { - lpnmlv->clrText = app.ConfigGet (L"TrayColorDanger", TRAY_COLOR_DANGER).AsUlong (); - result = (CDRF_NOTIFYPOSTPAINT | CDRF_NEWFONT); - } - else if ((UINT)lpnmlv->nmcd.lItemlParam >= app.ConfigGet (L"TrayLevelWarning", 60).AsUint ()) - { - lpnmlv->clrText = app.ConfigGet (L"TrayColorWarning", TRAY_COLOR_WARNING).AsUlong (); - result = (CDRF_NOTIFYPOSTPAINT | CDRF_NEWFONT); - } - - break; + lpnmlv->clrText = app.ConfigGet (L"TrayColorWarning", TRAY_COLOR_WARNING).AsUlong (); + result = (CDRF_NOTIFYPOSTPAINT | CDRF_NEWFONT); } - } - SetWindowLongPtr (hwnd, DWLP_MSGRESULT, result); - return TRUE; + break; + } } + + SetWindowLongPtr (hwnd, DWLP_MSGRESULT, result); + return TRUE; } } @@ -1058,7 +1444,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { case 1: { - _app_clean (nullptr); + _app_memoryclean (nullptr, false); break; } @@ -1088,69 +1474,70 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) #define SUBMENU2 4 #define SUBMENU3 5 - HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_TRAY)), submenu = GetSubMenu (menu, 0); + HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_TRAY)); + HMENU submenu = GetSubMenu (menu, 0); HMENU submenu1 = GetSubMenu (submenu, SUBMENU1); HMENU submenu2 = GetSubMenu (submenu, SUBMENU2); HMENU submenu3 = GetSubMenu (submenu, SUBMENU3); // localize - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SHOW, 0), IDM_TRAY_SHOW, false); - app.LocaleMenu (submenu, I18N (&app, IDS_CLEAN, 0), IDM_TRAY_CLEAN, false); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_1, 0), SUBMENU1, true); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_2, 0), SUBMENU2, true); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_3, 0), SUBMENU3, true); - app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), IDM_TRAY_SETTINGS, false); - app.LocaleMenu (submenu, I18N (&app, IDS_WEBSITE, 0), IDM_TRAY_WEBSITE, false); - app.LocaleMenu (submenu, I18N (&app, IDS_ABOUT, 0), IDM_TRAY_ABOUT, false); - app.LocaleMenu (submenu, I18N (&app, IDS_EXIT, 0), IDM_TRAY_EXIT, false); - - app.LocaleMenu (submenu1, I18N (&app, IDS_WORKINGSET_CHK, 0), IDM_WORKINGSET_CHK, false); - app.LocaleMenu (submenu1, I18N (&app, IDS_SYSTEMWORKINGSET_CHK, 0), IDM_SYSTEMWORKINGSET_CHK, false); - app.LocaleMenu (submenu1, I18N (&app, IDS_STANDBYLISTPRIORITY0_CHK, 0), IDM_STANDBYLISTPRIORITY0_CHK, false); - app.LocaleMenu (submenu1, I18N (&app, IDS_STANDBYLIST_CHK, 0), IDM_STANDBYLIST_CHK, false); - app.LocaleMenu (submenu1, I18N (&app, IDS_MODIFIEDLIST_CHK, 0), IDM_MODIFIEDLIST_CHK, false); - - app.LocaleMenu (submenu2, I18N (&app, IDS_TRAY_DISABLE, 0), IDM_TRAY_DISABLE_1, false); - app.LocaleMenu (submenu3, I18N (&app, IDS_TRAY_DISABLE, 0), IDM_TRAY_DISABLE_2, false); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SHOW, 0), IDM_TRAY_SHOW, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_CLEAN, 0), IDM_TRAY_CLEAN, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_1, 0), SUBMENU1, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_2, 0), SUBMENU2, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_POPUP_3, 0), SUBMENU3, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), IDM_TRAY_SETTINGS, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_WEBSITE, 0), IDM_TRAY_WEBSITE, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ABOUT, 0), IDM_TRAY_ABOUT, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_EXIT, 0), IDM_TRAY_EXIT, false, nullptr); + + app.LocaleMenu (submenu1, I18N (&app, IDS_WORKINGSET_CHK, 0), IDM_WORKINGSET_CHK, false, nullptr); + app.LocaleMenu (submenu1, I18N (&app, IDS_SYSTEMWORKINGSET_CHK, 0), IDM_SYSTEMWORKINGSET_CHK, false, nullptr); + app.LocaleMenu (submenu1, I18N (&app, IDS_STANDBYLISTPRIORITY0_CHK, 0), IDM_STANDBYLISTPRIORITY0_CHK, false, nullptr); + app.LocaleMenu (submenu1, _r_fmt (L"%s*", I18N (&app, IDS_STANDBYLIST_CHK, 0)), IDM_STANDBYLIST_CHK, false, nullptr); + app.LocaleMenu (submenu1, _r_fmt (L"%s*", I18N (&app, IDS_MODIFIEDLIST_CHK, 0)), IDM_MODIFIEDLIST_CHK, false, nullptr); + app.LocaleMenu (submenu1, I18N (&app, IDS_COMBINEMEMORYLISTS_CHK, 0), IDM_COMBINEMEMORYLISTS_CHK, false, nullptr); + + app.LocaleMenu (submenu2, I18N (&app, IDS_TRAY_DISABLE, 0), IDM_TRAY_DISABLE_1, false, nullptr); + app.LocaleMenu (submenu3, I18N (&app, IDS_TRAY_DISABLE, 0), IDM_TRAY_DISABLE_2, false, nullptr); // configure submenu #1 - DWORD mask = app.ConfigGet (L"ReductMask", MASK_DEFAULT).AsUlong (); + const DWORD mask = app.ConfigGet (L"ReductMask2", REDUCT_MASK_DEFAULT).AsUlong (); if ((mask & REDUCT_WORKING_SET) != 0) - { CheckMenuItem (submenu1, IDM_WORKINGSET_CHK, MF_BYCOMMAND | MF_CHECKED); - } + if ((mask & REDUCT_SYSTEM_WORKING_SET) != 0) - { CheckMenuItem (submenu1, IDM_SYSTEMWORKINGSET_CHK, MF_BYCOMMAND | MF_CHECKED); - } + if ((mask & REDUCT_STANDBY_PRIORITY0_LIST) != 0) - { CheckMenuItem (submenu1, IDM_STANDBYLISTPRIORITY0_CHK, MF_BYCOMMAND | MF_CHECKED); - } + if ((mask & REDUCT_STANDBY_LIST) != 0) - { CheckMenuItem (submenu1, IDM_STANDBYLIST_CHK, MF_BYCOMMAND | MF_CHECKED); - } + if ((mask & REDUCT_MODIFIED_LIST) != 0) - { CheckMenuItem (submenu1, IDM_MODIFIEDLIST_CHK, MF_BYCOMMAND | MF_CHECKED); - } + + if ((mask & REDUCT_COMBINE_MEMORY_LISTS) != 0) + CheckMenuItem (submenu1, IDM_COMBINEMEMORYLISTS_CHK, MF_BYCOMMAND | MF_CHECKED); if (!app.IsVistaOrLater () || !app.IsAdmin ()) { - EnableMenuItem (submenu1, IDM_WORKINGSET_CHK, MF_BYCOMMAND | MF_DISABLED); - EnableMenuItem (submenu1, IDM_STANDBYLISTPRIORITY0_CHK, MF_BYCOMMAND | MF_DISABLED); - EnableMenuItem (submenu1, IDM_STANDBYLIST_CHK, MF_BYCOMMAND | MF_DISABLED); - EnableMenuItem (submenu1, IDM_MODIFIEDLIST_CHK, MF_BYCOMMAND | MF_DISABLED); + EnableMenuItem (submenu1, IDM_WORKINGSET_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem (submenu1, IDM_STANDBYLISTPRIORITY0_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem (submenu1, IDM_STANDBYLIST_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem (submenu1, IDM_MODIFIEDLIST_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); if (!app.IsAdmin ()) - { - EnableMenuItem (submenu1, IDM_SYSTEMWORKINGSET_CHK, MF_BYCOMMAND | MF_DISABLED); - } + EnableMenuItem (submenu1, IDM_SYSTEMWORKINGSET_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); } + // Combine memory lists (win 10 and above) + if (!app.IsAdmin () || !_r_sys_validversion (10, 0)) + EnableMenuItem (submenu1, IDM_COMBINEMEMORYLISTS_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + // configure submenu #2 generate_menu_array (app.ConfigGet (L"AutoreductValue", 90).AsUint (), limit_vec); @@ -1159,20 +1546,14 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) AppendMenu (submenu2, MF_STRING, IDM_TRAY_POPUP_1 + i, _r_fmt (L"%d%%", limit_vec.at (i))); if (!app.IsAdmin ()) - { - EnableMenuItem (submenu2, static_cast(IDM_TRAY_POPUP_1 + i), MF_BYCOMMAND | MF_DISABLED); - } + EnableMenuItem (submenu2, static_cast(IDM_TRAY_POPUP_1 + i), MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); if (app.ConfigGet (L"AutoreductValue", 90).AsSizeT () == limit_vec.at (i)) - { CheckMenuRadioItem (submenu2, 0, static_cast(limit_vec.size ()), static_cast(i) + 2, MF_BYPOSITION); - } } if (!app.ConfigGet (L"AutoreductEnable", true).AsBool ()) - { CheckMenuRadioItem (submenu2, 0, static_cast(limit_vec.size ()), 0, MF_BYPOSITION); - } // configure submenu #3 generate_menu_array (app.ConfigGet (L"AutoreductIntervalValue", 30).AsUint (), interval_vec); @@ -1182,32 +1563,21 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) AppendMenu (submenu3, MF_STRING, IDM_TRAY_POPUP_2 + i, _r_fmt (L"%d min.", interval_vec.at (i))); if (!app.IsAdmin ()) - { - EnableMenuItem (submenu3, static_cast(IDM_TRAY_POPUP_2 + i), MF_BYCOMMAND | MF_DISABLED); - } + EnableMenuItem (submenu3, static_cast(IDM_TRAY_POPUP_2 + i), MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); if (app.ConfigGet (L"AutoreductIntervalValue", 30).AsSizeT () == interval_vec.at (i)) - { CheckMenuRadioItem (submenu3, 0, static_cast(interval_vec.size ()), static_cast(i) + 2, MF_BYPOSITION); - } } if (!app.ConfigGet (L"AutoreductIntervalEnable", false).AsBool ()) - { CheckMenuRadioItem (submenu3, 0, static_cast(interval_vec.size ()), 0, MF_BYPOSITION); - } POINT pt = {0}; GetCursorPos (&pt); TrackPopupMenuEx (submenu, TPM_RIGHTBUTTON | TPM_LEFTBUTTON, pt.x, pt.y, hwnd, nullptr); - DestroyMenu (submenu1); - DestroyMenu (submenu2); - DestroyMenu (submenu3); - DestroyMenu (menu); - DestroyMenu (submenu); break; } @@ -1220,17 +1590,21 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if ((LOWORD (wparam) >= IDM_TRAY_POPUP_1 && LOWORD (wparam) <= IDM_TRAY_POPUP_1 + limit_vec.size ())) { + const size_t idx = (LOWORD (wparam) - IDM_TRAY_POPUP_1); + app.ConfigSet (L"AutoreductEnable", true); - app.ConfigSet (L"AutoreductValue", (DWORD)limit_vec.at (LOWORD (wparam) - IDM_TRAY_POPUP_1)); + app.ConfigSet (L"AutoreductValue", (DWORD)limit_vec.at (idx)); - break; + return FALSE; } else if ((LOWORD (wparam) >= IDM_TRAY_POPUP_2 && LOWORD (wparam) <= IDM_TRAY_POPUP_2 + interval_vec.size ())) { + const size_t idx = (LOWORD (wparam) - IDM_TRAY_POPUP_2); + app.ConfigSet (L"AutoreductIntervalEnable", true); - app.ConfigSet (L"AutoreductIntervalValue", (DWORD)interval_vec.at (LOWORD (wparam) - IDM_TRAY_POPUP_2)); + app.ConfigSet (L"AutoreductIntervalValue", (DWORD)interval_vec.at (idx)); - break; + return FALSE; } switch (LOWORD (wparam)) @@ -1240,32 +1614,40 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case IDM_STANDBYLISTPRIORITY0_CHK: case IDM_STANDBYLIST_CHK: case IDM_MODIFIEDLIST_CHK: + case IDM_COMBINEMEMORYLISTS_CHK: { - const DWORD mask = app.ConfigGet (L"ReductMask", MASK_DEFAULT).AsUlong (); - DWORD new_flag = 0; + const UINT ctrl_id = LOWORD (wparam); + const DWORD mask = app.ConfigGet (L"ReductMask2", REDUCT_MASK_DEFAULT).AsUlong (); + DWORD new_mask = 0; - if ((LOWORD (wparam)) == IDM_WORKINGSET_CHK) - { - new_flag = REDUCT_WORKING_SET; - } - else if ((LOWORD (wparam)) == IDM_SYSTEMWORKINGSET_CHK) - { - new_flag = REDUCT_SYSTEM_WORKING_SET; - } - else if ((LOWORD (wparam)) == IDM_STANDBYLISTPRIORITY0_CHK) - { - new_flag = REDUCT_STANDBY_PRIORITY0_LIST; - } - else if ((LOWORD (wparam)) == IDM_STANDBYLIST_CHK) - { - new_flag = REDUCT_STANDBY_LIST; - } - else if ((LOWORD (wparam)) == IDM_MODIFIEDLIST_CHK) + if (ctrl_id == IDM_WORKINGSET_CHK) + new_mask = REDUCT_WORKING_SET; + + else if (ctrl_id == IDM_SYSTEMWORKINGSET_CHK) + new_mask = REDUCT_SYSTEM_WORKING_SET; + + else if (ctrl_id == IDM_STANDBYLISTPRIORITY0_CHK) + new_mask = REDUCT_STANDBY_PRIORITY0_LIST; + + else if (ctrl_id == IDM_STANDBYLIST_CHK) + new_mask = REDUCT_STANDBY_LIST; + + else if (ctrl_id == IDM_MODIFIEDLIST_CHK) + new_mask = REDUCT_MODIFIED_LIST; + + else if (ctrl_id == IDM_COMBINEMEMORYLISTS_CHK) + new_mask = REDUCT_COMBINE_MEMORY_LISTS; + + if ( + (ctrl_id == IDM_STANDBYLIST_CHK && (mask & REDUCT_STANDBY_LIST) == 0) || + (ctrl_id == IDM_MODIFIEDLIST_CHK && (mask & REDUCT_MODIFIED_LIST) == 0) + ) { - new_flag = REDUCT_MODIFIED_LIST; + if (!_app_confirmmessage (hwnd, I18N (&app, IDS_QUESTION_WARNING_TITLE, 0), I18N (&app, IDS_QUESTION_WARNING, 0), L"IsShowWarningConfirmation")) + return FALSE; } - app.ConfigSet (L"ReductMask", (mask & new_flag) != 0 ? (mask & ~new_flag) : (mask | new_flag)); + app.ConfigSet (L"ReductMask2", (mask & new_mask) != 0 ? (mask & ~new_mask) : (mask | new_mask)); break; } @@ -1314,11 +1696,11 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) if (app.RunAsAdmin ()) DestroyWindow (hwnd); - app.TrayPopup (NIIF_ERROR, APP_NAME, I18N (&app, IDS_STATUS_NOPRIVILEGES, 0)); + app.TrayPopup (UID, NIIF_ERROR, APP_NAME, I18N (&app, IDS_STATUS_NOPRIVILEGES, 0)); } else { - _app_clean (hwnd); + _app_memoryclean (hwnd, false); } SetProp (hwnd, L"is_reduct_opened", FALSE); diff --git a/src/main.hpp b/src/main.hpp index 021da026..0512a60a 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -10,8 +10,7 @@ #include "app.hpp" #define WM_TRAYICON WM_APP + 1 -#define FONT_NAME L"Tahoma" -#define FONT_SIZE 8 +#define FONT_DEFAULT L"Tahoma;8;400" #define TIMER 1000 #define UID 1337 @@ -24,6 +23,7 @@ #define REDUCT_STANDBY_PRIORITY0_LIST 0x04 #define REDUCT_STANDBY_LIST 0x08 #define REDUCT_MODIFIED_LIST 0x10 +#define REDUCT_COMBINE_MEMORY_LISTS 0x20 // def. colors #define TRAY_COLOR_MASK RGB(255, 0, 255) @@ -33,94 +33,42 @@ #define TRAY_COLOR_DANGER RGB(237, 28, 36) // def. memory cleaning area -#define MASK_DEFAULT (REDUCT_WORKING_SET | REDUCT_SYSTEM_WORKING_SET | REDUCT_STANDBY_PRIORITY0_LIST) +#define REDUCT_MASK_DEFAULT (REDUCT_WORKING_SET | REDUCT_SYSTEM_WORKING_SET | REDUCT_STANDBY_PRIORITY0_LIST | REDUCT_COMBINE_MEMORY_LISTS) +#define REDUCT_MASK_FREEZES (REDUCT_STANDBY_LIST | REDUCT_MODIFIED_LIST) struct MEMORYINFO { - // Physical - DWORD percent_phys; - DWORDLONG total_phys; - DWORDLONG free_phys; - - // Page file - DWORD percent_page; - DWORDLONG total_page; - DWORDLONG free_page; - - // System working set - DWORD percent_ws; - DWORDLONG total_ws; - DWORDLONG free_ws; -}; - -struct STATIC_DATA -{ - LONG scale; - - DWORD ms_prev; - - RECT rc; + DWORD percent_phys = 0; + DWORD percent_page = 0; + DWORD percent_ws = 0; - HDC dc; - HDC cdc1; - HDC cdc2; + DWORDLONG total_phys = 0; + DWORDLONG free_phys = 0; - HBITMAP bitmap; - HBITMAP bitmap_mask; + DWORDLONG total_page = 0; + DWORDLONG free_page = 0; - HFONT font; - LOGFONT lf; + DWORDLONG total_ws = 0; + DWORDLONG free_ws = 0; +}; - HBRUSH bg_brush; - HBRUSH bg_brush_warning; - HBRUSH bg_brush_danger; +struct STATIC_DATA +{ + LONG scale = 0; - MEMORYINFO ms; -}; + DWORD ms_prev = 0; -// rev -// private -// source: http://www.microsoft.com/whdc/system/Sysinternals/MoreThan64proc.mspx + HDC cdc1 = nullptr; + HDC cdc2 = nullptr; -#define SystemFileCacheInformation 21 -#define SystemMemoryListInformation 80 + HBITMAP bitmap = nullptr; + HBITMAP bitmap_mask = nullptr; -#define MemoryEmptyWorkingSets 2 -#define MemoryFlushModifiedList 3 -#define MemoryPurgeStandbyList 4 -#define MemoryPurgeLowPriorityStandbyList 5 + HFONT font = nullptr; -struct SYSTEM_CACHE_INFORMATION -{ - ULONG_PTR CurrentSize; - ULONG_PTR PeakSize; - ULONG_PTR PageFaultCount; - ULONG_PTR MinimumWorkingSet; - ULONG_PTR MaximumWorkingSet; - ULONG_PTR TransitionSharedPages; - ULONG_PTR PeakTransitionSharedPages; - DWORD Unused[2]; + HBRUSH bg_brush = nullptr; + HBRUSH bg_brush_warning = nullptr; + HBRUSH bg_brush_danger = nullptr; }; -extern "C" { - NTSYSCALLAPI - NTSTATUS - NTAPI - NtQuerySystemInformation ( - _In_ UINT SystemInformationClass, - _Out_writes_bytes_opt_ (SystemInformationLength) PVOID SystemInformation, - _In_ ULONG SystemInformationLength, - _Out_opt_ PULONG ReturnLength - ); - - NTSYSCALLAPI - NTSTATUS - NTAPI - NtSetSystemInformation ( - _In_ UINT SystemInformationClass, - _In_reads_bytes_opt_ (SystemInformationLength) PVOID SystemInformation, - _In_ ULONG SystemInformationLength - ); -} - #endif // __MAIN_H__ diff --git a/src/resource.hpp b/src/resource.hpp index 0772a1e9..b59ffd5b 100644 --- a/src/resource.hpp +++ b/src/resource.hpp @@ -12,10 +12,10 @@ // Dialogs #define IDD_MAIN 100 #define IDD_SETTINGS 101 -#define IDD_SETTINGS_1 102 -#define IDD_SETTINGS_2 103 -#define IDD_SETTINGS_3 104 -#define IDD_SETTINGS_4 105 +#define IDD_SETTINGS_GENERAL 102 +#define IDD_SETTINGS_MEMORY 103 +#define IDD_SETTINGS_APPEARANCE 104 +#define IDD_SETTINGS_TRAY 105 // Main Dlg #define IDC_LISTVIEW 1000 @@ -23,8 +23,7 @@ // Settings Dlg #define IDC_NAV 1000 -#define IDC_APPLY 1001 -#define IDC_CLOSE 1002 +#define IDC_CLOSE 1001 #define IDC_TITLE_1 1003 #define IDC_TITLE_2 1004 @@ -50,50 +49,55 @@ #define IDC_STANDBYLISTPRIORITY0_CHK 110 #define IDC_STANDBYLIST_CHK 111 #define IDC_MODIFIEDLIST_CHK 112 +#define IDC_COMBINEMEMORYLISTS_CHK 113 -#define IDC_AUTOREDUCTENABLE_CHK 113 -#define IDC_AUTOREDUCTVALUE 114 +#define IDC_AUTOREDUCTENABLE_CHK 114 +#define IDC_AUTOREDUCTVALUE_CTRL 115 +#define IDC_AUTOREDUCTVALUE 116 -#define IDC_AUTOREDUCTINTERVALENABLE_CHK 115 -#define IDC_AUTOREDUCTINTERVALVALUE 116 +#define IDC_AUTOREDUCTINTERVALENABLE_CHK 117 +#define IDC_AUTOREDUCTINTERVALVALUE_CTRL 118 +#define IDC_AUTOREDUCTINTERVALVALUE 119 -#define IDC_HOTKEY_CLEAN_CHK 117 -#define IDC_HOTKEY_CLEAN 118 +#define IDC_HOTKEY_CLEAN_CHK 120 +#define IDC_HOTKEY_CLEAN 121 -#define IDC_TRAYUSETRANSPARENCY_CHK 119 -#define IDC_TRAYSHOWBORDER_CHK 120 -#define IDC_TRAYROUNDCORNERS_CHK 121 -#define IDC_TRAYCHANGEBG_CHK 122 -#define IDC_TRAYUSEANTIALIASING_CHK 123 +#define IDC_TRAYUSETRANSPARENCY_CHK 122 +#define IDC_TRAYSHOWBORDER_CHK 123 +#define IDC_TRAYROUNDCORNERS_CHK 124 +#define IDC_TRAYCHANGEBG_CHK 125 +#define IDC_TRAYUSEANTIALIASING_CHK 126 -#define IDC_FONT_HINT 124 -#define IDC_FONT 125 +#define IDC_FONT_HINT 127 +#define IDC_FONT 128 -#define IDC_COLOR_TEXT_HINT 126 -#define IDC_COLOR_TEXT 127 +#define IDC_COLOR_TEXT_HINT 129 +#define IDC_COLOR_TEXT 130 -#define IDC_COLOR_BACKGROUND_HINT 128 -#define IDC_COLOR_BACKGROUND 129 +#define IDC_COLOR_BACKGROUND_HINT 131 +#define IDC_COLOR_BACKGROUND 132 -#define IDC_COLOR_WARNING_HINT 130 -#define IDC_COLOR_WARNING 131 +#define IDC_COLOR_WARNING_HINT 133 +#define IDC_COLOR_WARNING 134 -#define IDC_COLOR_DANGER_HINT 132 -#define IDC_COLOR_DANGER 133 +#define IDC_COLOR_DANGER_HINT 135 +#define IDC_COLOR_DANGER 136 -#define IDC_TRAYLEVELWARNING_HINT 134 -#define IDC_TRAYLEVELWARNING 135 +#define IDC_TRAYLEVELWARNING_HINT 137 +#define IDC_TRAYLEVELWARNING_CTRL 138 +#define IDC_TRAYLEVELWARNING 139 -#define IDC_TRAYLEVELDANGER_HINT 136 -#define IDC_TRAYLEVELDANGER 137 +#define IDC_TRAYLEVELDANGER_HINT 140 +#define IDC_TRAYLEVELDANGER_CTRL 141 +#define IDC_TRAYLEVELDANGER 142 -#define IDC_TRAYACTIONDC_HINT 138 -#define IDC_TRAYACTIONDC 139 +#define IDC_TRAYACTIONDC_HINT 143 +#define IDC_TRAYACTIONDC 144 -#define IDC_TRAYACTIONMC_HINT 140 -#define IDC_TRAYACTIONMC 141 +#define IDC_TRAYACTIONMC_HINT 145 +#define IDC_TRAYACTIONMC 146 -#define IDC_SHOW_CLEAN_RESULT_CHK 142 +#define IDC_SHOW_CLEAN_RESULT_CHK 147 // Main Menu #define IDM_SETTINGS 2000 @@ -118,9 +122,10 @@ #define IDM_STANDBYLISTPRIORITY0_CHK 3010 #define IDM_STANDBYLIST_CHK 3011 #define IDM_MODIFIEDLIST_CHK 3012 +#define IDM_COMBINEMEMORYLISTS_CHK 3014 #define IDM_TRAY_POPUP_1 4000 -#define IDM_TRAY_POPUP_2 (IDM_TRAY_POPUP_1 + 50) +#define IDM_TRAY_POPUP_2 5000 // Strings #define IDS_UPDATE_NO 1001 @@ -154,13 +159,12 @@ #define IDS_ITEM_2 3005 #define IDS_ITEM_3 3006 -#define IDS_SETTINGS_1 4000 -#define IDS_SETTINGS_2 4001 -#define IDS_SETTINGS_3 4002 -#define IDS_SETTINGS_4 4003 +#define IDS_SETTINGS_GENERAL 4000 +#define IDS_SETTINGS_MEMORY 4001 +#define IDS_SETTINGS_APPEARANCE 4002 +#define IDS_SETTINGS_TRAY 4003 -#define IDS_APPLY 4004 -#define IDS_CLOSE 4005 +#define IDS_CLOSE 4004 #define IDS_TITLE_1 4006 #define IDS_TITLE_2 4007 @@ -185,42 +189,44 @@ #define IDS_STANDBYLISTPRIORITY0_CHK 5009 #define IDS_STANDBYLIST_CHK 5010 #define IDS_MODIFIEDLIST_CHK 5011 +#define IDS_COMBINEMEMORYLISTS_CHK 5012 -#define IDS_AUTOREDUCTENABLE_CHK 5012 -#define IDS_AUTOREDUCTINTERVALENABLE_CHK 5013 +#define IDS_AUTOREDUCTENABLE_CHK 5013 +#define IDS_AUTOREDUCTINTERVALENABLE_CHK 5014 -#define IDS_HOTKEY_CLEAN_CHK 5014 +#define IDS_HOTKEY_CLEAN_CHK 5015 -#define IDS_TRAYUSETRANSPARENCY_CHK 5015 -#define IDS_TRAYSHOWBORDER_CHK 5016 -#define IDS_TRAYROUNDCORNERS_CHK 5017 -#define IDS_TRAYCHANGEBG_CHK 5018 -#define IDS_TRAYUSEANTIALIASING_CHK 5019 +#define IDS_TRAYUSETRANSPARENCY_CHK 5016 +#define IDS_TRAYSHOWBORDER_CHK 5017 +#define IDS_TRAYROUNDCORNERS_CHK 5018 +#define IDS_TRAYCHANGEBG_CHK 5019 +#define IDS_TRAYUSEANTIALIASING_CHK 5020 -#define IDS_FONT_HINT 5020 -#define IDS_COLOR_TEXT_HINT 5021 -#define IDS_COLOR_BACKGROUND_HINT 5022 -#define IDS_COLOR_WARNING_HINT 5023 -#define IDS_COLOR_DANGER_HINT 5024 +#define IDS_FONT_HINT 5021 +#define IDS_COLOR_TEXT_HINT 5022 +#define IDS_COLOR_BACKGROUND_HINT 5023 +#define IDS_COLOR_WARNING_HINT 5024 +#define IDS_COLOR_DANGER_HINT 5025 -#define IDS_TRAYLEVELWARNING_HINT 5025 -#define IDS_TRAYLEVELDANGER_HINT 5026 +#define IDS_TRAYLEVELWARNING_HINT 5026 +#define IDS_TRAYLEVELDANGER_HINT 5027 -#define IDS_TRAYACTIONDC_HINT 5027 -#define IDS_TRAYACTIONMC_HINT 5028 +#define IDS_TRAYACTIONDC_HINT 5028 +#define IDS_TRAYACTIONMC_HINT 5029 -#define IDS_TRAY_ACTION_1 5029 -#define IDS_TRAY_ACTION_2 5030 -#define IDS_TRAY_ACTION_3 5031 +#define IDS_TRAY_ACTION_1 5030 +#define IDS_TRAY_ACTION_2 5031 +#define IDS_TRAY_ACTION_3 5032 -#define IDS_SHOW_CLEAN_RESULT_CHK 5032 +#define IDS_SHOW_CLEAN_RESULT_CHK 5033 -#define IDS_QUESTION 5033 +#define IDS_QUESTION 5034 +#define IDS_QUESTION_WARNING_TITLE 5035 +#define IDS_QUESTION_WARNING 5036 +#define IDS_QUESTION_FLAG_CHK 5037 -#define IDS_TOOLTIP 5034 - -#define IDS_STATUS_CLEANED 5035 -#define IDS_STATUS_NOPRIVILEGES 5036 +#define IDS_STATUS_CLEANED 5038 +#define IDS_STATUS_NOPRIVILEGES 5039 // Icons #define IDI_MAIN 100 diff --git a/src/resource.rc b/src/resource.rc index 2c3f308a..57b0d93f 100644 --- a/src/resource.rc +++ b/src/resource.rc @@ -41,6 +41,7 @@ IDM_TRAY MENU MENUITEM " ", IDM_STANDBYLISTPRIORITY0_CHK MENUITEM " ", IDM_STANDBYLIST_CHK MENUITEM " ", IDM_MODIFIEDLIST_CHK + MENUITEM " ", IDM_COMBINEMEMORYLISTS_CHK } POPUP " " { @@ -78,120 +79,121 @@ FONT 8, "Ms Shell Dlg" IDD_SETTINGS DIALOGEX 0, 0, 380, 214 STYLE WS_POPUP | WS_SYSMENU | WS_CAPTION | DS_MODALFRAME | DS_SHELLFONT +EXSTYLE WS_EX_APPWINDOW CAPTION "" FONT 8, "Ms Shell Dlg" { - CONTROL "", IDC_NAV, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_LINESATROOT | TVS_HASLINES | TVS_INFOTIP, 8, 8, 94, 198 + CONTROL "", IDC_NAV, WC_TREEVIEW, TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_FULLROWSELECT | WS_HSCROLL | WS_TABSTOP, 2, 1, 103, 244 - DEFPUSHBUTTON "", IDC_APPLY, 268, 192, 50, 14 PUSHBUTTON "", IDC_CLOSE, 322, 192, 50, 14 } -IDD_SETTINGS_1 DIALOGEX 110, 8, 262, 176 +IDD_SETTINGS_GENERAL DIALOGEX 107, 0, 272, 186 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU | WS_TABSTOP EXSTYLE WS_EX_CONTROLPARENT FONT 8, "Ms Shell Dlg" { - GROUPBOX "", IDC_TITLE_1, 0, 0, 262, 80 + GROUPBOX "", IDC_TITLE_1, 4, 4, 262, 80 - AUTOCHECKBOX "", IDC_ALWAYSONTOP_CHK, 8, 14, 246, 10 - AUTOCHECKBOX "", IDC_LOADONSTARTUP_CHK, 8, 26, 246, 10 - AUTOCHECKBOX "", IDC_REDUCTCONFIRMATION_CHK, 8, 38, 246, 10 - AUTOCHECKBOX "", IDC_SKIPUACWARNING_CHK, 8, 50, 246, 10 - AUTOCHECKBOX "", IDC_CHECKUPDATES_CHK, 8, 62, 246, 10 + AUTOCHECKBOX "", IDC_ALWAYSONTOP_CHK, 12, 18, 246, 10 + AUTOCHECKBOX "", IDC_LOADONSTARTUP_CHK, 12, 30, 246, 10 + AUTOCHECKBOX "", IDC_REDUCTCONFIRMATION_CHK, 12, 42, 246, 10 + AUTOCHECKBOX "", IDC_SKIPUACWARNING_CHK, 12, 54, 246, 10 + AUTOCHECKBOX "", IDC_CHECKUPDATES_CHK, 12, 66, 246, 10 - GROUPBOX "", IDC_TITLE_2, 0, 82, 262, 36 + GROUPBOX "", IDC_TITLE_2, 4, 86, 262, 36 - LTEXT "", IDC_LANGUAGE_HINT, 8, 96, 114, 12, SS_CENTERIMAGE - COMBOBOX IDC_LANGUAGE, 130, 96, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + LTEXT "", IDC_LANGUAGE_HINT, 12, 100, 114, 12, SS_CENTERIMAGE + COMBOBOX IDC_LANGUAGE, 134, 100, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP } -IDD_SETTINGS_2 DIALOGEX 110, 8, 262, 176 +IDD_SETTINGS_MEMORY DIALOGEX 107, 0, 272, 186 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU | WS_TABSTOP EXSTYLE WS_EX_CONTROLPARENT FONT 8, "Ms Shell Dlg" { - GROUPBOX "", IDC_TITLE_3, 0, 0, 262, 80 + GROUPBOX "", IDC_TITLE_3, 4, 4, 262, 90 - AUTOCHECKBOX "", IDC_WORKINGSET_CHK, 8, 14, 246, 10 - AUTOCHECKBOX "", IDC_SYSTEMWORKINGSET_CHK, 8, 26, 246, 10 - AUTOCHECKBOX "", IDC_STANDBYLISTPRIORITY0_CHK, 8, 38, 246, 10 - AUTOCHECKBOX "", IDC_STANDBYLIST_CHK, 8, 50, 246, 10 - AUTOCHECKBOX "", IDC_MODIFIEDLIST_CHK, 8, 62, 246, 10 + AUTOCHECKBOX "", IDC_WORKINGSET_CHK, 12, 18, 246, 10 + AUTOCHECKBOX "", IDC_SYSTEMWORKINGSET_CHK, 12, 30, 246, 10 + AUTOCHECKBOX "", IDC_STANDBYLISTPRIORITY0_CHK, 12, 42, 246, 10 + AUTOCHECKBOX "", IDC_STANDBYLIST_CHK, 12, 54, 246, 10 + AUTOCHECKBOX "", IDC_MODIFIEDLIST_CHK, 12, 66, 246, 10 + AUTOCHECKBOX "", IDC_COMBINEMEMORYLISTS_CHK, 12, 78, 246, 10 - GROUPBOX "", IDC_TITLE_4, 0, 82, 262, 50 + GROUPBOX "", IDC_TITLE_4, 4, 96, 262, 48 - AUTOCHECKBOX "", IDC_AUTOREDUCTENABLE_CHK, 8, 96, 194, 12, BS_MULTILINE - EDITTEXT IDC_STATIC, 210, 96, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE - CONTROL "", IDC_AUTOREDUCTVALUE, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 0, 0, 0, 0 + AUTOCHECKBOX "", IDC_AUTOREDUCTENABLE_CHK, 12, 108, 194, 12, BS_MULTILINE + EDITTEXT IDC_AUTOREDUCTVALUE_CTRL, 214, 108, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE + CONTROL "", IDC_AUTOREDUCTVALUE, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_WRAP, 0, 0, 0, 0 - AUTOCHECKBOX "", IDC_AUTOREDUCTINTERVALENABLE_CHK, 8, 110, 194, 12, BS_MULTILINE - EDITTEXT IDC_STATIC, 210, 110, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE - CONTROL "", IDC_AUTOREDUCTINTERVALVALUE, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 0, 0, 0, 0 + AUTOCHECKBOX "", IDC_AUTOREDUCTINTERVALENABLE_CHK, 12, 122, 194, 12, BS_MULTILINE + EDITTEXT IDC_AUTOREDUCTINTERVALVALUE_CTRL, 214, 122, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE + CONTROL "", IDC_AUTOREDUCTINTERVALVALUE, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_WRAP, 0, 0, 0, 0 - GROUPBOX "", IDC_TITLE_5, 0, 134, 262, 36 + GROUPBOX "", IDC_TITLE_5, 4, 146, 262, 34 - AUTOCHECKBOX "", IDC_HOTKEY_CLEAN_CHK, 8, 148, 144, 12, BS_MULTILINE - CONTROL "", IDC_HOTKEY_CLEAN, HOTKEY_CLASS, WS_TABSTOP, 160, 148, 94, 12 + AUTOCHECKBOX "", IDC_HOTKEY_CLEAN_CHK, 12, 158, 144, 12, BS_MULTILINE + CONTROL "", IDC_HOTKEY_CLEAN, HOTKEY_CLASS, WS_TABSTOP, 164, 158, 94, 12 } -IDD_SETTINGS_3 DIALOGEX 110, 8, 262, 176 +IDD_SETTINGS_APPEARANCE DIALOGEX 107, 0, 272, 186 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU | WS_TABSTOP EXSTYLE WS_EX_CONTROLPARENT FONT 8, "Ms Shell Dlg" { - GROUPBOX "", IDC_TITLE_1, 0, 0, 262, 80 + GROUPBOX "", IDC_TITLE_1, 4, 4, 262, 80 - AUTOCHECKBOX "", IDC_TRAYUSETRANSPARENCY_CHK, 8, 14, 246, 10 - AUTOCHECKBOX "", IDC_TRAYSHOWBORDER_CHK, 8, 26, 246, 10 - AUTOCHECKBOX "", IDC_TRAYROUNDCORNERS_CHK, 8, 38, 246, 10 - AUTOCHECKBOX "", IDC_TRAYCHANGEBG_CHK, 8, 50, 246, 10 - AUTOCHECKBOX "", IDC_TRAYUSEANTIALIASING_CHK, 8, 62, 246, 10 + AUTOCHECKBOX "", IDC_TRAYUSETRANSPARENCY_CHK, 12, 18, 246, 10 + AUTOCHECKBOX "", IDC_TRAYSHOWBORDER_CHK, 12, 30, 246, 10 + AUTOCHECKBOX "", IDC_TRAYROUNDCORNERS_CHK, 12, 42, 246, 10 + AUTOCHECKBOX "", IDC_TRAYCHANGEBG_CHK, 12, 54, 246, 10 + AUTOCHECKBOX "", IDC_TRAYUSEANTIALIASING_CHK, 12, 66, 246, 10 - GROUPBOX "", IDC_TITLE_6, 0, 82, 262, 94 + GROUPBOX "", IDC_TITLE_6, 4, 86, 262, 94 - LTEXT "", IDC_FONT_HINT, 8, 96, 114, 12, SS_CENTERIMAGE - PUSHBUTTON "", IDC_FONT, 130, 96, 124, 12 + LTEXT "", IDC_FONT_HINT, 12, 100, 114, 12, SS_CENTERIMAGE + PUSHBUTTON "", IDC_FONT, 134, 100, 124, 12 - LTEXT "", IDC_COLOR_TEXT_HINT, 8, 110, 194, 12, SS_CENTERIMAGE - PUSHBUTTON "", IDC_COLOR_TEXT, 210, 110, 44, 12 + LTEXT "", IDC_COLOR_TEXT_HINT, 12, 114, 194, 12, SS_CENTERIMAGE + PUSHBUTTON "", IDC_COLOR_TEXT, 214, 114, 44, 12 - LTEXT "", IDC_COLOR_BACKGROUND_HINT, 8, 124, 194, 12, SS_CENTERIMAGE - PUSHBUTTON "", IDC_COLOR_BACKGROUND, 210, 124, 44, 12 + LTEXT "", IDC_COLOR_BACKGROUND_HINT, 12, 128, 194, 12, SS_CENTERIMAGE + PUSHBUTTON "", IDC_COLOR_BACKGROUND, 214, 128, 44, 12 - LTEXT "", IDC_COLOR_WARNING_HINT, 8, 138, 194, 12, SS_CENTERIMAGE - PUSHBUTTON "", IDC_COLOR_WARNING, 210, 138, 44, 12 + LTEXT "", IDC_COLOR_WARNING_HINT, 12, 142, 194, 12, SS_CENTERIMAGE + PUSHBUTTON "", IDC_COLOR_WARNING, 214, 142, 44, 12 - LTEXT "", IDC_COLOR_DANGER_HINT, 8, 152, 194, 12, SS_CENTERIMAGE - PUSHBUTTON "", IDC_COLOR_DANGER, 210, 152, 44, 12 + LTEXT "", IDC_COLOR_DANGER_HINT, 12, 156, 194, 12, SS_CENTERIMAGE + PUSHBUTTON "", IDC_COLOR_DANGER, 214, 156, 44, 12 } -IDD_SETTINGS_4 DIALOGEX 110, 8, 262, 176 +IDD_SETTINGS_TRAY DIALOGEX 107, 0, 272, 186 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU | WS_TABSTOP EXSTYLE WS_EX_CONTROLPARENT FONT 8, "Ms Shell Dlg" { - GROUPBOX "", IDC_TITLE_7, 0, 0, 262, 50 + GROUPBOX "", IDC_TITLE_7, 4, 4, 262, 50 - LTEXT "", IDC_TRAYLEVELWARNING_HINT, 8, 14, 194, 12, SS_CENTERIMAGE - EDITTEXT IDC_STATIC, 210, 14, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE - CONTROL "", IDC_TRAYLEVELWARNING, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 0, 0, 0, 0 + LTEXT "", IDC_TRAYLEVELWARNING_HINT, 12, 18, 194, 12, SS_CENTERIMAGE + EDITTEXT IDC_TRAYLEVELWARNING_CTRL, 214, 18, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE + CONTROL "", IDC_TRAYLEVELWARNING, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_WRAP, 0, 0, 0, 0 - LTEXT "", IDC_TRAYLEVELDANGER_HINT, 8, 28, 194, 12, SS_CENTERIMAGE - EDITTEXT IDC_STATIC, 210, 28, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE - CONTROL "", IDC_TRAYLEVELDANGER, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 0, 0, 0, 0 + LTEXT "", IDC_TRAYLEVELDANGER_HINT, 12, 32, 194, 12, SS_CENTERIMAGE + EDITTEXT IDC_TRAYLEVELDANGER_CTRL, 214, 32, 44, 12, ES_AUTOHSCROLL | ES_NUMBER | ES_MULTILINE + CONTROL "", IDC_TRAYLEVELDANGER, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_WRAP, 0, 0, 0, 0 - GROUPBOX "", IDC_TITLE_8, 0, 52, 262, 50 + GROUPBOX "", IDC_TITLE_8, 4, 56, 262, 50 - LTEXT "", IDC_TRAYACTIONDC_HINT, 8, 66, 114, 12, SS_CENTERIMAGE - COMBOBOX IDC_TRAYACTIONDC, 130, 66, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + LTEXT "", IDC_TRAYACTIONDC_HINT, 12, 70, 114, 12, SS_CENTERIMAGE + COMBOBOX IDC_TRAYACTIONDC, 134, 70, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - LTEXT "", IDC_TRAYACTIONMC_HINT, 8, 80, 114, 12, SS_CENTERIMAGE - COMBOBOX IDC_TRAYACTIONMC, 130, 80, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + LTEXT "", IDC_TRAYACTIONMC_HINT, 12, 84, 114, 12, SS_CENTERIMAGE + COMBOBOX IDC_TRAYACTIONMC, 134, 84, 124, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - GROUPBOX "", IDC_TITLE_9, 0, 104, 262, 36 + GROUPBOX "", IDC_TITLE_9, 4, 108, 262, 36 - AUTOCHECKBOX "", IDC_SHOW_CLEAN_RESULT_CHK, 8, 118, 246, 12, BS_MULTILINE + AUTOCHECKBOX "", IDC_SHOW_CLEAN_RESULT_CHK, 12, 122, 246, 12, BS_MULTILINE } @@ -223,20 +225,19 @@ STRINGTABLE IDS_CLEAN "Clean memory" - IDS_GROUP_1 "Physical" - IDS_GROUP_2 "Page file" + IDS_GROUP_1 "Physical memory" + IDS_GROUP_2 "Virtual memory" IDS_GROUP_3 "System working set" IDS_ITEM_1 "Usage" - IDS_ITEM_2 "Free" + IDS_ITEM_2 "Available" IDS_ITEM_3 "Total available" - IDS_SETTINGS_1 "General" - IDS_SETTINGS_2 "Memory cleaning" - IDS_SETTINGS_3 "Appearance" - IDS_SETTINGS_4 "Tray icon" + IDS_SETTINGS_GENERAL "General" + IDS_SETTINGS_MEMORY "Memory cleaning" + IDS_SETTINGS_APPEARANCE "Appearance" + IDS_SETTINGS_TRAY "Tray icon" - IDS_APPLY "Apply" IDS_CLOSE "Close" IDS_TITLE_1 "General configuration:" @@ -257,11 +258,12 @@ STRINGTABLE IDS_LANGUAGE_HINT "Select language:" - IDS_WORKINGSET_CHK "Working set (Vista and later)" + IDS_WORKINGSET_CHK "Working set (Windows Vista and above)" IDS_SYSTEMWORKINGSET_CHK "System working set" - IDS_STANDBYLISTPRIORITY0_CHK "Standby list without priority (Vista and later)" - IDS_STANDBYLIST_CHK "Standby list (Vista and later)" - IDS_MODIFIEDLIST_CHK "Modified page list (Vista and later)" + IDS_STANDBYLISTPRIORITY0_CHK "Standby list without priority (Windows Vista and above)" + IDS_STANDBYLIST_CHK "Standby list (Windows Vista and above)" + IDS_MODIFIEDLIST_CHK "Modified page list (Windows Vista and above)" + IDS_COMBINEMEMORYLISTS_CHK "Combine memory lists (Windows 10 and above)" IDS_AUTOREDUCTENABLE_CHK "Clean when above: (%)" IDS_AUTOREDUCTINTERVALENABLE_CHK "Clean every: (min.)" @@ -292,11 +294,12 @@ STRINGTABLE IDS_SHOW_CLEAN_RESULT_CHK "Show memory cleaning results" - IDS_QUESTION "Do you want to start memory cleaning?" + IDS_QUESTION "Are you sure you want to clean memory?" + IDS_QUESTION_WARNING_TITLE "Warning!" + IDS_QUESTION_WARNING "Switching-on ""Standby list"" and ""Modified page list"" may freeze your computer for almost a minute or so, are you sure enable this option?" + IDS_QUESTION_FLAG_CHK "Do not show anymore" - IDS_TOOLTIP "Physical: %d%%\r\nPage file: %d%%\r\nSystem working set: %d%%" - - IDS_STATUS_CLEANED "Memory was cleaned now with %s saved." + IDS_STATUS_CLEANED "Memory was released with %s result." IDS_STATUS_NOPRIVILEGES "Required administrator privileges, please run program as the administrator!" }