From 9aa8f1d2db27802b0aee776a4eedd87c2abc323b Mon Sep 17 00:00:00 2001 From: hawkeye Date: Wed, 24 Nov 2021 10:57:29 -0500 Subject: [PATCH] Version 2.2 --- .../preprocessingdata/separation_button.png | Bin 0 -> 8881 bytes MSFSPopoutPanelManager.csproj | 44 ++-- MSFSPopoutPanelManager.sln | 4 +- Modules/Autostart.cs | 191 +++++++++++++++ Modules/FileManager.cs | 2 +- Modules/ImageAnalysis.cs | 45 ++-- Modules/ImageOperation.cs | 22 +- Modules/PanelAnalysisModule.cs | 217 ++++++++++-------- Modules/PanelLocationSelectionModule.cs | 2 +- Modules/PanelManager.cs | 7 +- Program.cs | 28 ++- README.md | 7 +- UI/StartupForm.Designer.cs | 22 +- UI/StartupForm.cs | 11 +- VERSION.md | 8 + .../separation_button_hd.png | Bin 3639 -> 0 bytes .../separation_button_qhd.png | Bin 4542 -> 0 bytes .../separation_button_uhd.png | Bin 8955 -> 0 bytes images/doc/screenshot5.png | Bin 51714 -> 51714 bytes 19 files changed, 451 insertions(+), 159 deletions(-) create mode 100644 Config/preprocessingdata/separation_button.png create mode 100644 Modules/Autostart.cs delete mode 100644 config/preprocessingdata/separation_button_hd.png delete mode 100644 config/preprocessingdata/separation_button_qhd.png delete mode 100644 config/preprocessingdata/separation_button_uhd.png diff --git a/Config/preprocessingdata/separation_button.png b/Config/preprocessingdata/separation_button.png new file mode 100644 index 0000000000000000000000000000000000000000..21b142f1ebd0c2429abe78f26282c4044ac20c7b GIT binary patch literal 8881 zcmaKyWm{BV8^!4c>26R7X{4pQyF*60yBq1DyFpUALApy(x?4cHl&)w0zre!_nBkfi zd(PQ=t>0SriBeUT!9*iPgMop;l#`WIhk=1b0k4%%;K1)W5BmY|2i8?xMjWQ*C;0(* zgJ3D9BnAUhACLZMiU{7LI?3v}!oXmG4`L0#jyRT^!NAZ;%Sno9dKsVOq8ciDKfI)B z+v_*!p{1r2Lu9A08)g@W1)#^noWu$qg^WkC!`=9_iD+SBN_g^-#Dfe=>eu!^Fn+yw z=WTTSoD!+%=-~Xddhp!&vvOh0Kk(O0&e>I$@WR!%?mw%4YOYQAcM^(Fb_Nq9;vm#- z!^vIn;rThhzlcYpXd=jmM3pi4cNmadAfq%g90_<5Sp3n!ImEkzJugpZL~O>Z-Ts1f zbibvA1CmLPU5@6f|NP2-IWl>{?MRjwK2MCg$bWhK^FjbS!xpr_jh(G+(dqpc>6ftc zwxq7^;`PZ&tNjY0I$<5U;PB9pQJ2qEyvTFVCrFRWD2DJG4kw?^mn-Dkr>nEG-oX4I zJoX=!zw%g&+GpqHv}9ytIt)L`C@6fd-+)eZr#~&21V$Nsr{OAR;5f%U|C1jm?03t~ z%gg)WgMZ+^XZyYt?OJ_`O`^@#UdP}wxVnI+`?U^Fs>Q&~DiK0llyWFP0;=2Y zc&f1f{rQ}-#@=(q@=>a z!&yyQR(&H|EqPTI=4-G#uy|taNcG+~Slj*H+new3Jj0=rp8R;W-X$j|Cwr2ULoUwN zQ0(IT`}yf1Dk`d4zZuuR^H^0?HHdhwQpa(wLCZ|iOj|o`v6-AR^b#+0`tN#|uUXLf z`8f%fh1>pQp~G6cjg8It__(~h{0|@Zp+m(UnCIV01Ox;|Mr&_clzgs^o9zx778e)4 zr?cS&jgdjhQei#M);|P1-dg7SziIa#3xc5%eWa$!80zYJSW0P(r}{wHktSiGN(tE< zsiWoR_nydlzrMbnE9mLrn(@W)I4g6{i2pL&B}Ly<7=uU8z^GHx2rzT0AuNM=Tf@n7su z6>(Yqe5cni*cI9lUK$>q72Ocs5b{MFGnVuo>Au-^!C|rhHnjwXnVH$v))pNd-PP4q zLqmfTX_?d~L3a~ZAF|r!OhZFsZEfvlz-TDR$w8bOnhdW@MNY1$*Ib4@nUHuV>LD#7 z^Ol|-8;41OkAc^?%O^~`)A{%C)eTLRAraF2=;&yh{{s)_=OnFF6ST<;3Pk)42Uf~U z3M-GJc@{KS=a+3&3&?7>tKhY2)h|V=5yCim8~M4E3PuKIlx#hCu5=#O!6C=)JBvfX zf`+|c`SC><6ap#K%MIoV#NyLIWU}b=X@!ZV3pGYM?@XL&FC-n5YrKd_hQW2E$Ce%>2(24jCPHooTy%tm71YpPFoMY z=+g5!7PEF0wyz&D7XG=gRg3v|LSlwf6Y_CUjDCKh7-)2kkaj#qboTVRO-|kcX}m?Z(r7?tK8*-{qk%#_U*#_JfTvYX*Rbtr~mywa9|X$4q^UMe(-UdEmxaB6Fa`3 z*uR7SceLR6=Vz{2Kz;f)H4DdjxBtUtAH2(ur$!H*4nrj~a|MIVzSXR)YHhYoE5GZX zW05*4f2q7Lv@cIL8)_(2l9JrI%F0-pQStE`4esCF@(=LehKGl1?(~A6wKadOO(x>2 ze+L?R^O{mog(cPIb`Xq#zeJ??TSx=W&dxNfZ{EC77dAz6{!@YMhQ+mBZP3bD?a^w4t4nX8+{y~+xvT5^a?NU*iW|)59##6 zF^E4WYm7QlQc~dJnb3r?8zvSP+j{p(LNa#u_F60^Nb6&g)C4#p?~7y5iC7EPvs&#~ z85nqoIZd|_b|^UV3S_ygL=`-|ANK4$Jb3zCEcbt&pF3TLp^7_-?z7*Bon|&#hDd}w zTpz6zn8N?eaOnic=X08opeK#u(0oJ0m%#$3FDYmk7{zg4LTF(x-_UI%Mmz8Q$Q(?m zsQQW$rc+~B=pxFc(CCKhg!Jy<_wVE!!!Pa9O|M9~Wi>SLG-5jBK8J@(4}@a|K3>So z<}ON&G2{~OcUEQV6&4nnVBS}hIw%on5#(kG#8#2Tl8LZFOa_0C#BX%^)A9Ht(`&3= z@JU{$n*>DVJ(v!?N{ASI8}Nu#w>un52DatlN-LW;VKOXG4Ej%siqJ*bYtknlsZ=E;gr<=H7?1j13N{bD9{Bz(B6AuS@GvID3DOOl0$# zv^r2s--lNAj$T$(y`#m7W6f&k7NsPOC*ca8mO7TAm4Ay=BDK>!YOPWBt=V~IYVvEL z`oNd&p^U^&UU+*1%>OL}Cvx^fdwaVkj{Vv)C7;*kRFTZ~$XQT5v6F@L-u>0l1y|wv z$DB8%Z@SU_%;zJ7sgVd@9{>IV;t^9={^v_kkwL3Nb#-+v(eNc=SypLQSo2U)i2|!h z_YWvx-X;?wIgA6)lW>S4doDLI2V`)m(K3oL%$z?lJ%q9`Cbk%cv0NdYwcjO@TSHZV z<8-5^$KgbPO@(bhKfEqv;*RUj`Pvq*<2rpNzAvV?SeAav4 zwAfh8LF$}MEs4$udipn=K3DQ~ObQ927#JaX9>89_CO7rNn^QFZrZpz!k_wPs$6bFK ziLD;bil&b2HU8%E8dV!C&B@IzN6?d%hm9JkFKoF8$PPVKeIh=vw~uk`!dL4u)JSiG z1#-B2vHp~m7nGM)S=d{D2srjalSkE3Gldi+%0~LqU8iZPB$K$D{vn6*?;q^SHAm-* z#cThpeuR5GUG37)40`$v)+N0A*%})cxBtf+M`ck(A=3_~6oFLbu(p<=2I>$~Dm0P1)0o@vA|w_~+TBnaL*qrEtE;OSp&X&zq-Il- zUwp0(^$+zWdMJGut|yNcYG3~|7KLWLx8-Dy#33PJG%ZBE?+Yg3vRqtRLJggoopy6} z<@ev?zE`)S=Son-fVHZ4dbshtIEHAhlm`(nw=Z8$9A|1;lrz~f<@5~=A#Pw}=rToC z<5#BSh8SqLH(5=I`+PuRHZ(H&y}kW;txtwp+Q&yg%WtMssky0%I4Y*``=$B!nd#{a z9V}`dCb-CY$X&E_ENOi@_n@e%SkQ@J%gw=x3`5`7%Upc{DM{(oc6WvU))G$a%}l7L z2W|JvUsnxL64Qe<2^e8tLKpQ<+M>aoxw@!umppyA<80qV+DHGpvy6JE`foN|)#k9WX%SV1TpVVZuRL|=vk6w5-?)LM(*d7ATuBJsR!7kfP z@H&_$FE8(V8jC@b6;2#$H!~vNU<#uKCnqObN}#YHlPHGa3pjty7tX?5er~o0v`C6a zSpgq*j*3R&Trk=#q`yWa%u)qW;Njts1XWkFz$Pu8P4)+q!uQ}9083uT?pd^wdj%Kj zotT^~(P*JO!R^jXkV=4x>n5Ints-jy#0KE)Mw7KhJ!9gqRRz#az;-HDKgjXejJ%ef6KBHL6qj1QY1i#h6dJ% z!)Aven0UNm+$Y?}_0O+0qHkxteem09@wc~LvmVz^c7+m9#H03`!y3opR~!l95)oLj zFZ`6WW16}wcpL~y%_2S`V}$ZB%gl_7*4DPB`5d2yi}Mt!L$c5=px?wLBm_NAp{3YA z7)bV6bq7rtqs*+V_P4gg=8XRd1al`yLf@+79b;{*m6=dgXXyiY;!(1Dgnz^lsx|KF z*V9l}=W$#TTC=<#l*8-Ey*&Yj{~Iwwz}@EM`Dx6vw6yf_@DOc|AZ0F9(EWhhZ}xm@ z18PC`9%&wGmc7TtV&y)mA`{r2>5c~pN-k5rWc-Q>**`jZMb3w9v2DO91@*l-6*~Z% zAeu|HI;*4O0lbuF`huV&HMR%{v)%n@zFbXW6%aUZ4K||&e1(3@aJExbbJ6->JroYF zPOHRt1OdC5Qp_p&teDlIFZd9<)wZeT>dN*~AIuX{7X21#fkP@-QF;^IPGLb0*2 zSD63MTYwBIDk-|#9um%KVN2+aE=(=p@YoyKE3qiG2)G}$wK(T~u;kH`ozxsF0}Ic$ zneWAb^xh`Y$qWw;Ca9Q26I=Bc7t<3FrH9nG*T~WcbT+?ff07>B1v?)i)Zpdn)r2l+tfRP2|YalvDo=`x8 z=>SseueI6c**WgHQDS=RiY=fg>s_9_PFe-o*<|{9T1r|{1mc}5m$k+*Z!=76nV1;G zkqF!gOf|H0!f?-#)lBUmikNr=6jHmfM>+hi7SlU&?h}XNWRX)Ho{qu9yOir2u)5KR zEe>k}9>v4c}4o zRC9i`Ah`uHpOcdliSvb@31)nGZz3B=qot*#PO(6$Bu1%-mx5E7axS)b1!)CvKa3zK z?DwcF1QDj_(rYD_s&}Ni+}N$*m_H^aVxiEc=H{?Y*h|(A^PHl5b6m9}+C5@Vk7u3w z%RKe=GcB0r(#u2KA+PzIw+GABiWrm`RBY!e=2{(1c1FJIu$e~_!?;Q;07oAh94=rH z(JfDfuCzMJoW+A1CAf;chbwV$=ExiHsTfkk6b=yZ_U>*AU)>ms4b|+Ufq_9_U|^@_ zaeF6281Yuez{9_jPan;KQW_dt(NR!DPkPaWu0TA!9ejp=xRE-IStO#dL%6N0W54Ax zeMFdbeJ&bmqJf#ayT?4T9wY32>-QhNw-3l*fk13-X10kfeu25P++tr@nSC>a1P>ny z#Fk1VppzE$!V#`)oRKD=06{!$lsWQv}M zF__|qfYfGYW|#xgjiLrWZjWKe{+aqDO-4+nN~X)xP+Y(taLm_?Op^@rO2SKNN-rql zF5XDc{c?6YXo!%IkX{B~t#ZDa$9^3l${NEeXnAJT9pns#q zFM)I)EYHNRq($37WIM4Rd~a_3&v>n;i{INWBtilhOLU1`M645TM;1k}VEe;B+shyRUdT9U@tT`4cQ7u|9_rv6;xW zSZcupXY{sPP0`Xf{Uc&V>t($(8Tl-JK#1tvt}tsWMbsscK2eN{Y)<28O&) zYx0VN-j)oIzz~|Cpdb?sV^nZ@0(t3!Vgx}Q6{LXA^Ydw2rn`pS#hBP=`)BxPZJ~ZG zkB_j$VlFP1Kx3RQ8gStq_1c_FLDP_FR*jG%jxl>4M-#cclqyN276#)0`vOlaCeQlnc0p=lTd^eP7?v*|2J)7t=%1OI0^`gyVC9JUp?JRgvmiSJ)=ifue?p zm{@j~rBGc_D6!3J403~YDlIKdA8Rp@RhU@LJQ%-$j4<%<^*{!LYN{Xr-ZW>wd}|=W zq$2vJPVmA;F+RTwW|(H3S&}A?1Kf7Otwg8Uz(NikNSMr%d7Mkz!wZe0C4v zHV|um*1&Q6`0?ZZ=8TGr?BQH2Y8nOdBU|Lx^mtM)8@5E-GHrk%$`9U%+bhsL89o&m z81VXkczT>xxQJovMnOjp4bW<#G~fK3_lOuP6S9gcaw`eToG0W>>jy8FF!SZR0`d;D zy7~kd4=6TXh~6WOY|5%7s;!&&F1)XbZYEB zGU!@tR?vyOXd2att3yPk`D^h8@hO2uqAs#MOJKFp+Ab8A*{{-x0Q3!~g^Low%^D$8?Uw<2?_>|ApP% z=f4qiI4;yB5J*{TKUDcXzjDS~1qx zcgnC}*G*bJa##A_3hU4#aLe)DDmT^F7q+Xat25aSV+SEg1aEZvXJZZ3e2Qlu2 zh8HN8^Zrv>YN{5ftlo2T|GT;pbU)lV%lB-wpSsVOk?%?Cc6e%Ea zGK%Xk3<_>t|InP2f<_EqFjZTtr%9uQlDu4>@gPETV8>XXz zJ-3T8Gc$2;aNvxwuLwVXW-*OzJ<G3i0Juyjgbaf0ojq5-uW~@Ca-8{|);5^%f>WPl@KcKyF#Vm8X+!+HXJ6^2kCNv!sNC+P58O8R%a(kB=YMcFqFs zc8O4rG`(*we`J|kSPZkmmG9OVcF}5}`-70bTK`D~)FcdsLpTBS1>*v4`$1RoT?$3? zvI>*Skrvcyc*3jh8G>7$8V|2>g;-cD_Hn~q^f@EdCas)h1NB8E}V^jL)M@w<= zA(e%hH*3nYBzLeUvx6;iD?Iie1blS$^f@R?6K=?O9iWr{(H1B@jbEM_A5mQHM5~+K zkF*WQ3^23`zK+g49-W=#Cnbe&vv_RN3`0q{&`cP!xxJ@{6o{AuRt{uf@#Kf;uHDbp zDZVk}eUW6hArI|QXVs;-JrEKQ$Rd>%ve5%QZGu4Lw&pLHIP%Otg0)hWgxGsSo`6Kcik;Ttq)G$XEQ*wxrd@hm`fI5(Q%lL`^fBrsX={Bz(DU&4 za2rj9oPt8c@x~j(&^O9Ck%r2*ueU(+6_`w)CP>?ENq!dO( zM2J1ZcZRtpV;C73v9Z;Tj>?iFSps&WeT8p4lm>$pe1AAyq5y$>@$xzVtM-F=6W%Vw z$any#cL!T@KJG-Y7gR6>?^6E(Jalz&LHo6Vj9ueGF6`&E2hIG^3Q7+4n>6jTf$&!= z-Jc$=Hflry6K_KAwAdXJ*in5mn!vCMjyVWh$;i-9wGf2ycaxe8av0mxoTkr@cYKv8 zd9e^T505tkW@ct6xj7$v=NA?hR#!WzUFDH*T0Bmc!Jwh{sn|0+UJe?M`1m~gRbw`; zT&}HeH5r?Qg~d4%1jFgt5;`(8b){4|iEfanOO>+gFrqZu&kmrW~NO`7nAr%}#-@?oco<~$HJsdi=n9sj`*p6sp zQ)X07c_@g1V5i*Q-uhiHS+eH^Zz1emO@MGuL5`c_&DB_JKCVJ}i)_u$!{f2p8yuD& zfzE4ZXJ>KyLsX*=lY|~=>3A>-57bx54NchWUgsZ8-3x<=C6PJbBDlJ{6OhTlj^nn8 zrPA(7P?;wZ=kPWS6Do?l)_J%-QJVupEnBNO_DaY3z>hCiWb<6&q?&!jun0J&m& zbs&k8q(()+bb_JWRp+dIy0{4SqG4a$@$NNAAoq60xkTzVenHx?w~;o%V+9NgdK z5msxCLkLn0xF3pn^j6V=DdE6j09{`Lj-EDrpC$!Cp%!O}cf`T9;|Wkuihw3}>v2}pM^;&EKh$;`a7)Oxa}g+pGY{u;1#6$ZZ9 zCi$b3#+Ev$Q^doFjPLG{qr{@YDJL06_GIIu8k?M+c5!wFGn#ZKW@m6MtgOnz!opI_ zeova|Y<;VR5WSZ0h@yeX?vMR65(k{N)xM(zNg7GNT_2QJ%@Z~^M;q~-&L_+7$69Cn z`>9RW$6mU6#6pn@dBWT&OY@0T`@zPo8+p_i>}^zI``~-MlQO802*;w|qzi^;TUi|p zlR6AG_;f?5ZQ1y}?~0^j1q_zi^v47^U@o~GF>gjq+oqPA-6{SGIEBudS~&0&yugUR z*~81${*a(aA{>mT7VLy8&PnZ#!e0#Yg3mE}=$%w6fh^R(&hUyJ1}8NoMe~p)zAmon z5<~*JX*6n&3#{#qu*qgyoiC^yQpY8Hns5*p`u8OsB7^2*IB1d3k;S!(T;js^mAjFFE56n@X_2iVz0X zr8winUUz{ThZ;tGeTB6V@Nm+0v-SITqs<)Cm`JV~e~y_iig4!EFC+CnP&D5vNH& zRzX2QLIOUs_#R7hE{vvAZi2;B%|sc>S(t#$0V_}?Q0IH~c(T4?(WFED|eNQheBq6({u?I30ikfCVgyB-D> z50(f?@NmRTfhZIjUF?$Ze1D2et+Q`+;N@`zjg5WXp*;~(xEqv1%o*G2xUv4t^{udQ z0BA=5;TjP%F*zDEGdXE}WHk7=Iqp|w&=KdKoRoCB*74Rd>>qf*VxDG|RN}o9OWinExe net5.0-windows true - x64 - 2.1.1.0 + x64;AnyCPU + 2.2.0.0 MSFSPopoutPanelManager MSFSPopoutPanelManager WindowManager.ico @@ -13,8 +13,10 @@ MSFS 2020 Popout Panel Manager MSFS 2020 Popout Panel Manager true - 2.1.1.0 - 2.1.1.0 + 2.2.0.0 + 2.2.0.0 + None + false @@ -40,6 +42,9 @@ + + + @@ -48,6 +53,7 @@ + @@ -65,6 +71,15 @@ Always + + Always + + + Always + + + Always + @@ -206,10 +221,13 @@ Always + + Always + Always - + Always @@ -236,27 +254,15 @@ Always - - Always - Always Always - - Always - - - Always - Always - - Always - @@ -271,10 +277,6 @@ - - - - diff --git a/MSFSPopoutPanelManager.sln b/MSFSPopoutPanelManager.sln index 8db4b81..443d5cf 100644 --- a/MSFSPopoutPanelManager.sln +++ b/MSFSPopoutPanelManager.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31424.327 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31919.166 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSFSPopoutPanelManager", "MSFSPopoutPanelManager.csproj", "{1E89B7B3-DBD9-4644-A0EB-26924317DD83}" EndProject diff --git a/Modules/Autostart.cs b/Modules/Autostart.cs new file mode 100644 index 0000000..bdd929f --- /dev/null +++ b/Modules/Autostart.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace MSFSPopoutPanelManager +{ + public class Autostart + { + public static void Activate() + { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + var filePath = GetFilePath(); + var autoStartArg = new LaunchAddOn() { Name = "MSFS Popout Panel Manager", Disabled = "false", Path = $@"{Directory.GetCurrentDirectory()}\MSFSPopoutPanelManager.exe" }; + XmlSerializer serializer = new XmlSerializer(typeof(SimBaseDocument)); + + if (filePath != null && File.Exists(filePath)) + { + // Create backup file if needed + if (!File.Exists(filePath + ".backup")) + { + File.Copy(filePath, filePath + ".backup"); + } + + SimBaseDocument data; + + using (Stream stream = new FileStream(filePath, FileMode.Open)) + { + data = (SimBaseDocument)serializer.Deserialize(stream); + } + + if (data != null) + { + if (data.LaunchAddOn.Count == 0) + { + data.LaunchAddOn.Add(autoStartArg); + } + else + { + var autoStartIndex = data.LaunchAddOn.FindIndex(x => x.Name == "MSFS Popout Panel Manager"); + + if (autoStartIndex > -1) + data.LaunchAddOn[autoStartIndex] = autoStartArg; + else + data.LaunchAddOn.Add(autoStartArg); + } + + using (Stream stream = new FileStream(filePath, FileMode.Open)) + { + stream.SetLength(0); + serializer.Serialize(stream, data, new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty })); + } + } + } + else + { + var data = new SimBaseDocument + { + Descr = "SimConnect", + Filename = "SimConnect.xml", + Disabled = "False", + Type = "SimConnecct", + Version = "1,0", + LaunchAddOn = new List() { autoStartArg } + }; + + using (var file = File.Create(filePath)) + { + serializer.Serialize(file, data, new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty })); + } + } + } + + public static void Deactivate() + { + //Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + + var filePath = GetFilePath(); + + if (filePath != null && File.Exists(filePath)) + { + SimBaseDocument data; + XmlSerializer serializer = new XmlSerializer(typeof(SimBaseDocument)); + + using (Stream stream = new FileStream(filePath, FileMode.Open)) + { + data = (SimBaseDocument)serializer.Deserialize(stream); + } + + if (data != null) + { + if (data.LaunchAddOn.Count > 0) + { + var autoStartIndex = data.LaunchAddOn.FindIndex(x => x.Name == "MSFS Popout Panel Manager"); + + if (autoStartIndex > -1) + data.LaunchAddOn.RemoveAt(autoStartIndex); + } + + using (Stream stream = new FileStream(filePath, FileMode.Open)) + { + stream.SetLength(0); + serializer.Serialize(stream, data, new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty })); + } + } + } + } + + public static bool CheckIsAutoStart() + { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + + var filePath = GetFilePath(); + + if (filePath != null && File.Exists(filePath)) + { + SimBaseDocument data; + XmlSerializer serializer = new XmlSerializer(typeof(SimBaseDocument)); + + using (Stream stream = new FileStream(filePath, FileMode.Open)) + { + data = (SimBaseDocument)serializer.Deserialize(stream); + } + + if (data != null) + { + if (data.LaunchAddOn.Count > 0) + { + var autoStartIndex = data.LaunchAddOn.FindIndex(x => x.Name == "MSFS Popout Panel Manager"); + + if (autoStartIndex > -1) + return true; + else + return false; + } + } + } + + return false; + } + + private static string GetFilePath() + { + var filePathMSStore = Environment.ExpandEnvironmentVariables("%LocalAppData%") + @"\Packages\Microsoft.FlightSimulator_8wekyb3d8bbwe\LocalCache\"; + var filePathSteam = Environment.ExpandEnvironmentVariables("%AppData%") + @"\Microsoft Flight Simulator\LocalCache\"; + + if (Directory.Exists(filePathMSStore)) + return filePathMSStore + "exe.xml"; + else if (Directory.Exists(filePathSteam)) + return filePathSteam + "exe.xml"; + else + return null; + } + } + + [XmlRoot(ElementName = "SimBase.Document")] + public class SimBaseDocument + { + [XmlAttribute("Type")] + public string Type { get; set; } + + [XmlAttribute("version")] + public string Version { get; set; } + + [XmlElement(ElementName = "Descr")] + public string Descr { get; set; } + + [XmlElement(ElementName = "Filename")] + public string Filename { get; set; } + + [XmlElement(ElementName = "Disabled")] + public string Disabled { get; set; } + + [XmlElement(ElementName = "Launch.Addon")] + public List LaunchAddOn { get; set; } + } + + public class LaunchAddOn + { + [XmlElement(ElementName = "Name")] + public string Name { get; set; } + + [XmlElement(ElementName = "Disabled")] + public string Disabled { get; set; } + + [XmlElement(ElementName = "Path")] + public string Path { get; set; } + } +} diff --git a/Modules/FileManager.cs b/Modules/FileManager.cs index e5e4984..df4c5ce 100644 --- a/Modules/FileManager.cs +++ b/Modules/FileManager.cs @@ -273,7 +273,7 @@ namespace MSFSPopoutPanelManager return files; } - private static string GetFilePathByType(FilePathType filePathType) + public static string GetFilePathByType(FilePathType filePathType) { switch (filePathType) { diff --git a/Modules/ImageAnalysis.cs b/Modules/ImageAnalysis.cs index 57d2a47..9979b07 100644 --- a/Modules/ImageAnalysis.cs +++ b/Modules/ImageAnalysis.cs @@ -1,25 +1,43 @@ using AForge.Imaging; +using System; using System.Drawing; using System.Linq; + namespace MSFSPopoutPanelManager { public class ImageAnalysis { - public static Point ExhaustiveTemplateMatchAnalysis(Bitmap sourceImage, Bitmap templateImage, int imageShrinkFactor, float similarityThreshHold) + public static Point ExhaustiveTemplateMatchAnalysisAsync(Bitmap sourceImage, Bitmap templateImage, float similarityThreshHold, int panelStartingTop, int panelStartingLeft) + { + var x = panelStartingLeft - Convert.ToInt32(templateImage.Width * 1.5); + var y = 0; + var width = Convert.ToInt32(templateImage.Width * 1.5); + var height = sourceImage.Height; + + var searchZone = new Rectangle(x, y, width, height); + + var point = AnalyzeExpandImageBitmap(sourceImage, templateImage, similarityThreshHold, searchZone); + + if (point != Point.Empty) + point.Y += panelStartingTop; + + return point; + } + + public static Point AnalyzeExpandImageBitmap(Bitmap sourceImage, Bitmap templateImage, float similarityThreshHold, Rectangle searchZone) { // Full image pixel to pixel matching algorithm ExhaustiveTemplateMatching etm = new ExhaustiveTemplateMatching(similarityThreshHold); - TemplateMatch[] templateMatches = etm.ProcessImage(sourceImage, templateImage); + TemplateMatch[] templateMatches = etm.ProcessImage(sourceImage, templateImage, searchZone); - // Highlight the matchings that were found and saved a copy of the highlighted image if (templateMatches != null && templateMatches.Length > 0) { - var match = templateMatches.OrderByDescending(x => x.Similarity).First(); // Just look at the first match since only one operation can be accomplished at a time on MSFS side + var match = templateMatches.OrderByDescending(x => x.Similarity).First(); // Just look at the first match - var x = match.Rectangle.X * imageShrinkFactor + templateImage.Width * imageShrinkFactor / 4; - var y = match.Rectangle.Y * imageShrinkFactor + templateImage.Height * imageShrinkFactor / 4; + var xCoor = match.Rectangle.X + templateImage.Width / 12; + var yCoor = match.Rectangle.Y + templateImage.Height / 4; - return new Point(x, y); + return new Point(Convert.ToInt32(xCoor), Convert.ToInt32(yCoor)); } return Point.Empty; @@ -38,19 +56,6 @@ namespace MSFSPopoutPanelManager var templateMatches = bm.ProcessImage(sourceImage, points, templateImage); return templateMatches.Count; - - // Full image pixel to pixel matching algorithm - //ExhaustiveTemplateMatching etm = new ExhaustiveTemplateMatching(similarityThreshHold); - //TemplateMatch[] templateMatches = etm.ProcessImage(sourceImage, templateImage); - - //// Highlight the matchings that were found and saved a copy of the highlighted image - //if (templateMatches != null && templateMatches.Length > 0) - //{ - // var imageMatched = templateMatches.ToList().Max(x => x.Similarity); - // return imageMatched; - //} - - //return 0; } } } diff --git a/Modules/ImageOperation.cs b/Modules/ImageOperation.cs index b3a636b..7e7ea63 100644 --- a/Modules/ImageOperation.cs +++ b/Modules/ImageOperation.cs @@ -22,9 +22,10 @@ namespace MSFSPopoutPanelManager return new Bitmap(new MemoryStream(bytes)); } - public static Bitmap ResizeImage(Bitmap sourceImage, float width, float height) + public static Bitmap ResizeImage(Bitmap sourceImage, double width, double height) { - return new ResizeBilinear(Convert.ToInt32(width), Convert.ToInt32(height)).Apply(sourceImage); + var bmp = new ResizeBilinear(Convert.ToInt32(width), Convert.ToInt32(height)).Apply(sourceImage); + return ImageOperation.ConvertToFormat(bmp, PixelFormat.Format24bppRgb); } public static Bitmap CropImage(Bitmap sourceImage, int x, int y, int width, int height) @@ -36,7 +37,8 @@ namespace MSFSPopoutPanelManager { gr.DrawImage(sourceImage, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel); } - return bmp; + + return ImageOperation.ConvertToFormat(bmp, PixelFormat.Format24bppRgb); } public static Bitmap ConvertToFormat(Bitmap image, PixelFormat format) @@ -46,6 +48,7 @@ namespace MSFSPopoutPanelManager { gr.DrawImage(image, new Rectangle(0, 0, copy.Width, copy.Height)); } + return copy; } @@ -70,14 +73,14 @@ namespace MSFSPopoutPanelManager var bottom = rect.Bottom; var bounds = new Rectangle(left, top, right - left, bottom - top); - var bitmap = new Bitmap(bounds.Width, bounds.Height); + var bmp = new Bitmap(bounds.Width, bounds.Height); - using (Graphics g = Graphics.FromImage(bitmap)) + using (Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size); } - return bitmap; + return ImageOperation.ConvertToFormat(bmp, PixelFormat.Format24bppRgb); } public static Bitmap HighLightMatchedPattern(Bitmap sourceImage, List rectBoxes) @@ -96,5 +99,12 @@ namespace MSFSPopoutPanelManager return sourceImage; } + public static Bitmap GetExpandButtonImage(int windowHeight) + { + var image = new Bitmap(FileManager.LoadAsStream(FilePathType.PreprocessingData, "separation_button.png")); + double template_image_ratio = Convert.ToDouble(windowHeight) / 1440; // expand button image was created on 1440p resolution + + return ImageOperation.ResizeImage(image, Convert.ToInt32(image.Width * template_image_ratio), Convert.ToInt32(image.Height * template_image_ratio)); + } } } diff --git a/Modules/PanelAnalysisModule.cs b/Modules/PanelAnalysisModule.cs index 9f31238..c9e3a5e 100644 --- a/Modules/PanelAnalysisModule.cs +++ b/Modules/PanelAnalysisModule.cs @@ -37,7 +37,7 @@ namespace MSFSPopoutPanelManager { while (panelsToBeIdentified > 1) // Do not have to separate the last panel { - var coordinate = AnalyzeMergedPopoutWindows(simulatorProcess.Handle, customPopout.Handle); + var coordinate = AnalyzeMergedPopoutWindows(customPopout.Handle); if (!coordinate.IsEmpty) SeparateUntitledPanel(customPopout.Handle, coordinate.X, coordinate.Y); @@ -56,7 +56,6 @@ namespace MSFSPopoutPanelManager AnalyzePopoutWindows(simulatorProcess, profileId); } - private WindowProcess GetProcessZero() { // Get process with PID of zero (PID zero launches all the popout windows for MSFS) @@ -170,110 +169,56 @@ namespace MSFSPopoutPanelManager } } - public Point AnalyzeMergedPopoutWindows(IntPtr flightSimHandle, IntPtr windowHandle) + public Point AnalyzeMergedPopoutWindows(IntPtr windowHandle) { - var resolution = GetWindowResolution(flightSimHandle); + float EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD = 0.86f; - int EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR = 1; - float EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD = 0.9f; + var sourceImage = ImageOperation.TakeScreenShot(windowHandle, true); + var templateImage = ImageOperation.GetExpandButtonImage(sourceImage.Height); - // This is to speed up pattern matching and still balance accuracy - switch (resolution) - { - case FlightSimResolution.HD: - EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR = 2; - EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD = 0.88f; - break; - case FlightSimResolution.QHD: - case FlightSimResolution.WQHD: - case FlightSimResolution.UHD: - EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR = 3; - EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD = 0.85f; - break; - } - + var panelsStartingTop = GetPanelsStartingTop(windowHandle, sourceImage); - var windowResolution = GetWindowResolution(flightSimHandle); - var templateFileName = $"separation_button_{windowResolution}.png"; - - var source = ImageOperation.ConvertToFormat(ImageOperation.TakeScreenShot(windowHandle, true), PixelFormat.Format24bppRgb); - var template = ImageOperation.ConvertToFormat(new Bitmap(FileManager.LoadAsStream(FilePathType.PreprocessingData, templateFileName)), PixelFormat.Format24bppRgb); - - // Get the updated template image ratio based on how the initial window with all the popout panels in it are organized. This is used to resize the template image - var templateImageRatio = GetTemplateToPanelHeightRatio(windowHandle, source, windowResolution, 1); - - if (templateImageRatio == -1) - { + if (panelsStartingTop > sourceImage.Height / 2) // if usually the last panel occupied the entire window with no white menubar return Point.Empty; - } - // Resize the source and template image to speed up exhaustive template matching analysis - var sourceWidth = source.Width / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; - var sourceHeight = source.Height / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; - var templateWidth = template.Width * templateImageRatio / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; - var templateHeight = template.Height * templateImageRatio / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; + var panelsStartingLeft = GetPanelsStartingLeft(windowHandle, sourceImage, panelsStartingTop + 5); - var resizedSource = ImageOperation.ResizeImage(source, sourceWidth, sourceHeight); - resizedSource = ImageOperation.ConvertToFormat(resizedSource, PixelFormat.Format24bppRgb); + var templateImageRatios = GetExpandButtonHeightRatio(windowHandle, sourceImage, 1); + + var resizedSource = ImageOperation.CropImage(sourceImage, 0, panelsStartingTop, sourceImage.Width, sourceImage.Height / 12); // add around 100px per 1440p resolution + + resizedSource.Save(FileManager.GetFilePathByType(FilePathType.PreprocessingData) + "source.png"); + + var resizedTemplate = ImageOperation.ResizeImage(templateImage, templateImage.Width * templateImageRatios[0], templateImage.Height * templateImageRatios[0]); + var point = ImageAnalysis.ExhaustiveTemplateMatchAnalysisAsync(resizedSource, resizedTemplate, EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD, panelsStartingTop, panelsStartingLeft); - var resizedTemplate = ImageOperation.ResizeImage(template, templateWidth, templateHeight); - - var point = ImageAnalysis.ExhaustiveTemplateMatchAnalysis(resizedSource, resizedTemplate, EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR, EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD); - if (point.IsEmpty) { - template = ImageOperation.ConvertToFormat(new Bitmap(FileManager.LoadAsStream(FilePathType.PreprocessingData, templateFileName)), PixelFormat.Format24bppRgb); - templateImageRatio = GetTemplateToPanelHeightRatio(windowHandle, source, windowResolution, 2); // maybe there are 2 rows of panels in the merged pop out window - templateWidth = template.Width * templateImageRatio / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; - templateHeight = template.Height * templateImageRatio / EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR; - resizedTemplate = ImageOperation.ResizeImage(template, templateWidth, templateHeight); - - point = ImageAnalysis.ExhaustiveTemplateMatchAnalysis(resizedSource, resizedTemplate, EXHAUSTIVE_TEMPLATE_MATCHING_SHRINK_FACTOR, EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD); + resizedTemplate = ImageOperation.ResizeImage(templateImage, templateImage.Width * templateImageRatios[1], templateImage.Height * templateImageRatios[1]); + point = ImageAnalysis.ExhaustiveTemplateMatchAnalysisAsync(resizedSource, resizedTemplate, EXHAUSTIVE_TEMPLATE_MATCHING_SIMILARITY_THRESHOLD, panelsStartingTop, panelsStartingLeft); } return point; } - private FlightSimResolution GetWindowResolution(IntPtr windowHandle) + private List GetExpandButtonHeightRatio(IntPtr windowHandle, Bitmap sourceImage, int numberOfRows, double percentFromLeft = 0.48) { - var rect = new Rect(); - PInvoke.GetClientRect(windowHandle, out rect); + var ratios = new List(); - switch (rect.Bottom) - { - case 1009: - case 1080: - return FlightSimResolution.HD; - case 1369: - case 1440: - return FlightSimResolution.QHD; - case 2089: - case 2160: - return FlightSimResolution.UHD; - default: - return FlightSimResolution.HD; - } - } - - private float GetTemplateToPanelHeightRatio(IntPtr windowHandle, Bitmap sourceImage, FlightSimResolution windowResolution, int numberOfRows) - { const int SW_MAXIMIZE = 3; PInvoke.ShowWindow(windowHandle, SW_MAXIMIZE); PInvoke.SetForegroundWindow(windowHandle); - Thread.Sleep(500); + Thread.Sleep(200); Rect rect = new Rect(); PInvoke.GetClientRect(windowHandle, out rect); // Get a snippet of 1 pixel wide vertical strip of windows. We will choose the strip left of center. - // This is to determine when the actual panel's vertical pixel starts in the window. This will allow accurate sizing of the template image + // This is to determine when the actual panel's vertical pixel starts in the window. This will allow accurate sizing of the expand button image var clientWindowHeight = rect.Bottom - rect.Top; - var left = Convert.ToInt32((rect.Right - rect.Left) * 0.48); // look at around 48% from the left + var left = Convert.ToInt32((rect.Right - rect.Left) * percentFromLeft); // look at around 48% from the left var top = sourceImage.Height - clientWindowHeight; - if (top < 0 || left < 0) - return -1; - // Using much faster image LockBits instead of GetPixel method unsafe { @@ -284,9 +229,62 @@ namespace MSFSPopoutPanelManager int widthInBytes = stripData.Width * bytesPerPixel; byte* ptrFirstPixel = (byte*)stripData.Scan0; - // Find the first white pixel and have at least 4 more white pixels in a row (the panel title bar) - const int WHITE_PIXEL_TO_COUNT = 4; - int whitePixelCount = 0; + // Find the first white pixel (the panel title bar) + for (int y = 0; y < heightInPixels; y++) + { + byte* currentLine = ptrFirstPixel + (y * stripData.Stride); + for (int x = 0; x < widthInBytes; x = x + bytesPerPixel) + { + int red = currentLine[x + 2]; + int green = currentLine[x + 1]; + int blue = currentLine[x]; + + if (red == 255 && green == 255 && blue == 255) + { + sourceImage.UnlockBits(stripData); + + var unpopPanelSize = (clientWindowHeight - (y * 2)) / Convert.ToDouble(numberOfRows); + + ratios.Add(unpopPanelSize / Convert.ToDouble(clientWindowHeight)); // 1 row of panel + ratios.Add(unpopPanelSize / 2 / Convert.ToDouble(clientWindowHeight)); // 2 rows of panel + return ratios; + } + } + } + + sourceImage.UnlockBits(stripData); + } + + return GetExpandButtonHeightRatio(windowHandle, sourceImage, numberOfRows, percentFromLeft - 0.01); + } + + private int GetPanelsStartingTop(IntPtr windowHandle, Bitmap sourceImage, double percentFromLeft = 0.49) + { + const int SW_MAXIMIZE = 3; + PInvoke.ShowWindow(windowHandle, SW_MAXIMIZE); + PInvoke.SetForegroundWindow(windowHandle); + Thread.Sleep(250); + + Rect rect = new Rect(); + PInvoke.GetClientRect(windowHandle, out rect); + + // Get a snippet of 1 pixel wide vertical strip of windows. We will choose the strip left of center. + // This is to determine when the actual panel's vertical pixel starts in the window. This will allow accurate sizing of the template image + var clientWindowHeight = rect.Bottom - rect.Top; + var left = Convert.ToInt32((rect.Right - rect.Left) * percentFromLeft); // look at around 49% from the left + var top = sourceImage.Height - clientWindowHeight; + + if (top < 0 || left < 0) + return -1; + + unsafe + { + var stripData = sourceImage.LockBits(new Rectangle(left, top, 1, clientWindowHeight), ImageLockMode.ReadWrite, sourceImage.PixelFormat); + + int bytesPerPixel = Bitmap.GetPixelFormatSize(stripData.PixelFormat) / 8; + int heightInPixels = stripData.Height; + int widthInBytes = stripData.Width * bytesPerPixel; + byte* ptrFirstPixel = (byte*)stripData.Scan0; for (int y = 0; y < heightInPixels; y++) { @@ -299,19 +297,48 @@ namespace MSFSPopoutPanelManager if (red == 255 && green == 255 && blue == 255) { - whitePixelCount++; - - if (whitePixelCount == WHITE_PIXEL_TO_COUNT) - { - sourceImage.UnlockBits(stripData); - var unpopPanelSize = (clientWindowHeight - (y) * 2) / Convert.ToSingle(numberOfRows); - var currentRatio = unpopPanelSize / Convert.ToSingle(clientWindowHeight); - return currentRatio; - } + sourceImage.UnlockBits(stripData); + return y + top; } - else + } + } + + sourceImage.UnlockBits(stripData); + } + + return GetPanelsStartingTop(windowHandle, sourceImage, percentFromLeft - 0.01); + } + + private int GetPanelsStartingLeft(IntPtr windowHandle, Bitmap sourceImage, int top) + { + Rect rect = new Rect(); + PInvoke.GetClientRect(windowHandle, out rect); + + // Get a snippet of 1 pixel wide horizontal strip of windows + var clientWindowWidth = rect.Right - rect.Left; + + unsafe + { + var stripData = sourceImage.LockBits(new Rectangle(0, top, clientWindowWidth, 1), ImageLockMode.ReadWrite, sourceImage.PixelFormat); + + int bytesPerPixel = Bitmap.GetPixelFormatSize(stripData.PixelFormat) / 8; + int widthInPixels = stripData.Width; + int heightInBytes = stripData.Height * bytesPerPixel; + byte* ptrFirstPixel = (byte*)stripData.Scan0; + + for (int x = 0; x < widthInPixels; x++) + { + byte* currentLine = ptrFirstPixel - (x * bytesPerPixel); + for (int y = 0; y < heightInBytes; y = y + bytesPerPixel) + { + int red = currentLine[y + 2]; + int green = currentLine[y + 1]; + int blue = currentLine[y]; + + if (red == 255 && green == 255 && blue == 255) { - whitePixelCount = 0; + sourceImage.UnlockBits(stripData); + return sourceImage.Width - x; } } } @@ -331,11 +358,13 @@ namespace MSFSPopoutPanelManager Cursor.Position = new Point(point.X, point.Y); // Wait for mouse to get into position - Thread.Sleep(1000); + Thread.Sleep(500); PInvoke.mouse_event(MOUSEEVENTF_LEFTDOWN, point.X, point.Y, 0, 0); Thread.Sleep(200); PInvoke.mouse_event(MOUSEEVENTF_LEFTUP, point.X, point.Y, 0, 0); + + Cursor.Position = new Point(point.X + 50, point.Y + 50); } private void AnalyzePopoutWindows(WindowProcess simulatorProcess, int profileId) @@ -374,7 +403,7 @@ namespace MSFSPopoutPanelManager Thread.Sleep(300); // ** this delay is important to allow the window to go into focus before screenshot is taken - var srcImage = ImageOperation.ConvertToFormat(ImageOperation.TakeScreenShot(popout.Handle, false), PixelFormat.Format24bppRgb); + var srcImage = ImageOperation.TakeScreenShot(popout.Handle, false); var srcImageBytes = ImageOperation.ImageToByte(srcImage); Parallel.ForEach(templates, new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)) }, template => diff --git a/Modules/PanelLocationSelectionModule.cs b/Modules/PanelLocationSelectionModule.cs index 4da47d1..d296788 100644 --- a/Modules/PanelLocationSelectionModule.cs +++ b/Modules/PanelLocationSelectionModule.cs @@ -150,4 +150,4 @@ namespace MSFSPopoutPanelManager DrawPanelLocationOverlay(); } } -} +} \ No newline at end of file diff --git a/Modules/PanelManager.cs b/Modules/PanelManager.cs index 78707ee..b28549b 100644 --- a/Modules/PanelManager.cs +++ b/Modules/PanelManager.cs @@ -188,7 +188,10 @@ namespace MSFSPopoutPanelManager else Logger.LogStatus("No panel has been identified."); - ApplyPanelSettings(); + if(hasExistingData) + ApplyPanelSettings(); + + PInvoke.SetForegroundWindow(_appForm.Handle); } public void ApplyPanelSettings() @@ -225,6 +228,8 @@ namespace MSFSPopoutPanelManager Logger.LogStatus("Please move the newly identified panels to their desire locations. Once everything is perfect, click 'Save Settings' and these settings will be used in future flights."); else Logger.LogStatus("No panel has been found."); + + PInvoke.SetForegroundWindow(_appForm.Handle); } public void SavePanelSettings() diff --git a/Program.cs b/Program.cs index 449671d..84c1dc6 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,6 @@ using System; +using System.Diagnostics; +using System.Threading; using System.Windows.Forms; namespace MSFSPopoutPanelManager @@ -11,10 +13,28 @@ namespace MSFSPopoutPanelManager [STAThread] static void Main() { - Application.SetHighDpiMode(HighDpiMode.SystemAware); - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new StartupForm()); + bool createNew; + + using var mutex = new Mutex(true, typeof(Program).Namespace, out createNew); + + if (createNew) + { + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new StartupForm()); + } + else + { + var current = Process.GetCurrentProcess(); + + foreach (var process in Process.GetProcessesByName(current.ProcessName)) + { + if (process.Id == current.Id) continue; + PInvoke.SetForegroundWindow(process.MainWindowHandle); + break; + } + } } } } diff --git a/README.md b/README.md index 73561c6..2c1cdfe 100644 --- a/README.md +++ b/README.md @@ -116,10 +116,9 @@ The user created plane profile and associate image recognition data are stored i ## Common Problem Resolution - Unable to pop out windows correctly - the predefined pop out panel coordinate may not line up correctly or movement of mouse is interfering with pop out execution. Please try to reposition the screen into pop out coordinates. Or you can close and restart the application, close all the opened pop outs, and try the analysis again. - - Pop out windows are not recognized correctly - it is the current limitation of current implementation of image recognition algorithm. More sophisticated image recognition such as [SIFT](https://en.wikipedia.org/wiki/Scale-invariant_feature_transform) will be needed. This is to-do item on my list for future version of app. Also, the panel screen maybe blank which causes the image recognition engine to fail. - - Night time or different world location causes image recognition to fail - application has builtin redundancy image recognition data for this purpose (such as MFD recognition for G1000 where 75% of the screen is a map). But I may not have anticipate all the use cases yet. Please provide feedback and it will help me to improve the image recognition engine. - - Running on non-native monitor resolution does not work - for example running 1080p window resolution on 1440p monitor will not work because of image scaling and calculation issue. But in-game resolution scaling will not get affected. This issue can only be fixed when using scale invariant algorithm or more advanced algorithm. - + - Pop out windows are not recognized correctly - it is limitation of current implementation of image recognition algorithm. More sophisticated image recognition such as [SIFT](https://en.wikipedia.org/wiki/Scale-invariant_feature_transform) will be needed. This is to-do item on my list for future version of app. Also, the panel screen maybe blank which causes the image recognition engine to fail. + - Night time or different world location causes image recognition to fail - application has builtin redundancy image recognition data for this purpose (such as MFD recognition for G1000 where 75% of the screen is a map). But I may not have anticipate all the use cases yet. Please provide feedback and it will help me to improve the image recognition engine. + ## Author Stanley Kwok diff --git a/UI/StartupForm.Designer.cs b/UI/StartupForm.Designer.cs index dd5eda2..541af01 100644 --- a/UI/StartupForm.Designer.cs +++ b/UI/StartupForm.Designer.cs @@ -42,6 +42,7 @@ namespace MSFSPopoutPanelManager this.darkLabel2 = new DarkUI.Controls.DarkLabel(); this.checkBoxMinimizeToTray = new DarkUI.Controls.DarkCheckBox(); this.lblVersion = new DarkUI.Controls.DarkLabel(); + this.checkBoxAutoStart = new DarkUI.Controls.DarkCheckBox(); this.panelStatus.SuspendLayout(); this.SuspendLayout(); // @@ -72,7 +73,7 @@ namespace MSFSPopoutPanelManager this.labelMsfsRunning.AutoSize = true; this.labelMsfsRunning.Font = new System.Drawing.Font("Segoe UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); this.labelMsfsRunning.ForeColor = System.Drawing.Color.Red; - this.labelMsfsRunning.Location = new System.Drawing.Point(704, 553); + this.labelMsfsRunning.Location = new System.Drawing.Point(704, 546); this.labelMsfsRunning.Name = "labelMsfsRunning"; this.labelMsfsRunning.RightToLeft = System.Windows.Forms.RightToLeft.Yes; this.labelMsfsRunning.Size = new System.Drawing.Size(143, 20); @@ -147,7 +148,7 @@ namespace MSFSPopoutPanelManager // this.checkBoxMinimizeToTray.AutoSize = true; this.checkBoxMinimizeToTray.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.checkBoxMinimizeToTray.Location = new System.Drawing.Point(13, 552); + this.checkBoxMinimizeToTray.Location = new System.Drawing.Point(13, 546); this.checkBoxMinimizeToTray.Name = "checkBoxMinimizeToTray"; this.checkBoxMinimizeToTray.Size = new System.Drawing.Size(189, 24); this.checkBoxMinimizeToTray.TabIndex = 23; @@ -157,17 +158,29 @@ namespace MSFSPopoutPanelManager // this.lblVersion.AutoSize = true; this.lblVersion.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); - this.lblVersion.Location = new System.Drawing.Point(383, 561); + this.lblVersion.Location = new System.Drawing.Point(383, 572); this.lblVersion.Name = "lblVersion"; this.lblVersion.Size = new System.Drawing.Size(48, 15); this.lblVersion.TabIndex = 24; this.lblVersion.Text = "Version "; // + // checkBoxAutoStart + // + this.checkBoxAutoStart.AutoSize = true; + this.checkBoxAutoStart.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.checkBoxAutoStart.Location = new System.Drawing.Point(222, 546); + this.checkBoxAutoStart.Name = "checkBoxAutoStart"; + this.checkBoxAutoStart.Size = new System.Drawing.Size(95, 24); + this.checkBoxAutoStart.TabIndex = 25; + this.checkBoxAutoStart.Text = "Auto Start"; + this.checkBoxAutoStart.CheckedChanged += new System.EventHandler(this.checkBoxAutoStart_CheckedChanged); + // // StartupForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(859, 583); + this.ClientSize = new System.Drawing.Size(859, 591); + this.Controls.Add(this.checkBoxAutoStart); this.Controls.Add(this.lblVersion); this.Controls.Add(this.checkBoxMinimizeToTray); this.Controls.Add(this.darkLabel2); @@ -205,5 +218,6 @@ namespace MSFSPopoutPanelManager private DarkUI.Controls.DarkCheckBox checkBoxMinimizeToTray; private DarkUI.Controls.DarkLabel lblVersion; private DarkUI.Controls.DarkLabel darkLabel3; + private DarkUI.Controls.DarkCheckBox checkBoxAutoStart; } } \ No newline at end of file diff --git a/UI/StartupForm.cs b/UI/StartupForm.cs index b6747db..398ff70 100644 --- a/UI/StartupForm.cs +++ b/UI/StartupForm.cs @@ -1,6 +1,5 @@ using DarkUI.Forms; using System; -using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Threading; @@ -41,6 +40,8 @@ namespace MSFSPopoutPanelManager _panelManager.OnAnalysisCompleted += (source, e) => { _ucPanelSelection.Visible = false; _ucApplySettings.Visible = true; }; _panelManager.CheckSimulatorStarted(); + + checkBoxAutoStart.Checked = Autostart.CheckIsAutoStart(); } private void Logger_OnStatusLogged(object sender, EventArgs e) @@ -101,6 +102,14 @@ namespace MSFSPopoutPanelManager Process.Start(new ProcessStartInfo("https://github.com/hawkeye-stan/msfs-popout-panel-manager") { UseShellExecute = true }); } + + private void checkBoxAutoStart_CheckedChanged(object sender, EventArgs e) + { + if (checkBoxAutoStart.Checked) + Autostart.Activate(); + else + Autostart.Deactivate(); + } } } diff --git a/VERSION.md b/VERSION.md index 55e2ece..6801f94 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1,6 +1,14 @@ # Version History
+## Vesion 2.2.0.0 +* Disabled ability to launch multiple instances of the application. +* Added autostart feature when MSFS starts. The application will create or modify exe.xml. A backup copy of exe.xml will be created. +* Added better support for 4K display resolution and non-standard display resolution. +* Windows OS display resolution and in-game display resolution no longer have to match. +* Improved panel pop out separation accuracy and performance. +* Updated application packaging to single file executable to reduce file clutter. + ## Vesion 2.1.1.0 * Fixed panel separation issue for super ultrawide monitor (for example: 3840x1080) diff --git a/config/preprocessingdata/separation_button_hd.png b/config/preprocessingdata/separation_button_hd.png deleted file mode 100644 index ed7247c9e75a6aba10a06ea21e8b844e5b6ecc0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3639 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 JPDHLkV1oZK_jUjP diff --git a/config/preprocessingdata/separation_button_qhd.png b/config/preprocessingdata/separation_button_qhd.png deleted file mode 100644 index 3572c4abd18f644bcc0d17a6e6a072b8ead48938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4542 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 diff --git a/config/preprocessingdata/separation_button_uhd.png b/config/preprocessingdata/separation_button_uhd.png deleted file mode 100644 index fe6b9246f1516c38558d33849a303ba191830987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8955 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 aTS{b478x^z#nqp`r)a4`RI8P3!~X{u|2O;q diff --git a/images/doc/screenshot5.png b/images/doc/screenshot5.png index d3c8192060199eed2bd65e09f3645b0dbde52d3f..310a0ee4b7b8e4ca800be59b1cba9fb629398f4c 100644 GIT binary patch delta 47554 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