From 004ab7e4f286dbced1de0006be2a97c3892ab6c7 Mon Sep 17 00:00:00 2001 From: Frank Skare Date: Thu, 26 Mar 2020 14:05:31 +0100 Subject: [PATCH] 3.3.0.0 --- Main.ico | Bin 0 -> 819262 bytes OpenWithPPGUI/Main.ico | Bin 0 -> 819262 bytes OpenWithPPGUI/MainForm.vb | 46 +++++++-- OpenWithPPGUI/Misc.vb | 1 + OpenWithPPGUI/My Project/AssemblyInfo.vb | 4 +- OpenWithPPGUI/OpenWithPPGUI.vbproj | 6 +- OpenWithPPShellExtension/Main.cpp | 123 ++++++++++++----------- OpenWithPPShellExtension/Main.h | 7 +- README.md | 9 +- 9 files changed, 121 insertions(+), 75 deletions(-) create mode 100644 Main.ico create mode 100644 OpenWithPPGUI/Main.ico diff --git a/Main.ico b/Main.ico new file mode 100644 index 0000000000000000000000000000000000000000..f49f251953ca59dd58730a2685485bda0f3071df GIT binary patch literal 819262 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

=CBg6+p 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

=CBg6+p ztrIZSdq*rA)LJr7n>F0eL^;Zyj66;?D+EF9AMpMbTm zn3mL91z;YA1apE>VH+0=3}%Kvg~pb%ua)5c5ogj}9{h;}p^(m=MG^vVKDs|kFMdao zLMV%p5&07*6NeT{D471{3O!8y9?HW%JBaqcXx}$W4#fe|JPf8;<(4UI~jfwnIGLn zj9in>aErxby%C`Q*IR$$xIgNfLj3;@yLogoWJ4ixVTl5Z7zF75#i&w-Ac&bGrWi_0t^!OuU9_`$i*WjwhX?}u*g6_z;NUGPZ_2N zDUdBu#>4;JZwBZ@Migi$Xv_ft((#mz2+;rQs5PlP?{Sb2|9{Dy0V+cN6d8B7Grk=l z9Z%_q0R6v?T9eB2H?I-mAt#?3prSDc3X$&4*8`;EDIF1@|JPA#Qh62=cX!wQ0#t;U z9x|T)S9~Hr5Oje4B%Y%Gm#9@OWkT3zq_dRaA+g%CvLJA`j3q$O(YCu*%EvSMAwd7H zpU#AGj0N*DoIe)-V6|sp!FOR9G9GhYpnN>383OeGnkh^!y9j(L!#CdXTBwpPm?uQW zxle}5$O{@FK>x3ivShP*{nJ8x5Au_)9FV(YGsF=K<3j*~2x@bx^pKvB{ zDKeh_5110Fs}Va2krA3=Ah=L9>vMtrUmsmb=5*9vavUSF{e~6fPe-~U8Mis^0tnNx zM(64OHBy#fR>iFRM?yU~`6^}6kA(PtWHe*Z9Rd1(-8CqK|A&7j#4FzagBl9C_*Nm3 z;w@&-1~r7`<(wlx|DSUOnZO=GWy+WmffO_6*U;F+6XXaBSy;42fc{@=^~qrV;FILI z#Ql$}p_5IvmLu%d57!WumvfE){eR9CWCD9Ka-$btVK&;LhQ_cpY}r4B+yWp-_Z~Im z<>fphK>wd-?U=w@kDhATheG_}EB^@H`Ri8Y{1=7Di(B5vF>c9ttQi9I|C%XG9J^RX zE@txorspH6=hVyPh+Ji}TO=%4DN_XK|1*W3ovZV2lH&|dzBH0TcNr%~HzYG0=NND#16J`kY)&xali z?CsqrsvZ}+rf~wN@xr@u{QvaXbtn)i)WzKRAjnR8)*(Bq<_7`#|NQ8}G)_kCEy@S(x^Eo{ z?6;;``CmEW&%C7$*;zF|2+;rMM;E4X(t4X52MA~0XN~$4h)6+VUIE%aP}s-8q8$SC z|Jtcc2E*7ly7X^y93T=q)?21uB}aVR$m)9isTV8OPY40}|Ac^Lv(*t8JzkXe!nX@c)bjRIdT#p+5b89<*Q}50Ya3!230@1|DewmVYegCWz&)YYjHgko6Xs{$FqX z>B;?oK?-?N#LRv-oD6r~5;-71o5!4|r#TwTHT}QA%Fj&nDHn+Hd*6AgK_n-iD+&iV zlP+Bvgo0$5AVB}03G60!3K#MCuSNO2NoO>uPf57|if?mF3g4h9WJE^)pAqopc8k42 zVrG7df(#wrxHg~a5QWC&3mb=ml<6Zt|DQhQhW9x80Z|?gBdD1oDf}t!hHreT`mfy# z9;8hb0s8+`;Woarego8sPel3uv#)JRsghzr7vF{&o(*dXM-n%L0R4YMu#u=i1dcpQ zl=FwjYcli=R)J#qP|wc~U5Mvo%z@Gz-Bl09ptK3cN`vLLS7LyLO{9PT{eKD| zvx_1Ex4$aQ(d~Ow47$ZP5p157G5KRlF=D3}kYN)^BS8P3G{S7Zh`^R3rMWn4VeZ>M z9`(+DQ5rZ`-X9M#Y$Z_y=>HRimyO#9V5-D^IFxa4!!x#U%^nv@8ig_59`i}6DOc-D*^)a{}Di9m8KBDB>Af!N%Q}hv5&VLak?~!@D_0FjCes} zYcV50{~t4;Y_0-<<7W!=YzLoIA!l*p5upE15?!{fR_`Y& z&tq|B8!LaXXfyV5<8uOUl(_q|Xm=Qwn{b; z(9Ld?{@-l@~{=az)*+Lis zr(Ge?`6FCg@72R3Zub1_MFJ7S*MA0uZq_oAp{M^(23NMK)>unn1)%*9DCS_+Jqapz z^mu`YLG`C!nILFvx?u$9{~Lymgw+u^YmQ7;HfrzcayNCgTX*&Rp9JEDm!<&&n?i=f zNgzP~p9HFGbFIPZ^?wWWW6%CUb?ug{dZ*78h#Ou3noN|FEa;}TPXBMJ=986M-iF`e z{MEEs$>N6Ahi<0c{-3~G08&F1HccEoc2E}r^#66i#mZ3-Sbvz62Ug64zby#dGDJ(E z+_hXFdVuko$5H@~UDSa9{eK-`v1&8~zVnn!_jT*b(d2Ks*2EKJ0*G5clj$;>hL#O@ z5TO6}z`-9)Bk|#y?qNvDBznLz{=yEz0`~EiM<8f_KND-wNhxFNfm*4OSCsIL``SO76A-o+=Xp# zDeT~dcNJW5CS}^U#G(o#i9Lr-COXo()5{iUZ(x_+rL_hmFn{=I+FMbTd)Cy}%yhK& zx-xgt7172T*MaM0hAle=0#h#3e&il^J~f#o0)sY?8RxU;qgMPUx%VTIJq4 z_sJ|xmwoSfu=duq`$VcSO9ZZcTzeC$;-Ih&KijhT_LAWR@?#Il7GR@$N3f|X#;?Vt z4K^`agV_p?52IQbNn=bR;7=ZwsR;hI0=+ExGZRE+IfxO`wz1KX2dd}(m?dI1Xk;-YpNz>nCjgpeZbhGHB?2WDReuiTz!|s1_bed=VZ3cz~O!QLM@*z z63xVIpczCLS@xPA+yxfDle;j*$Ij4lkh*WFHIENGKDrIEW^4!`DML-wpUYq$M{Yb1x_b?>1TyrG$$ zG~fU;4ERu8=~!^P>_hqZ<2J{VG6D$Ub>H{3F)chK@ZmpY3qg0&XKQ024Y>Ux3G#gP z?VmohQG1jf5w56$m0zgsMn?sN_2NQc%aLm3e>E83U~;RS;}V+fL`7ia?s}L+P{NcZ7h}e8# z!dC!jlW8K;cRiQ|dgIfa4tAuC+j>;`keJ@%dDrLE9-4Rf?iO-B^Y6C8Q!XlQj;v&{NS*UWmVc~< zZ<}jfh-B`}t8-^vcnW1n8G%i<)-^Ury>1PecJ+!Sa`f4`8=>`L9JF)Ju=3vomkW zg@GZ?aJTODvd{WWA%OiL$juk=2~GEESo4rohWBQaH1Pye6a)i1_3~z*B5flG;E{W3 zTgEnq)oy(9Z$x>`(U`E+%f4+*IJP;kGNQ&q(ZfH>czD_vrf|UMaG4ky5(FSFQwsX^ zb%8iD%4R2BsUmG>_laE~T?uU&~SO%Z1Lr$~z`7dg(H26a;!nVYvR_sF`xW4vU(^P;V8>y=wPAc&q z%=oGY)w)A9#YTI!5pl(wB_(i2h%+{9EA6!g0kA+KF7K*EJD9Rty`KcdX)43UTUx6_ zW1J;`=bybuVU~#{D+I9mU84Z7vAC(3^Rogw=6=^1B0njEPvhTtifaO6wxW8QTWhd2 zBZNFGKGoFq^P!(wvps_g^>)tsaUy_~BsVYK-h}tyi3^nBfh1L7`hXee?$q_qg5MMVQ zAT((O&i{gW#`z5_o5y+vVP(`_#_17vsI#vVrbdcG1kyub`c)=64c*s#hS|q;Pnf7p zOdzum0U}T@0w-T;qPxJ{qtvqA#%jfXOw=i&;js__A`l&c$>*BrC|>`!@Wlq0Yt8?> zee4{*{Xgq_A`1~90#OjaV2OPUYSG{^=S6`><2v}RasLlYR4&$#YZ}K%V{0Sp8X~a& zaY^mq%lR!}(T@av_N_EPr0~Pmww&uC3HI<7pj{mAO7-y!5l9Y!gHJLmT!8Io@O=1{ zuO^3UzFIzOj*0#sy2dSl-vaVwi{vIZ2uwc5&?kR*1}t+mr>xT3pxiz7E#5xBnsXK+ zKm^Ui4RH^D9vh1Q20{)KI;VLL+Vfx&m2X;H zIG;sbcryb;m}vHt*^L04|GD2W_sJhV;hM+Xco=ltZ-By!kIyR_^%HkMeUtkbWT_N2 z83Yj6ZPwjJdw`|yt2Nh223#Fl-TQE(wU3+KjnApo`s$!6@<;??MWFZUYVKmwhyOm4 zV#QR$#_;-M)H8pjut+Azlrb7wE?I6I0VH#2GBkJPIMVLS+$S3cPz)uq1K=e{JKe?0 zFcKTd$n_(}EGbBG2p}imvwtvs$iMVgg%lMmKw!*)rW*t9Ca->^b{R)=AOgY>*m-?Iw62uc++QdfLjPW@^gg^uq-|VHs4;o@hL6DLI59zkg1A=2*^MHE8ONh z!l7*;fY+Z9JIc^%{8CK0kVaBM;PGGci*Wn~#un2@V3Vzl4)y|{@BW9p1}tF+;3aYX zOCGq~(3y6;{9`qKau`%RPXshT;Oj@I*Z##3T|(g2m$~1whS3gOPc8i$4aPxW=6oZf zg4Zw$Ue*l(?CnLIL(`tws>u8D-_@WEbkkxM{304s6&MY?blWRxz@RKN!9IyVLkRR= zn=kTyC$`sN4MAxn(Paz#=o#qt-6CVZ%yy%VGzAK+8v+RJ`~06cemw}Z-lm%tGvyZx z1|Io^2SB$oH1ilq)24lkb3vKfB|EQ*K#!i*oDWi2nK?qkq<-k93hUch>Ox@XW@_0# zX-Iwq?s-cUHmwUtRwe>zAb5@^_&i zSHJ(7aCP<~z6dmLWo)571p2I@urmeo8zu~~24sBt_X=-DEU_Sfh#4zBp{0c)fHazz zfMp>9=^!wAJOlWL4o2K8R{Te8u|qnlFr}A?CsqTzfg7|u5=4z-9x+qKLq>8UWy#eK zb0pS4;D9L^sYi6T%n?xYp7qKvd&LGj8}cE5*H3&{F~Ns7 zDI>y+6&4KkG#Rc_^@@mx(!|j7Ka}VVtgd4Xob!*i45=dQsHDI*6o-=^(73 zWg!CfA^@|&gwKobajZo`05fC5wyGCn)^7xX9d_dbNhF&r-T{$s?rZxrf-`B1MPTIa zYSEACurb4*weY&V)1Jl}O9p}?k+k6^SFiYU7pwI)&OlS_QZEEH*hFDRNxjx(a(!%q zV4kM*jU0QcO}4rQWXB$gZ(gI;Tqk{9u}2LM7%)(seI4Jd>-H)qU7~?<<*|qbX-pH) zz+C|O_|BQDFxXj$KoJ3Kv7g$;wVic)evG~=?o)6?ESVsHc;k!?)W9tOB#73CbsgBn z&tftHz5A$R&QsVn(wG$)PKAZmTo&f^LNCMB_ z{z2o$W4QCjvI;DYWyu@?eAeVDwPpt6OMkUo0q+8tTXH%Kz-vvpKrMZrp1*Mf5OHhB zhUut_z0^hk0pgf`qM2I&Xz?y^_O)u=p|#Ow4NVb%%fhE0j+7=x3Z~08-(FJ_5X&}J zEFje+KHKh4d2dMEb-Ro93agi@cO^icB9QSqP$DJ+y1ohX3g8a z10vqb*h84WBJVa|oj*hZM6Bj{OJcJM+dRxXKpYHirL1mp*3Ps?=i#ZUILI5wqNCLIXIMuyJDE_>V4gyfYuKTGukMhe` zQr3=}$YH0ZqfGV^CjzHjmY_+*^=P4WJJ>yhRVA1d<&7Xt!;R2Z*KTT?U982NFT6`5 zPZoh=XGG8ktK<>^#)wPj{(?jU#Tx;04J0}au%4&r_Obsc9nBiv%gL7}s!ukaI0DmW zbEKq)z>+_!88;{-Xy6+`jFt^BvAt!+jf!qR&HE815Lg5tfKQfbnhpB`0*Eq-W#`B~ zHnwWsj02mD4o3~fdH09q;Ep(v53Ip-&)Ct@tJ_Z5^LHv zCeSd$gP?r(uH;UZY{o2B`(O<@i!cQ69fuA%TLch!2Eiquh;4UOJy#KCUyX~?YgG%7 z`J-%mF4Qqru$H zm;=>WbJShS71q<{L@9=|0Yz|=SDqbs^SmKI1a9$$+j$PfN2G#F@3KM`VEbzSwVT&- z?pi?FO{55ifDn_rv~p;Hh#txC4!IjP2`~gLGg4>{2cVlJ>?}Y4I;?M>c%n5QzDn-| z>>$Y|v0`WAEv*20SbKmeFMI)UOUL89A%Li!qxMSDAlP=E5WqtwqoC()3|8R>fs3E` zjk@^-bVj)rq*6J`*=i%w*xl73|KmTrn>l6i%GD`NXu2UnYT-b=MN3C z7=-{*#xQGG-bP}*{2>KxQ!0Z>SIdLRPVJp@LVZ5BMwY(wl@XwgWQD6TZ1LsH| z|J`;Db0Rj#*VGzo#o$BOgw_aPQxab1^Y&yyeuw}ONDcw)s^$(9t^Ib4%;PH_ zV?-o3*4Q!;$Q1(kf`cK?LIm6hVBa5i;^bZ+`uDsA5CI|}3V~<;V6Ee2Ap$iKz>XfQ3CzP2 z3wa;{M4)*D7OYUnkIX^@A|ilAK{IdREr19R0qqe$X1XS~0Y-EhtR@TrWZzi+vG(@g z{Noc_AOboffZf>>PY~vlC{C&f4Bt*Y`8(bMhyW4L41s6Vn5m>FS!iutZ zO_!|^0V2>00&RDw-m51%?%6mIa1g+2=F-3ME?9M>|QDi4gS8seuH%J7CK&l8Jk|$!eV__Z(5y%#SEp}iY z$yCR_fCpEK&e&fhY)I^#womI|M9p2Ci19~xG-4ehAQgdY9#d-#t{87T zK?L%L!07P``6i@}M9M`3(nMg%UlbzovJe4{5a_dpnmL~#gLo4p0!<+>dy(olK%;R_ zR*8Uvz;>g#G^nZJpXPHW`^pspi+`(-kDG-EXpI1t1|fFn$}i{!i2xCZgaFp|V>R8X zt7$#%$vhEo5J2wfdsjv>{#-qSkr^V8G6E0$P;EKV88|#50x}Tj-a}2fK&|)>?*c@C z2m~O2T&t7MW$1nx-i}fPBe34a3ZJx6ex_n~L?Gt~VAb@H4TFaa&k_M)2<*5A^9b-J zNCYed7Jg4*nFI?FFbV-o2O)MGG8X0h!Hnz?frJpiW_b(&#&9#r?@?Gc0@yE%)D1)6MCLxvsxg4seXI~V<7@Wz>NTQyDa(< z?*c?XECP@GTzzdHx5@LE2oM1Wfo|Q^#1qsr|0mW1Xz_qbCSyn7>EEmUkKC2{U${Cjvwu00AVqz`#Lz>y!s9yCVXz zAn@u(R^*e_`vurGPZ0qk5CwrX*0S=P@-7gIM`9!CAOO#g06qf-Mlo>KAp%681_B6y zi@N~wAEh&X*$WY941wY^f4?&xfAOe{qFnl{J-7u32 zM0{{%wZ;&5<5Meo`PQQ{w|6o?1c-nifwk9F(`Km`-%IsTurW_UD!mYR;azL(!CHg; zCdc1IfC%IY0el)5dx)C1gm(cV5Ca0pTZ-N2NMp@H1c-n}2n-!=ZNO~*AO-pMKvAOd~_uwE1~H_2tUF?1c-nb1cq*A zteG!K)wENb;W&Z z*L@kB**{YFn+OO-0AKX*nHb5K-u#Si&^QEEexWeWgAcoy9%LZ`M8H@C5U26*(-d~} zFb%Q1SskB5aQnButPY)~`mb%Qy;E=^Km-C1K&)xRl;9hI&u0qwS$x_@tOhRN53qZl zA_7Ffg#f}$BU|4!kEz%GW!%Jw0B>)L0QJpzL`^tGF(9+cx_L+hh(II+5ZVh_>9H(? ztA=c+n*W2RI;^GpqsKEcTO=cAB_cosY9fHGK$Fk4wiPqVP!4YaSj~0gbL!}`)v&E< zYLXR*01+Sp4I+SrLpzUE)2~wZeP6x(KTZ&3h5)|TFZ`aGKHGXnV-V&Bt(jy*fCw~- z09Fse`5?*!787zEX$tQJ_>%k3Pp#=4tlh=;dKMx;1c*Q$5Lm6R+GU)Y_ANF4C57lQ zDL6wzx>)v4b@K~WWY@3l!{z#Uuypc31c*R21iE&!CZZ2KUR`{vTJ$6J*5|w()PVrt zdf}r?mg7TTUwh7u#^ZhMTj|I$fJ8iF)?+9S)I!k zSm_kE*+s3=JLmc&dqjW;5P`-KK&l#iIDosuR5tDiMr|}e7A<&tB+^1SK1}1|&WP6~ z79v0dh=7?0zyS`~&{|e>@JZ^-tJR!G)uJCuh){=RnV9~9IA?rY9W>Rt<*hrE^EqbP zIHe{6M4&zd5T<7MwyI@ww)GbS`hv!`7xCAo~{={Nz*4-A9U=@3>Hrs~l zbL!JIYZCz?Km;NpfNu(zM1q?gwU-)us1?fcnDf+WSEvi-smm9tYah3^sv+wQ(icAd zYxU&stUPG;Ki^VS{IoCOVDUQ^2?#-sM$i-*JpU$j>gCoBICO+b8@#GuLmU`DJZ%;t zpeF)fRx53mOkJwgsCuo8NYzT=7t7>Ih1aQarNg1`R;60lrB57kr3zuS!q2X!*Xt(+bDiKX6 zh_raFlGlJUA=>fuIJGN}A^^}&BfwV`z#4) zXRBDSw_?~Y2QS}I1nafhZ1IuVKO@0kMFElEukskt9wxE(e5eB2y!FC#VY5#bM2Kt%XM70}_AGwgSW3u+Im?>`@+z&3xqu;0N7j0}H>0wRtc zi>a2f%G`e=t1m=>k<}NXz>Wa8fOLDn=|BYrR4iEX1;`bsz_yBxI?00?2vlGNxy@xq z#U+a`U#V2TQ=x*s)wxzas!+e{K2f2XmNJ#|w*n^T(wATQ87R0f7LWaXxVr!H%c>WP z^nQ?9-Cg*>v7vP;wR?H=skr)8tCcn{eZgtjI`W|tU;tk7iYcoam%sE$SRr7Cw}DnK zdtZL(Q-8sK-6udxjqCo)eiJD8D|j{RL*J_0?h(La9oA*9dL_Q0EKeT#lIf&@m(v|^z`8~AP=}LWeV?KkBmMZ+ugEx z$(&#AIz9txb6xXYa_HM#m3$bx>3ys@^c~^!t}CkGP6jlE!_;r70IuZ8mw>yJ@)%mjYb|?4mDM4EyW! z85uO^;hkz<$o1zFP_DJ3&n06dLOGLU|LJul>T)1=^cykK^072QQbLF z@b**!rp0^KVYk$s!%%R|f|uTbyCiNXeTgxjR2B5?HXyCuo`UHeb1SLKq4$!1Sz^qm z6=yQ0MBi5K-*0}UhW%FIukZhDa}kkVm5aZl5c<+-P!)SBlZTBIzgQhMK_|U~ryr=c zV#RR!R;vMr-lu3A=+17O|2X#AYMpfKp(I9;^XVQuhxXrI?$Jx%`OAetD81cdCxy4Qy68JOw(0%mAKJf-cqe_EDwX=_ zI}x|(3ohQR!_fY1i}TXAM5VV!OecMregDHpc>gwirvtO;Tch@G3ue(fKN_G1i9_$} z-nrs$*cpH^(A!}6hfkIMZI!pU++VZw{^3`p|Ms%Z(7$a=jnEfd^#0*nrT>m{|1r?p zgV8_ys`T%saUXx_DYj*`dQRhqo5nsa_-lpJ+n9rAHx}L&BG3bKo4&Rs z9C(?&!hKZhzr9SAIlXO474EAV{~cxiTXRES;r^=eZ#%74+Z8lM-x3>rp`P($J5Z

L?xPO5a}Mzw-7~ReqbyKB!NBHko~(Ieq2rvnqZas#v;}<&TlR)O5ff z2jh;?)oyL21E+u6BbBbW{y6u@j?&pKZKVT;zP)rN;E!Wu9i^+4^tNjapm)CRRnXh4 z*|(M;`j#>RWg+eUZTj++AaZ99SGiUteVMaBdK;y1`u0G=(n%Y@aQbTGK%xCNOW)@0&;P4@n+)y0S$cnm{@-C{Qr4fpzW;Yp^ex4P zYYabo096bVA@mh;`SCBwSy3?h*$Z%c{3 zg3U(h+e-YE>1#NUR$u=W&;Rz!j#uvTuM)Za1*np~y<9cuZ`u5+(02sUmCu#UrwV-q zvSnK9ZyBX3^c8nDH+@T}{5EG*70_Cy?=Me|Fx~w>AyjGyOYM~TW$Kv8=!ru zl7HK4WKM72?JIA9RrqgLrIPvj1)Kl!o0V-N)%&(R!b-#G?JIH8xA+CHd#T{eb{govqbz?T^cb|U(HElgZ@XXgZ@aQa z=;5?%`U(dYj-Q*xee9JW8ogVVsPs1GkU2K`3I`U>e|y#hs9ngm`YzZe@1^$-;L!fHPyRl)lYF??uz4s@n9Oh}-o30TfDK?!Gu3 zWm`l2^aYDshrZSN>6Ebk?enT&Rdz;0i}ll0%6z&`S%*FX-%nTNdg%);TI(=`-Y2jl zj(-4z&^roiwR#DsZ!0$7w<{mL&1Qr9*BpBP0B8^HzjPWGE%secpngV675&Y&fwHrd z>bI4CR&3R6FJ7ocU#f=6MSkr6b`O6{=&MBEVbixn zp?B=H#8@bO$h^TN8CcOVTazY z=_0V+?wuEgqWf_B13!J6)j)_<;z~=gWd~4y)eei^CzSKTRi<|g!f$|`Q29W0hMWDs zVf9ihtzKC>ktul31@u;?wk0Z4bk=Px|0@1sqq$nIUvcRDvUXI$ z=a`R8->%BVk2RQW@v(#^OU2f9d-+UxL^~vr;umy;(>pDdkDShIW&=bj*RK5AW_MzI@7c2duaSIdw`$4!NrJ z6rK|J>j+sCfs@HFhuT1Rd+3+_v9dXHf4N*W9!~GR3+1!LzaHLv*p_Ryx#?TVX9MVi zEy!a%Uh{LmLTbL9*n7P~fEt&522de@kNpbu`|0M}AAtA(l; zi(U96^gaoDxvxOSYQf_{tokk!^LJmV{t5#?14X{9|N6TR8ef%_>@m_&LGLu}9JN){ zDikkPAQS8#+AHXbqo9)9Zyd#LIx6X{iUG}5jt;AZ3XlWZE1hzwrr5Xj-vB}`B%Z@IZ?&*rA?k~)z!3FC9zh}SM^-?=Bed&B#1Yiu zBJm!EA?7{rrE&ji^HvQ06$*bu1%$#MQ30XwM^r$;EwT4F(g# zOjY625*s-8Wvb6)(Zb` zjUn6`PFcFr<`&m~T*G>-COZ5y?%y@6$D*$aK*6d}y;KFDwK{F*)iyW7-s1@3R|Oz~ z_*DTYL|{MQZNU~I5_$M@U`^vMwjVkKY8ro$K2(FP(fD_L;j|^U4kBsK>LNsdi0lWv z3KrRDiO7D)lYC_MLj;J-e$cxpBxsGye&B;pMB^!T65s?1b#xzqU>)dL9aWe>9q4s3 zT2#67-@3T3WT4*e{a&En?tN~kP(Qu Private Sub InitializeComponent() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainForm)) @@ -98,6 +99,7 @@ Public Class MainForm Me.bnArguments = New System.Windows.Forms.Button() Me.PropsFlowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() Me.cbHideWindow = New System.Windows.Forms.CheckBox() + Me.cbHidden = New System.Windows.Forms.CheckBox() Me.tlpMain = New System.Windows.Forms.TableLayoutPanel() Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() Me.tlpSearch = New System.Windows.Forms.TableLayoutPanel() @@ -209,7 +211,7 @@ Public Class MainForm ' 'cbRunAsAdmin ' - Me.cbRunAsAdmin.Location = New System.Drawing.Point(25, 152) + Me.cbRunAsAdmin.Location = New System.Drawing.Point(25, 218) Me.cbRunAsAdmin.Margin = New System.Windows.Forms.Padding(25, 3, 3, 3) Me.cbRunAsAdmin.Name = "cbRunAsAdmin" Me.cbRunAsAdmin.Size = New System.Drawing.Size(600, 60) @@ -227,7 +229,7 @@ Public Class MainForm Me.lv.Margin = New System.Windows.Forms.Padding(18, 0, 0, 0) Me.lv.Name = "lv" Me.tlpMain.SetRowSpan(Me.lv, 6) - Me.lv.Size = New System.Drawing.Size(518, 815) + Me.lv.Size = New System.Drawing.Size(518, 880) Me.lv.TabIndex = 1 Me.lv.UseCompatibleStateImageBehavior = False ' @@ -392,18 +394,19 @@ Public Class MainForm Me.tlpMain.SetColumnSpan(Me.PropsFlowLayoutPanel, 3) Me.PropsFlowLayoutPanel.Controls.Add(Me.cbSubmenu) Me.PropsFlowLayoutPanel.Controls.Add(Me.cbDirectories) + Me.PropsFlowLayoutPanel.Controls.Add(Me.cbHidden) Me.PropsFlowLayoutPanel.Controls.Add(Me.cbRunAsAdmin) Me.PropsFlowLayoutPanel.Controls.Add(Me.cbHideWindow) Me.PropsFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown Me.PropsFlowLayoutPanel.Location = New System.Drawing.Point(536, 643) Me.PropsFlowLayoutPanel.Margin = New System.Windows.Forms.Padding(0) Me.PropsFlowLayoutPanel.Name = "PropsFlowLayoutPanel" - Me.PropsFlowLayoutPanel.Size = New System.Drawing.Size(1718, 350) + Me.PropsFlowLayoutPanel.Size = New System.Drawing.Size(1718, 415) Me.PropsFlowLayoutPanel.TabIndex = 16 ' 'cbHideWindow ' - Me.cbHideWindow.Location = New System.Drawing.Point(25, 218) + Me.cbHideWindow.Location = New System.Drawing.Point(25, 284) Me.cbHideWindow.Margin = New System.Windows.Forms.Padding(25, 3, 3, 3) Me.cbHideWindow.Name = "cbHideWindow" Me.cbHideWindow.Size = New System.Drawing.Size(600, 60) @@ -411,6 +414,16 @@ Public Class MainForm Me.cbHideWindow.Text = "Run hidden" Me.cbHideWindow.UseVisualStyleBackColor = True ' + 'cbHidden + ' + Me.cbHidden.Location = New System.Drawing.Point(25, 152) + Me.cbHidden.Margin = New System.Windows.Forms.Padding(25, 3, 3, 3) + Me.cbHidden.Name = "cbHidden" + Me.cbHidden.Size = New System.Drawing.Size(600, 60) + Me.cbHidden.TabIndex = 3 + Me.cbHidden.Text = "Show only if Ctrl key is pressed" + Me.cbHidden.UseVisualStyleBackColor = True + ' 'tlpMain ' Me.tlpMain.ColumnCount = 4 @@ -453,7 +466,7 @@ Public Class MainForm Me.tlpMain.RowStyles.Add(New System.Windows.Forms.RowStyle()) Me.tlpMain.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) Me.tlpMain.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.tlpMain.Size = New System.Drawing.Size(2254, 1104) + Me.tlpMain.Size = New System.Drawing.Size(2254, 1169) Me.tlpMain.TabIndex = 17 ' 'FlowLayoutPanel1 @@ -464,7 +477,7 @@ Public Class MainForm Me.tlpMain.SetColumnSpan(Me.FlowLayoutPanel1, 2) Me.FlowLayoutPanel1.Controls.Add(Me.bnOK) Me.FlowLayoutPanel1.Controls.Add(Me.bnCancel) - Me.FlowLayoutPanel1.Location = New System.Drawing.Point(1758, 993) + Me.FlowLayoutPanel1.Location = New System.Drawing.Point(1758, 1058) Me.FlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(0) Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" Me.FlowLayoutPanel1.Size = New System.Drawing.Size(496, 111) @@ -564,7 +577,7 @@ Public Class MainForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(288.0!, 288.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.ClientSize = New System.Drawing.Size(2254, 1104) + Me.ClientSize = New System.Drawing.Size(2254, 1169) Me.Controls.Add(Me.tlpMain) Me.Font = New System.Drawing.Font("Segoe UI", 9.0!) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog @@ -676,8 +689,14 @@ Public Class MainForm Sub tbFileTypes_TextChanged(sender As Object, e As EventArgs) Handles tbFileTypes.TextChanged If Not BlockEvents AndAlso Not SelectedItem Is Nothing Then Dim value = tbFileTypes.Text.ToLower - If value.Contains(",") Then value = value.Replace(",", " ") - If value.Contains(";") Then value = value.Replace(";", " ") + + If value.Contains(",") Then + value = value.Replace(",", " ") + End If + + If value.Contains(";") Then + value = value.Replace(";", " ") + End If While value.Contains(" ") value = value.Replace(" ", " ") @@ -806,6 +825,7 @@ Public Class MainForm cbDirectories.Checked = SelectedItem.Directories cbRunAsAdmin.Checked = SelectedItem.RunAsAdmin cbHideWindow.Checked = SelectedItem.HideWindow + cbHidden.Checked = SelectedItem.Hidden Else PropsFlowLayoutPanel.Enabled = False tbArguments.Enabled = False @@ -877,7 +897,7 @@ Public Class MainForm i.Name.ToLower.Contains(query) OrElse i.Path.ToLower.Contains(query) OrElse i.WorkingDirectory.ToLower.Contains(query) OrElse - i.FileTypes.ToLower.Contains(query) OrElse + i.FileTypesDisplay.ToLower.Contains(query) OrElse i.Arguments.ToLower.Contains(query) Then lv.Items.Add(i.Name).Tag = i @@ -972,6 +992,12 @@ Public Class MainForm End If End Sub + Private Sub cbHidden_CheckedChanged(sender As Object, e As EventArgs) Handles cbHidden.CheckedChanged + If Not BlockEvents AndAlso Not SelectedItem Is Nothing Then + SelectedItem.Hidden = cbHidden.Checked + End If + End Sub + Sub SetCue(tb As TextBox, value As String, hideWhenFocused As Boolean) Const EM_SETCUEBANNER = &H1501 Native.SendMessage(tb.Handle, EM_SETCUEBANNER, If(hideWhenFocused, 0, 1), value) diff --git a/OpenWithPPGUI/Misc.vb b/OpenWithPPGUI/Misc.vb index 9e9149a..f6e88a1 100644 --- a/OpenWithPPGUI/Misc.vb +++ b/OpenWithPPGUI/Misc.vb @@ -109,6 +109,7 @@ Public Class Item Public FileTypes As String = "" Public FileTypesDisplay As String = "" Public HideWindow As Boolean + Public Hidden As Boolean Public IconFile As String = "" Public IconIndex As Integer Public Name As String = "" diff --git a/OpenWithPPGUI/My Project/AssemblyInfo.vb b/OpenWithPPGUI/My Project/AssemblyInfo.vb index 012fd12..0b2f347 100644 --- a/OpenWithPPGUI/My Project/AssemblyInfo.vb +++ b/OpenWithPPGUI/My Project/AssemblyInfo.vb @@ -29,5 +29,5 @@ Imports System.Runtime.InteropServices ' You can specify all the values or you can default the Build and Revision Numbers ' by using the '*' as shown below: - - + + diff --git a/OpenWithPPGUI/OpenWithPPGUI.vbproj b/OpenWithPPGUI/OpenWithPPGUI.vbproj index e347333..98cb065 100644 --- a/OpenWithPPGUI/OpenWithPPGUI.vbproj +++ b/OpenWithPPGUI/OpenWithPPGUI.vbproj @@ -7,8 +7,7 @@ {352818B6-523C-4143-9BB6-9C263E73D0A6} Debug AnyCPU - - + Main.ico OpenWithPPGUI @@ -168,6 +167,9 @@ + + + diff --git a/OpenWithPPShellExtension/Main.cpp b/OpenWithPPShellExtension/Main.cpp index 6c14d6b..dddf592 100644 --- a/OpenWithPPShellExtension/Main.cpp +++ b/OpenWithPPShellExtension/Main.cpp @@ -167,10 +167,10 @@ BOOL DirectoryExist(std::wstring path) HRESULT CMain::LoadXML() { - for (Item* item : Items) + for (Item* item : g_Items) delete item; - Items.clear(); + g_Items.clear(); TCHAR path[MAX_PATH]; SHRegGetPath(HKEY_CURRENT_USER, L"Software\\" PRODUCT_NAME, @@ -251,11 +251,13 @@ HRESULT CMain::LoadXML() item->RunAsAdmin = (cNodeText == L"true") ? true : false; else if (cNodeName == L"HideWindow") item->HideWindow = (cNodeText == L"true") ? true : false; + else if (cNodeName == L"Hidden") + item->Hidden = (cNodeText == L"true") ? true : false; else if (cNodeName == L"Sort") item->Sort = (cNodeText == L"true") ? true : false; } - Items.push_back(item); + g_Items.push_back(item); } return S_OK; @@ -269,7 +271,7 @@ STDMETHODIMP CMain::Initialize( { FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; STGMEDIUM stg; - ShellItems.clear(); + g_ShellItems.clear(); if (pDataObj) { @@ -288,7 +290,7 @@ STDMETHODIMP CMain::Initialize( { TCHAR buf[MAX_PATH]; DragQueryFile((HDROP)stg.hGlobal, i, buf, MAX_PATH); - ShellItems.push_back(buf); + g_ShellItems.push_back(buf); } ReleaseStgMedium(&stg); @@ -300,7 +302,7 @@ STDMETHODIMP CMain::Initialize( if (!SHGetPathFromIDList(pidlFolder, buf)) return E_FAIL; - ShellItems.push_back(buf); + g_ShellItems.push_back(buf); } else return E_FAIL; @@ -312,7 +314,7 @@ STDMETHODIMP CMain::Initialize( STDMETHODIMP CMain::QueryContextMenu( HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd, UINT uidLastCmd, UINT uFlags) { - if (Items.size() == 0 || SHRegGetBoolUSValue( + if (g_Items.size() == 0 || SHRegGetBoolUSValue( L"Software\\" PRODUCT_NAME, L"Reload", FALSE, TRUE)) { REGISTRY_ENTRY re = GetRegEntry(HKEY_CURRENT_USER, @@ -329,47 +331,52 @@ STDMETHODIMP CMain::QueryContextMenu( } UINT command = uidFirstCmd; - HMENU popMenu = CreatePopupMenu(); + HMENU subMenu = CreatePopupMenu(); + bool addSubSep = false; + bool isCtrlPressed = GetKeyState(VK_CONTROL) < 0; + bool isFile = FileExist(*g_ShellItems.begin()); + bool isDirectory = !isFile && DirectoryExist(*g_ShellItems.begin()); - BOOL isFile = FileExist(*ShellItems.begin()); - BOOL isDirectory = !isFile && DirectoryExist(*ShellItems.begin()); + g_EditCommandIndex = -1; - int res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION | MF_POPUP, (UINT_PTR)popMenu, L"Open with++"); + int res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION | MF_POPUP, (UINT_PTR)subMenu, L"Open with++"); + int subMenuIndex = uMenuIndex; if (!res) return E_FAIL; uMenuIndex += 1; - for (UINT i = 0; i < Items.size(); i++) + for (UINT i = 0; i < g_Items.size(); i++) { - Items[i]->CommandIndex = -1; - std::wstring ext = GetExtNoDot(*ShellItems.begin()); + g_Items[i]->CommandIndex = -1; + std::wstring ext = GetExtNoDot(*g_ShellItems.begin()); - if (isFile && Items[i]->FileTypes != L"" && ext != L"" && - (L" " + Items[i]->FileTypes + L" ").find(L" " + ext + L" ") != std::wstring::npos) + if (isFile && g_Items[i]->FileTypes != L"" && ext != L"" + && (L" " + g_Items[i]->FileTypes + L" ").find(L" " + ext + L" ") != std::wstring::npos + && (!g_Items[i]->Hidden || (g_Items[i]->Hidden && isCtrlPressed))) { - Items[i]->CommandIndex = command - uidFirstCmd; + g_Items[i]->CommandIndex = command - uidFirstCmd; - if (Items[i]->SubMenu) + if (g_Items[i]->SubMenu) { - res = InsertMenu(popMenu, -1, MF_BYPOSITION, command, Items[i]->Name.c_str()); + res = InsertMenu(subMenu, -1, MF_BYPOSITION, command, g_Items[i]->Name.c_str()); if (!res) return E_FAIL; - SetIcon(hmenu, command, Items[i]); + SetIcon(hmenu, command, g_Items[i]); addSubSep = true; } else { - res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION, command, Items[i]->Name.c_str()); + res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION, command, g_Items[i]->Name.c_str()); if (!res) return E_FAIL; - SetIcon(hmenu, command, Items[i]); + SetIcon(hmenu, command, g_Items[i]); uMenuIndex += 1; } @@ -379,37 +386,39 @@ STDMETHODIMP CMain::QueryContextMenu( if (addSubSep) { - addSubSep = false; - res = InsertMenu(popMenu, -1, MF_BYPOSITION | MF_SEPARATOR, command, L""); + res = InsertMenu(subMenu, -1, MF_BYPOSITION | MF_SEPARATOR, command, NULL); if (!res) return E_FAIL; } - for (UINT i = 0; i < Items.size(); i++) + bool addSubSep2 = false; + + for (UINT i = 0; i < g_Items.size(); i++) { - if ((Items[i]->FileTypes == L"*.*" && isFile) || (Items[i]->Directories && isDirectory)) + if ((g_Items[i]->FileTypes == L"*.*" && isFile) || (g_Items[i]->Directories && isDirectory) + && (!g_Items[i]->Hidden || (g_Items[i]->Hidden && isCtrlPressed))) { - Items[i]->CommandIndex = command - uidFirstCmd; + g_Items[i]->CommandIndex = command - uidFirstCmd; - if (Items[i]->SubMenu) + if (g_Items[i]->SubMenu) { - res = InsertMenu(popMenu, -1, MF_BYPOSITION, command, Items[i]->Name.c_str()); + res = InsertMenu(subMenu, -1, MF_BYPOSITION, command, g_Items[i]->Name.c_str()); if (!res) return E_FAIL; - SetIcon(hmenu, command, Items[i]); - addSubSep = true; + SetIcon(hmenu, command, g_Items[i]); + addSubSep2 = true; } else { - res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION, command, Items[i]->Name.c_str()); + res = InsertMenu(hmenu, uMenuIndex, MF_BYPOSITION, command, g_Items[i]->Name.c_str()); if (!res) return E_FAIL; - SetIcon(hmenu, command, Items[i]); + SetIcon(hmenu, command, g_Items[i]); uMenuIndex += 1; } @@ -417,21 +426,26 @@ STDMETHODIMP CMain::QueryContextMenu( } } - if (addSubSep) + if (addSubSep2) { - addSubSep = false; - res = InsertMenu(popMenu, -1, MF_BYPOSITION | MF_SEPARATOR, command, L""); + res = InsertMenu(subMenu, -1, MF_BYPOSITION | MF_SEPARATOR, command, NULL); if (!res) return E_FAIL; } - res = InsertMenu(popMenu, -1, MF_BYPOSITION, command, L"Customize Open with++"); + if (addSubSep || addSubSep2) + { + res = InsertMenu(subMenu, -1, MF_BYPOSITION, command, L"Customize Open with++"); - if (!res) - return E_FAIL; + if (!res) + return E_FAIL; + + g_EditCommandIndex = command - uidFirstCmd; + } + else + DeleteMenu(hmenu, subMenuIndex, MF_BYPOSITION); - EditIndex = command - uidFirstCmd; return MAKE_HRESULT(SEVERITY_SUCCESS, 0, command - uidFirstCmd + 1); } @@ -444,18 +458,18 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) HWND hwnd = GetActiveWindow(); WORD id = LOWORD(pCmdInfo->lpVerb); - for (UINT i = 0; i < Items.size(); i++) + for (UINT i = 0; i < g_Items.size(); i++) { - if (id == Items[i]->CommandIndex) + if (id == g_Items[i]->CommandIndex) { PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {sizeof(si)}; - std::wstring args = Items[i]->Arguments; + std::wstring args = g_Items[i]->Arguments; if (args.find(L"%items%") != std::wstring::npos) { - std::wstring joined = L"\"" + JoinList(&ShellItems, L"\" \"") + L"\""; + std::wstring joined = L"\"" + JoinList(&g_ShellItems, L"\" \"") + L"\""; CString argh = args.c_str(); argh.Replace(L"%items%", joined.c_str()); args = argh.GetBuffer(); @@ -463,7 +477,7 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) if (args.find(L"%paths%") != std::wstring::npos) { - std::wstring joined = L"\"" + JoinList(&ShellItems, L"\" \"") + L"\""; + std::wstring joined = L"\"" + JoinList(&g_ShellItems, L"\" \"") + L"\""; CString argh = args.c_str(); argh.Replace(L"%paths%", joined.c_str()); args = argh.GetBuffer(); @@ -471,9 +485,9 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) WCHAR szDir[MAX_PATH]; - if (ShellItems.size() > 0) + if (g_ShellItems.size() > 0) { - std::wstring firstItem = *ShellItems.begin(); + std::wstring firstItem = *g_ShellItems.begin(); if (FileExist(firstItem)) { @@ -488,13 +502,10 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) std::wstring verb; - if (Items[i]->RunAsAdmin || - (GetKeyState(VK_CONTROL) < 0 || GetKeyState(VK_SHIFT) < 0)) - { + if (g_Items[i]->RunAsAdmin || GetKeyState(VK_SHIFT) < 0) verb = L"runas"; - } - std::wstring path = Items[i]->Path; + std::wstring path = g_Items[i]->Path; std::wstring var(L"%"); if (path.find(var) != std::string::npos) @@ -542,12 +553,12 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) shExecInfo.lpFile = path.c_str(); shExecInfo.lpParameters = args.c_str(); - if (Items[i]->WorkingDirectory.length() == 0) + if (g_Items[i]->WorkingDirectory.length() == 0) shExecInfo.lpDirectory = DirectoryExist(szDir) ? szDir : NULL; else - shExecInfo.lpDirectory = Items[i]->WorkingDirectory.c_str(); + shExecInfo.lpDirectory = g_Items[i]->WorkingDirectory.c_str(); - shExecInfo.nShow = Items[i]->HideWindow ? SW_HIDE : SW_NORMAL; + shExecInfo.nShow = g_Items[i]->HideWindow ? SW_HIDE : SW_NORMAL; shExecInfo.hInstApp = NULL; ShellExecuteEx(&shExecInfo); @@ -555,7 +566,7 @@ STDMETHODIMP CMain::InvokeCommand(LPCMINVOKECOMMANDINFO pCmdInfo) } } - if (id == EditIndex) + if (id == g_EditCommandIndex) { TCHAR path[MAX_PATH]; SHRegGetPath(HKEY_CURRENT_USER, L"Software\\" PRODUCT_NAME, diff --git a/OpenWithPPShellExtension/Main.h b/OpenWithPPShellExtension/Main.h index b56b429..abf3a9d 100644 --- a/OpenWithPPShellExtension/Main.h +++ b/OpenWithPPShellExtension/Main.h @@ -29,6 +29,7 @@ class Item bool Directories; bool RunAsAdmin; bool HideWindow; + bool Hidden; bool Sort; int CommandIndex; @@ -37,9 +38,9 @@ class Item ~Item(); }; -std::list ShellItems; -std::vector Items; -int EditIndex; +std::list g_ShellItems; +std::vector g_Items; +int g_EditCommandIndex; // CMain diff --git a/README.md b/README.md index 2a7e466..5fda20e 100644 --- a/README.md +++ b/README.md @@ -110,9 +110,14 @@ Specifies if the menu is created on top level or as sub menu. Specifies that the menu command is shown when folders or the folder background is selected. +### Show only if Ctrl key is pressed + +The menu item is only visible if the Control key is pressed. + + ### Run as admin -Specifies that the command executes with elevated privilegs. When disabled commands can still be executed with elevated privilegs by holding down Control or Shift key while selecting the command from the Open with++ menu. +Specifies that the command executes with elevated privilegs. When disabled commands can still be executed with elevated privilegs by holding down Shift key while selecting the command from the Open with++ menu. ### Run hidden @@ -122,7 +127,7 @@ Runs the process with hidden window. ## Tips & Tricks -- Holding down the Control or Shift key while selecting a command from the Open with++ menu will execute the command with elevated privileges. +- Holding down the Shift key while selecting a command from the Open with++ menu will execute the command with elevated privileges. ## Configuration Suggestions