From e9f5ca3c3c6793b7af18db2ec698a520edb5d4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=91=ABIntel?= <lfxwd@126.com> Date: Thu, 17 Dec 2020 14:18:06 +0800 Subject: [PATCH] =?UTF-8?q?2020-12-17=20=20V2.0.2012.1701=20*.[=E6=94=B9?= =?UTF-8?q?=E8=BF=9B]=E5=BD=93=E4=BB=A5json=E6=A8=A1=E5=BC=8Fpost=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=B6,=E8=87=AA=E5=8A=A8=E8=BD=AC=E7=A0=81json?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E4=B8=AD=E6=96=87=E3=80=82=20*.[=E6=94=B9?= =?UTF-8?q?=E8=BF=9B]=E4=BF=AE=E5=A4=8Djson=E6=9F=A5=E7=9C=8B=E5=99=A8?= =?UTF-8?q?=E6=8B=AC=E5=8F=B7=E6=8A=98=E5=8F=A0=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84BUG=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Debug/SuperDesign/SuperDesign.exe | Bin 352256 -> 352256 bytes Source/.vs/开发辅助工具/v16/.suo | Bin 242176 -> 242176 bytes Source/开发辅助工具/Controls/MingFolding.cs | 18 +- .../开发辅助工具/Properties/AssemblyInfo.cs | 4 +- Source/开发辅助工具/Tools/FrmJson.cs | 520 +++--- Source/开发辅助工具/Tools/FrmWebGet.cs | 1554 +++++++++-------- 6 files changed, 1049 insertions(+), 1047 deletions(-) diff --git a/Bin/Debug/SuperDesign/SuperDesign.exe b/Bin/Debug/SuperDesign/SuperDesign.exe index 92abc9e4668b7948fd34268684de5f9d16e26d68..dc00c2824aa0c21ee32794e661ece9131ff8cd9a 100644 GIT binary patch delta 42504 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 G?f(zcWSVIJ delta 42145 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%0DY@n#F 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%0DiY?RdoX&cGL=W<-aS$NY5HZ zTIRpScV~*5PNfA3&>Z&g!`)3UzRS}=_D4L_=7k!@E}U{VtZCFMZCehr)nXgsKm!F> zP}8XH3<onc6LD3^@Rg)++?+Kt!Nt2pS#wbdJ9czSD)BBiKD;$XE2R&H#=?>syx|Rv z-7byB&^T98gEzmSk@UMuB>^hFD@v4wk1g;4uZnU|mhl<2lr?J^wQyPE*;+<&Wxk55 zKbXunJ3T~ty0_0tvo{jZT)uZ3A(*!mJae}^TFV$g`()+XMig4Nb#0@3#WSqk7**%% zy!x!wWL~g=t5Gw!vmjaAj`C-V`pR{+jS%vc@6<MuX|%jp+qhJ!?MmD}wffJDmlx|8 zzUX`3*D=bY@0G4=#Fq|sAM>j3C8f!Fb&a^-EQ~9CxXXtis9lyEUDrs;DEZM5{<N9? z_CVox32<xH#rjU}t7}9C^g!OY+kr21Mxiagt!pGZnPpQQA;d0JuLud|mPS{>=N9<G zTlxz~*bnkmEuA9%O<b3|2--Ni9)n<E4^rP)(;b9cb{wt?3`So3IR||6%h#OD8Jjd; z&Z%c4I9IBYMez3|B9#b5R38%E&I0x6uT(5kY$0gil9MZDR`XC%!gli;COUKP#8SYw ztYO|OE{%NIB}EZ3+&DE1D+pHY%^Y_L2g_RZ4L+yMu5ZNFoXsNlMQ;8Qbt2b-ld#7` z7rkh%GZk6r3&I{_E|iDs8<nG0LQP#(PN(pYGWIgHc$)-Q3}#6G21e@`cBSrXbhtFf z+Nw$HWpVMqY+$6|;=%F;Mhn{-NX%LC`vykM(yEElv>pl~(;FHYJvVYxRRP29Q}~&~ zUEty<NL%-mBBJc2`O9j*D8j*#81n%W#cUml3bHmjLPfc~p%GpoYnAFi95>3$!ped_ z)Dg@tR##++j_b1J82Lv-bo&`HvXRjPz5m%pMrwd6v}bB<^b&Kv+|<ZO3S^eed!?KA zMI)n()=rSojp3d1<=Do?YTQ-|Y+{55pF=*%kNbIQw{>0CXacuolLML<%Z+=h<ozbb zGYP-7Rt5EmSji>TRJ2D9zTJR#8XWi#K)+^2B+i{zH#L&5emmIIC|l!yildT@@rhcQ zif0X9Tx_=m+e|~oHZ#in@A8W@R-<(qpzhjIn3_Een|W_l!J=k{VZawGZDHi#RffQp zST2>3janKLu%aqxX|%%iL28B1MmOdZuv>+NQsHrYC%L2*7D;{OsaD1UIPRXUjovW( z?$%&#!K<)Xn(pPFFx(@=C6iKE8K$=}n%LGNExdO+zKxM-+oAE+Hb#c+n8x3<F=A`X zYV7K`u8)G67nLvp3y{K(C9AC@UK+R;w_9YDwpgz6dcerp_4sntU-oNjv<iM~DP=P^ z%DrukGLet15xiX2cz%?(+ZumjFy43y3(M;=t{s-EzsT9`Fc0sM-P(isft=so7-HO8 zEq`looWnZxSO;)#$$K538Z7&FG;ZMvMaNERVLGRiVd8qlU8Xt}WOO$CDLi4#lg9O* zsa``H+Qpa^T>SO0_jujmy5Shn)!^5|8g#`X`MBKJm6Mbgx*Ds)s{Kof1Lgc~Mh9CD zh+zFI-Hf#~T;_E*I^qJxXWfmfNMd&nmBfu6NMi24Br#mB>S?U;UJena@-?z?FZALq za%e9MgdGJ-dKuqP@Bxmu5iYZAT4TJ#5^kQsE44;N+czrTf_Hiwg!ixu3i=qIknN6Q z$_4#kw*zuOf8*V1fv<4uedunz)cxr5%JZi7L<cU54<4HtP_ZpIhEKw}qy_B;7`V}v zE9(tH2W~FM;wPXNwA>eCkI4bkaYg3vAR`zrTc2mG`O;@F{KHx~aIn!A_g)ST2J^hU zJ=l1fZpaQpKnXc(2&h1Lc?j&1CPRkeF`}*<GZeD^a@|m)0q*I1%hUoHIt&ZIwX(-B zc<zto!ePc_JdAh^hwO%|J=}QOxVu)$;aL1d$`iwlxfmH8o<WR^g8XNUnnX3^sS&W{ z8hLAk@h$Z(I6KnVWV4N0hqf~14AY3QO=CP$t~HG$+XBW*<q77mWV}}X%y<jq?J{5- z@IJ<eWF^KY8K03I8FS;A*9yjsGa`&I^~z?^2e#Fx%SRWyG68<CiHS&R9<9yCTv`02 zk1;&6kUNLDyb}WM(n4+?b9tu-+_lm<$q1{ky->*KCt1;2c&L!er!ZNbntP_;;3O=d z+%;c01toUXeBTr!skN>-N4<tFW<0cA#?QDha7@|R$~&3b9>p}SJg(ugQu(PxR%*jo zTd835RKv@o!eg~>r;GPk?Ro2tYcJPLH^Q2%Ev(T}u93eM7S*25)UtRl98rpD&!=cv zS2Xub!Qa!3U7mQiY}-uqhMV&2Oe5KL2kGKb<H1ZLkoY32|7@cZrjUNKjcEK#oo%$X z)mX1oPR=&g@Hd5?nF}YQo*16Sl$Q0J(G+(;r$2{>g@Ll{JmW!i6Z-lwK%{31Tf%h@ zA)XEi4-VHaaG%ABRWth(F-_V1c@%20%y}Nu>tea~c_R$nc=z+hA!IUTzA*(aBNg19 zZ^V(~7}7U#9$^sY{LMiP_i)Dd&nhf1cE?_Wg8M0)Fga>9>_~c==Z7wP(b$4}TyMN+ zbd0@=L&K!5oy95aQU$?ENiDjzYKq@Wp!XF-Ej0QCIJX9N%&k>=YaoeErH4k5s2s+4 zcoc`WvcpP|$UtZpUz8sK>D#@>ApE6|iSS6bi3q2ra|$2%v!>?Uu;qaNSE*ctvutw^ zF0{=@*v_^H;j}LK2yc~IfpDa4jT1k~ej5-jQDHyZX5iOTS;_3dp-%KOuQ!3Ox88wp zdN~eTG~n>(Ivl<c$KgdE*6CTZ0O4iFK7=3nGUsydg9wK!eq}%AT#0A>x2x@la*|k# z9}=OBI2@#K-2le>da>%?D#Gx-oM?<cbN2eObeIo^U)nfql*k2*Z^Sw^+H!a%o<m~@ zhjtZrT{Xt712|l*()`5_ah<OE)$uw8K@ZzU2(<zGd7S|+G!*c42is{>GKYR`In>sA zGnwo6vM<MdFP?EdAI41+&LLdh;|qk^iaPy%ExEYWY?lx^b=h?Uoka00`^R!Nq3K1L z#rk~|WfM)C9Yol#M*+gAv5Xt4uzJ~Vp<li94+wRZeo<_p+nqUV5y6deGLmt5#edJK zh-gJ@i{P^BdROvirRyr%AU2fv$%Df;75-c`!3{6wbdUHMq0TJA>lW}j+n)$Gc-=!d z+v^d+hc-`m&hc3$@U@y8{$cY5=SFvD0Dk5);P7=7>g;#fg27p;BJ@_FXJA0IO`MP2 z8fX*ylX-MJho0}w_`lh#crzWW#b%%0n8UXcxq+%A=5znwU!7UH)pbAD?ZieV;oXd- zx`Av>nbWi>b9msnvtK@tId}adQ0N)`INYl^|8ud>|NpgINbbpErK*heFw=#orV4j4 z;2iY3H!bo3x{DRBhOTk-rriI#H06G<o$cZ7|1a5MQ0hyi5)tYy`DPogYqAe>KJ+S! zP&ZAT!Cco@d$IImAH`Swxl@|bx1~cfBY|~7ZIyv_&sguv>0jx^sV(SN9U%$EPHm#o z9!z}FxHiJi61a?O;yBD6$Ue)<n_COs3ZWiyr)@kUp7!Bzn=gkWyc!^`E@I<;MP0I9 z3OC1;njC7WE|Bh|vz@AcYC-Xy{2$f-69c)22dmH(LFxaY9MqGsw80z2u_bhmsj9FZ z*!Mk}q7Z`>hleqV3O-I&ov#QV8{_X4Ug*m>%%7E<3b#;rtir1lE?%3J4cOpkN^_|B zuLf}U{41uYlWPC3?Wb)yJaz;3|6t|IbVKNoYN#QXpu+kpoY|d?{C%lbs6n}2=YV^b z<M2#IJ8+Cd#@evGT5-d*_u=*)=3CTz+SK4y|Hq3tySuZ82=z;hM*nXS&4N4-Bsz9y zd`aOEO&RMcMECj3mfUYEHs(;<sqWK^wVhVSGycMZZKkcI2XoibT%b#hIefh@>u7tg zVeAyTCGyL%K(|wu8f?aKeYx$w?ZIJk&7v079ZmZ+ZR%rjtY5r)YFmcYWSi+(Bgm^W zDpP!v>5=91_vd;~?aMv3Q#6MYnsV590Q1Xv^+5R404{rPgl-Sm>gl3()lT<KuRhS! zo%C2bj~d+>zlh_C6)&zC!0GG8ddXRA+)qp6dhAr=SVyiOz?^B-IMnl%_LAGG7uln3 zI!oK6Ge_I+@AAy?Qt4>x>bl<3&Zh}iM)!<crJSyH2w3~0*<8ivI_<r6m)xSd;c*rI zfY2^>Cl8Faixsg$F)zH<Y6L>=?KW{KXjmzmxT4lnx|X^!OE5!{xYwkp=&@}Na{t$* z)+L?aoyBuijhm|4>&~*<D?2(|B-T0?6)r~A-WnJ#`l;~exbZOiEj1T3RZF+QDttZc z9Mbtv;kgR03Z4Q@T_D|9N0Re-{lgu~CcgHnj@oRjH3MN_!YqWD5%a+RZ?$=`SUn~b zTYyw*%N5W~rkhV^$=D{e3o6EOihB-@u&MluDBTNf{)E!b@N)=zAS4mlZE0btwHeoC zd<6cXR<D4+J%htlYR3C1oL%g=>KvX7=QjRUIdZ8ubE`4GQFjjYupHKVBd}Bd{9Jo8 z>Us?eCY#6~%o(3<#XUUVhr|Be-h?U_4jo5D(>36*Ds}hY9bJ`v^La1YLwwxlT$G3C zpUmO=O*p)uIO|k+G;vrd5Aj_e4i~79oNdlUg@`ZO96<KnnsN8>=yC-3*A&JRY79kz zM)zTyQ|ov!ozpIz8e+Nsr|22ejPu}lbomM)cRibUW*~RNpjwv|{~E$R&8{Q-HRWdx zd)-1<Hr)9qe!l6!VGFN&2+K8igm8@y<F5yJIyliUP>7G)aH2kKIML>PeZbd+)5ZEe zgZYl8tYcSUP_3<jT)03-xHx5mAbj8%;$TiJ@JP?|(H#=-C{kZ65r_Jeageycq_D*L z1~u?^7jG9*sSXcuJdtHfM6ZlWj#A=G8BOg;tSMtR8;<mb4qve+m6^*#)!xk={-VC3 z=0<jGV-o@57ey_J?A`_+lG|*Qk8SG+5TR)tAx~Tm?C1y-O%=5S6y6X<nk~9J>|)d` zw@M#Ju<)L(skWs*6=A}YAK?+bZRxg-Fp;aMC7>pGhYQ@=cgea-zt;^%=_p&I$mN{? zMEIt3cUk>)93OO-{q)cCuNyU;LmYA9NIt9lKn=Q$awL?fLy|bgH&2DGQIfc=DeqOi zr#O;?{|Y7Z-qw2ts0E736TMSsJCemI7excm++v<OuF4Y+%Pw$~75@BGjUo-r%y&9c zMFwA11=*}(z9UWaa8cJQ<U2A%GGAVWED*AaVvVA>F!M@P7UvXo1Z@^3st7-RD2L{> z-ZqgbVid)iiJ%T^O4RCW6V=2ym*$u*HsP!$ZoQ%-j;xhes+ve!tErzW=R2y4YA)(g z>3l~`;lEDH{-~1gs3lTe)VCq|jyfV?gO=@TxC(E*u5wY!Ks9h>pC=x)%y%>@q(-5F z_#AKYMji2RO`B*Y-f~f$AZ#Y~De8#0P`Y2K7NRcBRk()UFmOxJ(nbA{obPBYCcCIp zpxTPfE@~sJ)=r#pQ4KQl9UX+&#HnbjbrQ}jMQXEk78Q73$JN@MMN38Hi4G`QXOX*| zWqINmB-&XlepgeU_p*tu;*N{D7nJYlD#Ttb+iTBvbQeusR77yTqo<hXqP~FaX>q~n zBL4!}N5s6RBTfO;PmFX?Cy?j>F<DW%+=Ik+myBC`u<%z$BuhkU?TwDX;+mp#mmMM= zC@N0`pqYk<4PWXU<|55uV)K`L^AL6VDtL?I88P-EQ#y;0VzZ*OWk!jyd<7JmpNNj$ zqr?x2(phAS<nOdBABkp*Q!Z*t%|!96sC-S!N;TQx7$<tTsH;`-9TUXbYkc$8WztDv zA7Aza711i+F-0Wvbx%+MDfx~Z(Zxl5iT0f?X1l29?t2|hvE4;|i_VrOGH&X4uY#H- zlKFBdQt5~OG)Js*QK{$&&xx&|kbj=|r(wS1d9lYOJd3iuAVT>jsmm5GinfZ<wpb_( zzSQaJB@0D0MdjfoS({iWe!&9{WTKsa6z;`F;+&nmV;%oV-it&JMdgX)(0s>YF_<YQ zvVR(_y;Q7n39F!+<co7IY7Jz|3L}m|8!i|A1}B;)T9?XqtQ5l)r5kOPSnHB;zgR6c zmS#;$*lCjYYVn(*bfc{i$w4f0!eD(5Io62KV4Y|rOtV(pR@7WEtwE4jFOoyFtX}1O z#|AOVMJ=k7?|4<5a#6vs+G`>qRBJW?^}49$qK2biydk={s4fjpIo=doHRTiokmy_D zJ(n;Z)Z5~ei`tA<+bOcbbfOJV`*%baMd|t$hy^Yg*LRQD6~~&EXin!Gd&KMnO)c>J z#<5paPGm~gexGRXqMRMu1c`kjSCOzq`lsT3kz7V+ST4;5DkWJ{Rhux?&_xYXn(pDW z1vPwMTyx2Ofek+p_yROC%o854#X%8Sj;UoLq`YYy7HbuiCq_CUJSr}@$o$~zjt@mp zs*c#Ac91wB64Er)8E)sK$V%5#PZ<AH;b@+K>^~Ns8CtdpX`T^lUDRSwXGQ-CEYnsy zCzdOUyR*|KJ{Q+&>4<;PO~>crOl?i!vV-_iMAXq#fG1O_iee)Mftp-b%h+lc#cdbG zR=X(h0bN!5rRh<&i()|oO&v}9RD2~`Hq_J$6)^vORl>kui!+V1a0ZO{wTNu2DK__I zvCl>AhwQRA=b|=(`nJ#(+!Wslf4&?F<8xDdFCMrkZi*kp@un=(P2v1WbZDkkM?(0s znCGInDSj0PTogCOf5d|pT9cdNmhfz)DQ=42#RC^L9jV+Fm0N2W8~={D<)Ze1x-0gy zVVQ1<dromnk=nJ~7t4FH&=UQyKEE%nC@N1>Adi>_;#4o4=o^L&$4DVhYwBAxjG!b% z>E11<n@iRdwh)x#qSyr+wA@AQsTCwV$@z<m{IhbtqZB3c*@&xbUesGrx@g|?_5haY zEWGKIqVmL)h|)3Mv~Qp;49|^zblpX<mk*%Id`T2daTZNcntBh`)D#SDI~{kr$ZCif zLSu($VeP8<jxai<C~c?+^5lD@NQOsxBzf?KPEbLxMG^H#QOQcC3mQpvU7AD7=Q|?l z+ISuB+0aOARNNkq=P*uY2r`VJ4ilKt8OG5(Md=LVX<jbNbfWRJR#ADvLb2m%n~R!` zo{&iU6s1#1qT4PR7dx54__n4im1L?r3;Ph9J^S@!@}6CkeOYR#D4l&dy1`dCT@lMs z&~r@X2_LNI%2AK!HFXuOT|`x~=R3+5%Iu)hX|PMP460i}$<+ME*;k?iN~p_Sh3>jk zx!m{*or{XH&m_0k3qgjNv`@+M#2?=Ij%pNydzxIdH-hsWHE6htItE!5?NgM_p*G!S ziswJhq7Hq$wkV4_^n;@EL<+i49eU`Zj-u1lBmZ@*sgr3yO%<h6X-F?@C`zRv?Nd~q z*olT|NXZ*nmM2~q(6@ABYWXTt&OGr2giR@OlNSCSmG5Xy(_T}_h@S(4L`&+vS<5P+ z3$>!*F6utwwV}$dYguL3;wfsVC|$JnG}$HN3U;6)Z)wflln~Q_t}AM;Q#~qmqAuID zke8aB==cszH7U2ifsbGB)YK?s*oB7g(bUUPsWIJXo{Kt*)lPRxepk!(qA)#akBiy| zt36G3T~t+Av=3d_t2Ldm=)wI6-yMQ6=88b9*#=PZVJ$pdGfWJkjH8<3wftb(<)VUo z@*P9z^AEMG8^-o<y6&P%VOchULXT@1FUdzyQx_$$oEuZvgX%d^wy`wcC3IFj<uGZj zi|UA8I-VZ5sMF}A6RGV9o#<RplWCQUS_Nt<{p_OJqw7s0?~_`y0J0gBtSH?uxzyVw zQ}bUQE%;rl?icxvJUZf{dU@tMX3--TH2^($4ki7eHM4xNfTXrA%EJ%qM_S;b#)5i* zB5$*%B^n!*V_u~GF6xM9-IztRSy9KtN98_siY0VFk=nH^q01$x&_8vC?a}p?6q>CU z+Sj6A?r7N~82=?|`4>~VhLUm>rANhbTKte@I)~-7Sy6f71e)HtobI~FM<7>{=Odly zDm2V0T7@kE?iU}{X&JKyUjx_Ft~woJ*5fm~npy{HBaOm0&UkPoplF-ujEAOP!@k63 zN-m|TE68CpjdxM+fZF1uBQ7!zqjD=<vT0Rk<$T9B>f)`b4WPEuZ5Q<+s2#M+hh@6H zyXY51>H5AyEn``>4E}MF_dB#TPE+@*PQtC8<OEIi44mX$K+eU9nmpdbH1?2plBSxs zn&iEga$VGyi1;3PCu`a7Ehc&Iqg)rY8?yJwJ4MU9T2AubPqWKuY9><ofMU{^QoA6f z4p7fJOzEaLKrcBJnJ3uz2WYbvic^h(#39;KmsRrwH^pHZUY{vl-=nlvQM$gzsCP@2 zEfdF@c8fVivt3kfr+zUX(p?wzR&@PRCumnIt@(<g>ZkJj<0{Pw`n?ScbxBW9Xj`rN zZn;U`Cup&Y>N2Q?I7vrb6mJ@RM8$V~PSFD;(=|Lr_NO?NxuRb{kT^v#F6zVNAu*>Z zy`91N&-H#0%R+pZsvWE5d9O_i0##R0bG<J^c7~d|WVazZLr=M6w%VILKBcZMDx!9n z_>}s(sK{oYinBD-MU`z91S;D_txVtS@fl45h5YAwZ%+>spHZ$$I5Idp<{a&DQ8Pe& zPQPkOIqUOOxxKE_;#BO*(>WLAgO%=i+SftLdZnMnUx~=-sHwAQr|C;<^lK`;%fy(k zr~^|@nC8cf<McI+bqQ~0B#LjSVRx-MyiSzu3SCmvGLhbNi|t$T?5SlT<xk^JL@jVp zJ{5w*HTtD5%ko4kkLfYrQ`7#M%D^>*A85OxEYZ+=Zp@F=VF1gV*!UCqF+b4)MOvc1 z=jxanblgR)px0u4p_zkpGJ}mE@hh!T)LhXvV^_@05^euGjU3FHy6u0bS&GUNbI`ee zr^SlW9r!jK*D|M?{r@C;dBhX5l!5=G{9&Ao<^5W-4`TkLOD^h8{83PUxF{pxBTx?% zwamL>ud^|CC}en1_ID^oQMx<h<3lB6y)`AAJk;(`#xuHxJk<Uw;SvAF2@lJ3x$je! zqV&LfK&{Q93?CHMms5E_gOyCjdq}GkrQ<!K-0`k>PHdDuqUDOzBmEIwQk0HJM(6}x zG+sm)#?nbe85+iMMdf+-ZF3>UFs`_$XWD!N%6qboHy)3z9>zRH%@tQ${hzL`1gxnm zZJ&GYy}3*FkN^P!L|KdrmJvbJDvJvk`_}*pLAD6mQtg7{uT9m7xYekgO0|tR){?QE z!DY0xTBOUP)cz`+c6>5b3$0R7#;R?tj7uAF?EjsUjL&rN@y++1@9g(G-}&y6n}5Wy z_=ua<BA$x!w6Z+z4%6-^6XNk>FN6wW*j5y{D$HI1CgSHPTaVtT{vl4r`<I7uo+`f^ zr^XXkgjha=DH^<XWr#fr7wdGmKg_hCGvJ$H_Ahe&XT-C97s{Fd%1B(|39+L!Iuwm> zQnp^)TNprQtXoBNp_wt`0?I;D8iTD~q9dmFuecbT6JnydVya}pWnq?5!CNeNeTbn8 z<CPXqJl^?`zRV|JZX>Nm{42N?D^3hC^uc%qvf{avU14q~61Ir4PtcWQ!ghws6*%p{ zJ`1z)lyRFvb&^3?aa@?aSExf)4;~hxFr@~|5PXrcM%0`gXGz8tFOh<c=zuLvISlU% zv-Y|)r44t7S+zDzIUI|>59K@xIY;0k%0kO<B%b$>^~R0F8$%3bPE(skVbA_BEuN!5 zX?PgC(4SlhCnHS56DbRgFbyxFY`r*UPO>EpZ>H=ubkY0>un)tm*BppQ$LGUr{k$wo z1|GMCj-D><OuVEi)X@vDMl$hdo-iE)$9^1Ey%JK^K#V#b7lhetU=#7$Fk1qKI0^TM zSsyTXmV0ZcoEscX9^MvacYsa7=P6r{46YTLX_(taJA-7`YG4`L!p5e9K)V2c@)}Ww z%xeZ7q%34!cAV%7HBrkbkR6v$7Mfr?UbH==BZIKx)-WT3cntT485zXmII%gDlMKRv zE1K#4*NDg{it+Zal8j<DJ`-kS6s6d>BUF%#!igt_85xBWFA6g<h`G3XC&?KaL?za~ z9x6w?M-|SXY%BW8mT#%T&jC|{(?z#ubf9Ydh_Cr$Y@5EOg_Kx>>RAP<!T-6n*Wf?@ zO7~aFLjLu?bAIWQj>8?Io8bcM*~GYCXPJi+{h@~5hKA<hi@wL906YM=5I#KH_J(wY zGSNYQ5KEVK3j1$%f>{`IHI{B7pgX}Vh$*lv2<L==D5k{n)UV1de5hL(Q)YVlAzKhL z*YfN`RuNNg`7MnK9yUmwF>PXDjMupIVb%pP4HoKfsjebsrR4=Yc^^@SW@P!V=59Hj zNp)+`IlRuY9M^@Jf?sD@i9P>O&I9GtWW*us^59MFO`l+^KIJwJpyrxEY(%$hm^GsQ zJdtfs<c_q%MM8&N&8kqZ4zs@Qvv`;%g>^8)hm8b`0USW@=8a*S6ra2DSu@j+VL}6V zpv1v8D|&UMtY6`<r?77Bi&0hV9xAsf{+TkLwKC)`o{bsQoMO^J)`26+PgudGGZRc! zNPktc8uIMYY-WRKw$TJB{{#0cgQ(Eh>S4WHe{}$LF!iqew7@%n2h;(`bfWHk=++Hz zFas!K>^ZicIX&k*TgYtBy2N%Uo|<-z?Ns=!KSKJkiaQ{aoP|ter5$;>AF6f8!8|{n z<s3}ocnMIn>9`&RaaRn}tBd4%cq02AoWpURRL;u<V@Std)lB8GnT16&xdFxYtRgO` zs3>)EjIcecn%e^{FW}mk{Dg&o`uU4FNg%DYF~zYfII}P`Y8})=CdVoqvG3w+LfnX5 zT)OaJP9}_Re(4`MKT}cK#bpbBf}PgSJTv<=mrG<1G`y_fEN6p&{A<8hH5a)~I;WkC zKIIz7nI$*4E;_S?La**N=fJ~i2O&k8!SLCTBJvK}m2?H1DI%vph96))j56{t6)~-> zmkDIV@J-B!*@=9vkW-QZ=@Uvx`d~>K@9bov=Gl>(*;fXKQTT4oB)*f8Qu6p7#%i;p z9%fyZgKrSdIcGz$p|K9$Exh6?=N$~W+verIF}A{SS~_V7q>wv|ebCWH-U+zD*U*ip zdj?@z#z0S-1c&`)zMk2U{3;at%b1<K15ecMhLmSP>tKo2%e^>ZKj6hU9r8nd1`cLP z%Da#!wa|p>nT-&-d$}@NgB7kG)-zvQ-iQ3^!YVMOPfI%aHkgl-d?UQco#8u#;u)q) z7#SgM<~&3SUQQAHH;{u7RcseDkOIX{<eY^n?k15ct{0x?z08jpmwiw7;HdoTe7$hi zJit4Ji(nv5fgBH~kN}s=d!TTT?-R0S{{nbBN}+Hto1kAV{?W1pU~sFao4^ERU6t=- z4<70<D+U;1{CeD&6t4(U8Qw_=b2lKY&dx+Z;a>T(ia1!HaQTno0M&ZA*C0<EU9w3O z$?{yS7~l_<zD98;lp=PRgtlkBsYs$SBYN}pD)jjGNe3w&Ho(V`*i(#yX(<0d(FO*6 z%D4P0oGYAD=po9#;5!b))31>5f;=4>U<&kAY$LTV2eUZtI~d#Ld1U5es)>p0E}F#K zgz@F~6*ggJ4kHZE4tu%e8L5H;KTwYXG*i5y8YMWf!=5hWilei}0S<NL3WXxEQwRPM zv;(}VYz9S#2Z~KhataPmn-vahnCKK-_>9_)8t|viN}&NNVnDt%z7AxPryh^c*ik*6 z2$(C*Q9maHh1=yGXyzHsTER){$rWeLUn{t=x~NIWhJn8(I0a(wg&@B!bTP#L<U-8~ zw6KtVxWsvJZwd{fC32tO<+S!Tz~NvnUM45*h~Q`TJHaYNVmf~2XTwp!Cgy-8GNL)< zD`6zeL<-v^-pso$FyhssyD+l5&ijI2ByOM?FD+ulJt8<G-_z%@W%gc$O-zHnbm0_L zp2&!^Y6?U@bOMYY_l|Uc+&i*N+=IuMssYJ}{rKF-`H=Hm>>|LWv5Ns4sXV1-8OVQ* zh2NJvk8PecqL+@QiK2vy^Gv9N_S(ygF5L`YvrLQIDt1B24$;e@%0ENOK*<5IPdsZr zBs!Q|IaO>2E!%}#QqGE9*s9J0ydF*PE=3kP-G#LxK~#KRye95Uy#%-^^|}X=&ZOQH zJMdWZU2#CX82v!Z=01vF2J%Po3TZ%m4=^a!E0>8u@g_^~Ju2T4mWhFI!%~%1>ZGz> zR2r*TMk0sC%3Ufkp-xQJvjZoOA`XVQ!cP2Y4KdOxI9MJpXBbn(66=~QNfHU~1L(}u z8SpzGZMCx`J)3P`C1s#36(Tzk%}m-W*;uK#737Lqk(Jn9-9agxC96G~y`T6V$X_`= zlCs(DS;r-_G@|TN$tsaWXOmj1TiI)vXeE|7_5iwG0dB^(t{1*FaRmwzPbx{tRs~9z znrn7(k`xPawxq7R1zoybdrvB4zn-j;3)y0@;zIUGz-#!GQiFUA&x(%qUFgM8>XEWp ziY*%>>!qmTvp(h<90hOXHh+UH$rI!rJVhc%JZcZtL=m643-)nIT32U6k_6M?n+sWC zv-fgO=H$xFinHbd*-f3Sn>tfB-7($V{<v9?{-U{5cHpy`LC(z`f_c@mHAU;>DJa|C zEYGA<=3-|i?U!xrrTBMb7yD&g0J)_W%QCRnb0a@zyxb$%U&;;airVi08)|<7{6o@$ zXs&@Jo3vX}O(3TFHZ|MhV6fVYc!I~ObhB3~TUj?dt9qD{;UglURyMXg4bn+5zeJW+ zBWx4d%0|ekKzl$YV_Fz9P1(WF)gf+%CFd8D0iDd^yjPS1=*naWV-ODy0XcAf(jaV} zVjfrw`cemn39XIkP&Pw7M?FeEI|2faW|oPvq5#A<un5_wqHjR@(=`x~2sOiZaej6= z*+kIEB!ctj$|^EsyQ+z88KXc=P>}+f`8s=$Yh;S&nouJ%4t6YPc>W;QN3|W&vC=nH z9nzNB`&3=h?Ky3#5^(D$ReYb6pg!$;tPe+d&ZsI-pS54bh#O<SR}HXD=3A;DYk~+a z$i4_?iUVXS_yKmm`M#=?C5J00F_r-8ffh<-2zQ_tjJ#!boLZ7Orw$(cxEwt~t*4<@ zC%e)-UL9n~2+TC6nahG7YHADhj-c;yAGXZh&v&q7i|t@x6Gfe@A=;(xq$!<jYCaei zCJQVmT`z#CV2FKZLv>r!*&JWA9q@S38|qvR_9S&7r=GJ<ZI#J_vC7-C+I({_!B_4V z``njcXG~#joXdDb?Pl_9RcsSDP#ru;_EY6KbqAxgURLMIbCRy93+3qep8)S#9;h8M z**<dRnMs!+#S#AiPynry4oAY5#40vd?kUwlo@1qwCRhH{P{sCv)}(RC#Af=q)#VAA zK2DXPC_r5diI-g5S=b0%-1Bot3|3cpP~qYd;XA1=&O7IjXk*;!`J#*Kf}A!cT_o~* z5-C*#Q)FYVX%G5pFXLPYL)ut__Bl<TNJiU<$$3~OCg)$BI6ZYf+ljgCQt)GUp)og& zIvd&H$*o}5F>sHrflDdYK`hYcTIBoTG9E4L*IW~A;$q*>emr#UK}{1kcETY*d%_2R z)l)v!G|IhT$9nOdtUSJn%ORULKV<e7OcVEF$|+4FjJaDAWXEOo!VkWY*woD(ogSmT zhIVBpY9+~?nWAlyznwbL=kEuX((3Ezhp+gx`hM&OcTuGc3W@Q}+79MU(I2@ECNrZ& zn=SlQxmVjjC%PVR1K+?Mb`huh48%Tu`4b3ng3K${ceL>0ZHOVfT+^6bxt^Pu0kIla z2pwP~0ag%Mt^rtIw;WfrJ=~AUKWP2zkjwzuLu=l{jmy*-fNYMwt!<NUIqqrOz>*l> z>;Hh&A?kXt4I;1rw-KCEfHTHvbpb9HWG~Kz%f5R25ln6aTUR?y*TBA+G@0UA@IJ+6 zxRS!Wt8we}u&L;%!IB9ps6C;}=1$wbV7hQxd7jwEy;?p}Pa^Rd`k)Y*QKS!m5jp{9 zCOw-8inRs*3wWY#rT!Z2aF0ww2B>r`WO^yvsqX_j1D^%{$PYRHsX6SczXEd_&<DAr z$=!NAPt<0>cTiAn9QKXg%qPNg5oZ3|{0<c44kusH``Oo{%?3Yv!{lIyCrSXhsUXF$ zN7@iS$sj3XV`hMynLNqhmPQcg3$yt*!vKFT`4rQJnunSdZpjRu*3X(Ubts)blsm~2 zk<QPa5C981X<r#ZP8ZCIHfBoQ8xbz(%3BeQp>8RMnmQta0=Y;N6h^0HLLmDEgnx@@ zm?u$J)69PdacMKZ_)*rlgvOjpX#DBt>n53udw8;o`T2a1o8)9?tg($B4UP+({O>BQ zMyv7{lhx?u-UcIdFkRD!f&94(e3tamSn!|Bgq+bv66Q`f257MWDxOpZGC7BB=J!pk zhUzjW)f*R~4Yg|k{aGhfi=cV0(SiT&8ss`)7+Z`Ib9nL_MhA0r`j@ho%Y&z`2GV#_ z$$n!1jUIK(Sg5oXo&dC!e-3?gYc3eOcoHUb@vt7WT|D&KmwpvT2_Hc8dw23^-{V)| z06xJ7_#N;tt)F(xPrC$<s?^>v=1S)ZZyO!TJB6tN>A)bgGptT9IhEuJnp0^9bSZn2 zKR0&p<Z@pCt%Tv!D<4$ehd3V14WJb?cw9>{fZi&798$<dh_!%TW01e(yysyy(}S>? zo(gP+EqR4$8{Lw(ArgsfMkEH=j271IFp;yXH%)!`#aspI!?OU%dHffqAk?4(=R=~K zW;o3qFu6Grr1as2T-biOKf)UB!{b4gq@{JlHPz((Y+@u*kMF5#aKa2%Jh?*9Gm-=J zZsk8}_G{cqsmvH@<-WDXMmEz$(ab%anH%ZnM#H-Hb6cX;fIKS68`&n4{d7P)0QblI zTzU*S{jZq#`^XONj(rE@NuNye6X)htE-igS?Nx5iGAoE{+!g7UE3JR>M0U{zf-q|b zBb$_+&b<l^;?Vs_4H8jplnBqRR+}+;iLW!;;0o0X3Bv*X32AT@>k~^Fia?(O#-i^5 zhoU=xBak{i4UM5Vfnq*Qx1$J1FQzGTDb}J#;yr0-Au0#OZ_(57$D!)u@z>D1XnTUh z5QLvVM2F*#bGuP5;65sE1-uMz`Xaa+B_`x6h`gKPaf+8IvI0pTN->{eEyXnycT+s> zp&yqi4i!m(e2TRc*HGL|k(Fq56pzW9AZLq`q^!~sY|#@uMzO|7(<!!4yck7NP&C0r zia8Wl#lXEFC=Bl>156~ClSHtF;wp+Q6pvB7ND(EIJc%KMSC~O5iZv8hQEZ`jjN(O# zXcR3)F^6K!sI49-yegy^O)H{ULva<w7K+CxUZlumkep1$AJF^pRw`SmoJ-|gD!Zuc zqH-gZ8>#H4vY*O16SgAw9qh*M@#CIYHj&L{7qMH}kJ%IKAZy{$xXs)i?f|Fd$MVzo zC-|rMXZhv4T9KsqSaDkMPlYI)5Kaq9afSH4sFX}nnlw(DBb}BmO5aP2JVdUNkH{a( zpUD^GUu0PstsJAwQ9h=uS9+8il{=KJ$^*(1%D*YkDSMSaEA<{#lqy*@LRF-CLbXKo zylRbVlj>!aLOn*Eqb^lHsXnUyOnpIpQ_X91niS1=O}?f~Q>$5~@oJhhr!`kKcQuUm zH`*!MI_(SE4((BGmo`#o(-r7SbhWzGx<BaN(jC<ORoAckL8sDZ>udBI^{?q$^&jeQ z=<n!%(f`I!U1?}AtTAjh_zb%YyA9oje#1S()QGZ(1rg6gY>0R@;x7^JMtmI6A8|e6 zW<;j(apQBww~U94e>Yw>UNss`X45c}%k+%tWzzxEho<AEPfcH$`b_^aagjqJQzL&9 zIm0*V1|IRmCJRFE4c`LzGsW2P+dv*Zm82XRLF7-SZU=-HO#qgZzX`b3z8CO(6w&@) zA<0=)@iyRTT6U)MFvycAhO}jKI($cO;FF$j@eRC0u|m-&G)XPe7J0Y)k?L#J5OsHi z+Bn@b%e26>-gJK|5BFWUX*~Ld;a0($a^Mo|dEo*NAMkfC8{R(>5-A>voT??luhXuM zC21@ok5Dv35c#9XC3fWFZ(^<OP^1Ye`R^iXcwGG7MTmsZ3E!hPajNN1q*p^|s5T-I zl^aydX`lZlyep~OcbH`Ci(E80q}GK#0I&N7NXA?3<^jxOrnEib7GAbaC#50sZza?^ z7yehazw<nMWLo>?qwJF=_zAPNGi<c<6#6ZC7CnPd`|UIA&J^9wA1&1bRbBZz?E3AM zjr;%J-ZIF(joC~g#aH}*O>JNLfNfW5VuT38s+$^kGYk1^&zHF_Ei?8-bqv?8j^STc zjl4ClyP9;5Olus>&xR>H+K|GdqT(sVwl7w!jvw-E?i=#Ei{raCwYHy1;YCLO861&+ z|6L)nuQQ5|!rfEb@1^oa(U+LUjcnIE!sAr=0)Jj0bzk7yV@mlM3^TTUei^?EK7ALQ ad_GWXIsYw-e;(W3(9Oj&zLt|*_x}T@Y&XdO diff --git a/Source/.vs/开发辅助工具/v16/.suo b/Source/.vs/开发辅助工具/v16/.suo index 1e358df1c77407fe7179a2b3b5b22ad08c650d02..ea6b323f49973776585b9398c47567c7a5f89634 100644 GIT binary patch delta 10068 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 K<H)&F1pYr^Z=`Gh delta 10165 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 diff --git a/Source/开发辅助工具/Controls/MingFolding.cs b/Source/开发辅助工具/Controls/MingFolding.cs index b3fe503..a27fc76 100644 --- a/Source/开发辅助工具/Controls/MingFolding.cs +++ b/Source/开发辅助工具/Controls/MingFolding.cs @@ -52,7 +52,7 @@ namespace JackWangCUMT.WinForm { startLines.Push(i); } - if (text_trim.StartsWith("}")) // Look for method endings + if (text_trim.StartsWith("}") || text_trim.EndsWith("},")) // Look for method endings { if (startLines.Count > 0) { @@ -60,23 +60,11 @@ namespace JackWangCUMT.WinForm list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i, 57, FoldType.TypeBody, "...}")); } } - if (text_trim.StartsWith("[")) // Look for method starts + if (text_trim.StartsWith("[")|| text_trim.EndsWith("[")) // Look for method starts { startLines.Push(i); } - if (text_trim.StartsWith("]")) // Look for method endings - { - if (startLines.Count > 0) - { - int start = startLines.Pop(); - list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i, 57, FoldType.TypeBody, "...]")); - } - } - if (text_trim.EndsWith("[")) // Look for method starts - { - startLines.Push(i); - } - if (text_trim.StartsWith("]")) // Look for method endings + if (text_trim.StartsWith("]") || text_trim.EndsWith("],")) // Look for method endings { if (startLines.Count > 0) { diff --git a/Source/开发辅助工具/Properties/AssemblyInfo.cs b/Source/开发辅助工具/Properties/AssemblyInfo.cs index bb0dc2a..15dd497 100644 --- a/Source/开发辅助工具/Properties/AssemblyInfo.cs +++ b/Source/开发辅助工具/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.2012.1501")] -[assembly: AssemblyFileVersion("2.0.2012.1501")] \ No newline at end of file +[assembly: AssemblyVersion("2.0.2012.1701")] +[assembly: AssemblyFileVersion("2.0.2012.1701")] \ No newline at end of file diff --git a/Source/开发辅助工具/Tools/FrmJson.cs b/Source/开发辅助工具/Tools/FrmJson.cs index 2c4f8ed..e91f830 100644 --- a/Source/开发辅助工具/Tools/FrmJson.cs +++ b/Source/开发辅助工具/Tools/FrmJson.cs @@ -1,266 +1,266 @@ -using ICSharpCode.TextEditor.Document; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using WeifenLuo.WinFormsUI.Docking; - -namespace 开发辅助工具.Tools -{ - public partial class FrmJson : DockContent - { - public FrmJson() - { - InitializeComponent(); - textEditorControl1.Document.FoldingManager.FoldingStrategy = new JackWangCUMT.WinForm.MingFolding(); - } - private void LoadTreeList(TreeNodeCollection nodes,JObject jo) - { - foreach (var item in jo) - { - if (item.Value.HasValues) - { - var node = nodes.Add(item.Key.ToString()); - node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; - try - { - JArray jar = JArray.Parse(item.Value.ToString()); - if (jar != null) - { - for (int i = 0; i < jar.Count; i++) - { - var node1 = node.Nodes.Add(i.ToString()); - node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; - LoadTreeList(node1.Nodes, (JObject)JsonConvert.DeserializeObject(jar[i].ToString())); - //TreeNode new_child = new TreeNode(); - //new_child.Text = jar[i].ToString(); - //node.Nodes.Add(new_child); - } - } - } - catch(Exception) - { LoadTreeList(node.Nodes, (JObject)JsonConvert.DeserializeObject(item.Value.ToString())); } - - //JArray jar = JArray.Parse(item.Value.ToString()); - //if (jar.Count != 0) - { - - //for (int i = 0; i < jar.Count; i++) - //{ - // TreeNode new_child = new TreeNode(); - // new_child.Text = jar[i].ToString(); - // nodes.Add(new_child); - //} - } - } - else - { - var node = nodes.Add(item.ToString()); - node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; - } - } - } - private void BtnFormat_Click(object sender, EventArgs e) - { - string json_text = textEditorControl1.Text; - treeView1.Nodes.Clear(); - //if (Manager.Json.IsJson(json_text)) - { - try - { - textEditorControl1.Document.TextContent = Manager.Json.ConvertJsonString(json_text); - textEditorControl1.Refresh(); - JObject jo = null; - if (Manager.Json.IsArray(json_text)) - { - var node2 = treeView1.Nodes.Add("0"); - JArray jar = JArray.Parse(json_text); - ScanArray(node2.Nodes, jar); - } - else - { - jo = (JObject)JsonConvert.DeserializeObject(json_text); - Scan(treeView1.Nodes, jo); - } - void Scan(TreeNodeCollection nodes, JObject _jo) - { - IEnumerable<JProperty> properties = _jo.Properties(); - foreach (JProperty item in properties) - { - if (item.Value.Type == JTokenType.Array) - { - var node2 = nodes.Add(item.Name); - node2.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; - JArray jar = JArray.Parse(item.Value.ToString()); - ScanArray(node2.Nodes, jar); - } - else if (item.Value.Type == JTokenType.Object) - { - var node2 = nodes.Add(item.Name); - node2.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; - Scan(node2.Nodes, (JObject)JsonConvert.DeserializeObject(item.Value.ToString())); - } - else { - var node = nodes.Add(item.Name + ":" + item.Value + "|" + item.Value.Type.ToString()); - node.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; - } - //Console.WriteLine(item.Name + ":" + item.Value); - } - //var values = _jo.Values<JProperty>(); - //foreach (var item in values) - //{ - // var va = item.Value<JProperty>().Children.Children<JProperty>(); - // var node = nodes.Add(item.ToString()); - // //if(item.HasValues) - // //Scan(node.Nodes,(JObject)JsonConvert.DeserializeObject(item.ToString())); - //} - } - void ScanArray(TreeNodeCollection nodes, JArray jar) - { - if (jar != null) - { - for (int i = 0; i < jar.Count; i++) - { - var node3 = nodes.Add(i.ToString()); - if (jar[i].Type == JTokenType.Object) - { - Scan(node3.Nodes, (JObject)jar[i]); - } - else - { - node3.Nodes.Add(jar[i].ToString()); - node3.Tag = new JsonInfo() { name = jar[i].ToString() }; - } - } - } - } - //if (Manager.Json.IsArray(json_text)) - //{ - // JArray jar = JArray.Parse(json_text); - // if (jar != null) - // { - // for (int i = 0; i < jar.Count; i++) - // { - // var node1 = treeView1.Nodes.Add(i.ToString()); - // LoadTreeList(node1.Nodes, (JObject)JsonConvert.DeserializeObject(jar[i].ToString())); - // //TreeNode new_child = new TreeNode(); - // //new_child.Text = jar[i].ToString(); - // //node.Nodes.Add(new_child); - // } - // } - //} - //else - //{ - // jo = (JObject)JsonConvert.DeserializeObject(json_text); - //} - //LoadTreeList(treeView1.Nodes,jo); - //for (int i = 0; i < jo.Count; i++) - //{ - // treeView1.Nodes.Add(jo..ToString()); - //} - } - catch(Exception ex) - { - MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - //else - //{ - // MessageBox.Show("无效的Json内容", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - // textEditorControl1.Document.TextContent = json_text; - // textEditorControl1.Refresh(); - //} - } - public void LoadJson(string json_text) - { - textEditorControl1.Document.TextContent = json_text; - textEditorControl1.Refresh(); - BtnFormat.PerformClick(); - } - private void 复制键名ToolStripMenuItem_Click(object sender, EventArgs e) - { - if (treeView1.SelectedNode == null) { return; } - JsonInfo item = (JsonInfo)treeView1.SelectedNode.Tag; - ryCommon.RyFiles.CopyToClip(item.name); - } - - private void 复制键值ToolStripMenuItem_Click(object sender, EventArgs e) - { - if (treeView1.SelectedNode == null) { return; } - if (treeView1.SelectedNode.Tag == null) { return; } - JsonInfo item = (JsonInfo)treeView1.SelectedNode.Tag; - ryCommon.RyFiles.CopyToClip(item.value); - } - - private void BtnPasteJson_Click(object sender, EventArgs e) - { - textEditorControl1.BeginUpdate(); - textEditorControl1.Document.TextContent = Clipboard.GetText(); - textEditorControl1.Refresh(); - textEditorControl1.EndUpdate(); - BtnFormat.PerformClick(); - } - - private void BtnCopyJson_Click(object sender, EventArgs e) - { - ryCommon.RyFiles.CopyToClip(textEditorControl1.Text); - } - - private void FrmJson_Load(object sender, EventArgs e) - { - textEditorControl1.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("JSON"); - } - - private void TreeView1_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Right)//判断你点的是不是右键 - { - Point ClickPoint = new Point(e.X, e.Y); - TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint); - if (CurrentNode != null)//判断你点的是不是一个节点 - { - treeView1.SelectedNode = CurrentNode;//选中这个节点 - } - } - } - - private void 展开ToolStripMenuItem_Click(object sender, EventArgs e) - { - treeView1.ExpandAll(); - } - - private void 折叠ToolStripMenuItem_Click(object sender, EventArgs e) - { - treeView1.CollapseAll(); - } - - private void CopyJsonByCHS_Click(object sender, EventArgs e) - { - try - { - JObject jo = (JObject)JsonConvert.DeserializeObject(textEditorControl1.Text); - var aa = Newtonsoft.Json.JsonConvert.SerializeObject(jo, new Newtonsoft.Json.JsonSerializerSettings() { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii }); - ryCommon.RyFiles.CopyToClip(aa); - } - catch(Exception ex) { - MessageBox.Show(ex.Message, "出错", MessageBoxButtons.OK, MessageBoxIcon.Information); - } +using ICSharpCode.TextEditor.Document; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace 开发辅助工具.Tools +{ + public partial class FrmJson : DockContent + { + public FrmJson() + { + InitializeComponent(); + textEditorControl1.Document.FoldingManager.FoldingStrategy = new JackWangCUMT.WinForm.MingFolding(); + } + private void LoadTreeList(TreeNodeCollection nodes,JObject jo) + { + foreach (var item in jo) + { + if (item.Value.HasValues) + { + var node = nodes.Add(item.Key.ToString()); + node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; + try + { + JArray jar = JArray.Parse(item.Value.ToString()); + if (jar != null) + { + for (int i = 0; i < jar.Count; i++) + { + var node1 = node.Nodes.Add(i.ToString()); + node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; + LoadTreeList(node1.Nodes, (JObject)JsonConvert.DeserializeObject(jar[i].ToString())); + //TreeNode new_child = new TreeNode(); + //new_child.Text = jar[i].ToString(); + //node.Nodes.Add(new_child); + } + } + } + catch(Exception) + { LoadTreeList(node.Nodes, (JObject)JsonConvert.DeserializeObject(item.Value.ToString())); } + + //JArray jar = JArray.Parse(item.Value.ToString()); + //if (jar.Count != 0) + { + + //for (int i = 0; i < jar.Count; i++) + //{ + // TreeNode new_child = new TreeNode(); + // new_child.Text = jar[i].ToString(); + // nodes.Add(new_child); + //} + } + } + else + { + var node = nodes.Add(item.ToString()); + node.Tag = new JsonInfo() { name = item.Key.ToString(), value = item.Value.ToString() }; + } + } + } + private void BtnFormat_Click(object sender, EventArgs e) + { + string json_text = textEditorControl1.Text; + treeView1.Nodes.Clear(); + //if (Manager.Json.IsJson(json_text)) + { + try + { + textEditorControl1.Document.TextContent = Manager.Json.ConvertJsonString(json_text); + textEditorControl1.Refresh(); + JObject jo = null; + if (Manager.Json.IsArray(json_text)) + { + var node2 = treeView1.Nodes.Add("0"); + JArray jar = JArray.Parse(json_text); + ScanArray(node2.Nodes, jar); + } + else + { + jo = (JObject)JsonConvert.DeserializeObject(json_text); + Scan(treeView1.Nodes, jo); + } + void Scan(TreeNodeCollection nodes, JObject _jo) + { + IEnumerable<JProperty> properties = _jo.Properties(); + foreach (JProperty item in properties) + { + if (item.Value.Type == JTokenType.Array) + { + var node2 = nodes.Add(item.Name); + node2.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; + JArray jar = JArray.Parse(item.Value.ToString()); + ScanArray(node2.Nodes, jar); + } + else if (item.Value.Type == JTokenType.Object) + { + var node2 = nodes.Add(item.Name); + node2.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; + Scan(node2.Nodes, (JObject)JsonConvert.DeserializeObject(item.Value.ToString())); + } + else { + var node = nodes.Add(item.Name + ":" + item.Value + "|" + item.Value.Type.ToString()); + node.Tag = new JsonInfo() { name = item.Name, value = item.Value.ToString() }; + } + //Console.WriteLine(item.Name + ":" + item.Value); + } + //var values = _jo.Values<JProperty>(); + //foreach (var item in values) + //{ + // var va = item.Value<JProperty>().Children.Children<JProperty>(); + // var node = nodes.Add(item.ToString()); + // //if(item.HasValues) + // //Scan(node.Nodes,(JObject)JsonConvert.DeserializeObject(item.ToString())); + //} + } + void ScanArray(TreeNodeCollection nodes, JArray jar) + { + if (jar != null) + { + for (int i = 0; i < jar.Count; i++) + { + var node3 = nodes.Add(i.ToString()); + if (jar[i].Type == JTokenType.Object) + { + Scan(node3.Nodes, (JObject)jar[i]); + } + else + { + node3.Nodes.Add(jar[i].ToString()); + node3.Tag = new JsonInfo() { name = jar[i].ToString() }; + } + } + } + } + //if (Manager.Json.IsArray(json_text)) + //{ + // JArray jar = JArray.Parse(json_text); + // if (jar != null) + // { + // for (int i = 0; i < jar.Count; i++) + // { + // var node1 = treeView1.Nodes.Add(i.ToString()); + // LoadTreeList(node1.Nodes, (JObject)JsonConvert.DeserializeObject(jar[i].ToString())); + // //TreeNode new_child = new TreeNode(); + // //new_child.Text = jar[i].ToString(); + // //node.Nodes.Add(new_child); + // } + // } + //} + //else + //{ + // jo = (JObject)JsonConvert.DeserializeObject(json_text); + //} + //LoadTreeList(treeView1.Nodes,jo); + //for (int i = 0; i < jo.Count; i++) + //{ + // treeView1.Nodes.Add(jo..ToString()); + //} + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + //else + //{ + // MessageBox.Show("无效的Json内容", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + // textEditorControl1.Document.TextContent = json_text; + // textEditorControl1.Refresh(); + //} + } + public void LoadJson(string json_text) + { + textEditorControl1.Document.TextContent = json_text; + textEditorControl1.Refresh(); + BtnFormat.PerformClick(); + } + private void 复制键名ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (treeView1.SelectedNode == null) { return; } + JsonInfo item = (JsonInfo)treeView1.SelectedNode.Tag; + ryCommon.RyFiles.CopyToClip(item.name); + } + + private void 复制键值ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (treeView1.SelectedNode == null) { return; } + if (treeView1.SelectedNode.Tag == null) { return; } + JsonInfo item = (JsonInfo)treeView1.SelectedNode.Tag; + ryCommon.RyFiles.CopyToClip(item.value); + } + + private void BtnPasteJson_Click(object sender, EventArgs e) + { + textEditorControl1.BeginUpdate(); + textEditorControl1.Document.TextContent = Clipboard.GetText(); + textEditorControl1.Refresh(); + textEditorControl1.EndUpdate(); + BtnFormat.PerformClick(); + } + + private void BtnCopyJson_Click(object sender, EventArgs e) + { + ryCommon.RyFiles.CopyToClip(textEditorControl1.Text); + } + + private void FrmJson_Load(object sender, EventArgs e) + { + textEditorControl1.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("JSON"); + } + + private void TreeView1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right)//判断你点的是不是右键 + { + Point ClickPoint = new Point(e.X, e.Y); + TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint); + if (CurrentNode != null)//判断你点的是不是一个节点 + { + treeView1.SelectedNode = CurrentNode;//选中这个节点 + } + } + } + + private void 展开ToolStripMenuItem_Click(object sender, EventArgs e) + { + treeView1.ExpandAll(); + } + + private void 折叠ToolStripMenuItem_Click(object sender, EventArgs e) + { + treeView1.CollapseAll(); + } + + private void CopyJsonByCHS_Click(object sender, EventArgs e) + { + try + { + JObject jo = (JObject)JsonConvert.DeserializeObject(textEditorControl1.Text); + var aa = Newtonsoft.Json.JsonConvert.SerializeObject(jo, new Newtonsoft.Json.JsonSerializerSettings() { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii }); + ryCommon.RyFiles.CopyToClip(aa); + } + catch(Exception ex) { + MessageBox.Show(ex.Message, "出错", MessageBoxButtons.OK, MessageBoxIcon.Information); + } } private void textEditorControl1_TextChanged(object sender, EventArgs e) { textEditorControl1.Document.FoldingManager.UpdateFoldings(null, null); } - } - public class JsonInfo - { - public string name = ""; - public string value = ""; - } -} + } + public class JsonInfo + { + public string name = ""; + public string value = ""; + } +} diff --git a/Source/开发辅助工具/Tools/FrmWebGet.cs b/Source/开发辅助工具/Tools/FrmWebGet.cs index 787b068..9ac1d59 100644 --- a/Source/开发辅助工具/Tools/FrmWebGet.cs +++ b/Source/开发辅助工具/Tools/FrmWebGet.cs @@ -1,789 +1,803 @@ -using DotNet4.Utilities; -using ICSharpCode.TextEditor.Document; -using ryCommon; -using ryCommonDb; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Windows.Forms; -using WeifenLuo.WinFormsUI.Docking; -using 开发辅助工具.Manager; - -namespace 开发辅助工具.Tools -{ - public partial class FrmWebGet : DockContent - { - public FrmWebGet() - { - InitializeComponent(); - LoadPram(); +using DotNet4.Utilities; +using ICSharpCode.TextEditor.Document; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; +using 开发辅助工具.Manager; + +namespace 开发辅助工具.Tools +{ + public partial class FrmWebGet : DockContent + { + public FrmWebGet() + { + InitializeComponent(); + LoadPram(); tabControl2.SelectedTab = tabPage12; - Te_Format.Document.FoldingManager.FoldingStrategy = new JackWangCUMT.WinForm.MingFolding(); - } - private void LoadPram() - { - Te_Format.IsReadOnly = true; - CbbContentType.SelectedIndex = 0; - CbbUserAgent.SelectedIndex = 0; - CbbEncoding.SelectedIndex = 0; - CbbTimeout.SelectedIndex = CbbTimeout.Items.Count-2; - CbbWriteTimeout.SelectedIndex = CbbWriteTimeout.Items.Count - 2; - CbbUserAgent.Items.AddRange(new UserAgentInfo[]{ - new UserAgentInfo() { name = "QQ浏览器极速模式", useragent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6776.400 QQBrowser/10.3.2601.400" }, - new UserAgentInfo() { name = "360浏览器极速模式", useragent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" }, - new UserAgentInfo() { name = "QQ浏览器手机版", useragent = "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36" }, - new UserAgentInfo() { name = "微信", useragent = "Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380" }, - new UserAgentInfo() { name = "iPhone", useragent = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C28 Safari/419.3" }, - new UserAgentInfo() { name = "安卓", useragent = "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19" }, - }); - TxtPost.AddSeparatorMenu(); - TxtPost.AddMenu("将选定项进行Url编码(UTF8)", "").Click += new EventHandler((object sender2, EventArgs e2) => - { - RyWeb.QuickWeb web = new RyWeb.QuickWeb(); - TxtPost.SelectedText = web.UrlEncode(TxtPost.SelectedText, Encoding.UTF8); - }); - TxtPost.AddMenu("将选定项进行Url编码(GB2312)", "").Click += new EventHandler((object sender2, EventArgs e2) => - { - RyWeb.QuickWeb web = new RyWeb.QuickWeb(); - TxtPost.SelectedText = web.UrlEncode(TxtPost.SelectedText, Encoding.GetEncoding("GB2312")); - }); - TxtPost.AddSeparatorMenu(); - TxtPost.AddMenu("将选定项进行Url解码(UTF8)", "").Click += new EventHandler((object sender2, EventArgs e2) => - { - TxtPost.SelectedText = RyWeb.WebDecode.UrlDecode(TxtPost.SelectedText, Encoding.UTF8); - }); - TxtPost.AddMenu("将选定项进行Url解码(GB2312)", "").Click += new EventHandler((object sender2, EventArgs e2) => - { - TxtPost.SelectedText = RyWeb.WebDecode.UrlDecode(TxtPost.SelectedText, Encoding.GetEncoding("GB2312")); - }); - TxtPost.AddSeparatorMenu(); - TxtPost.AddMenu("查询选定项对应的时间", "unixtime").Click += new EventHandler((object sender2, EventArgs e2) => - { - MessageBox.Show("当前选中的时间是:" + RyDate.UnixTimeToDateTime(TxtPost.SelectedText).ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - }); - TxtPost.AddMenu("插入时间戳", "").Click += new EventHandler((object sender2, EventArgs e2) => - { - SuperDesign.Controls.FrmInsertUnixTime frm = new SuperDesign.Controls.FrmInsertUnixTime(); - frm.Icon = Icon; - var text = TxtPost.SelectedText; - if(text.Length>4 && text.IsInt()) - { - frm.dateTimePickerEX1.Value = RyDate.UnixTimeToDateTime(text); - } - if (frm.ShowDialog()==DialogResult.OK) - { - TxtPost.SelectedText = RyDate.DateTimeToUnixTime(frm.dateTimePickerEX1.Value).ToString(); - } - // MessageBox.Show("当前选中的时间是:" + RyDate.UnixTimeToDateTime(TxtPost.SelectedText).ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - }); - TxtPost.OnMenuOpening += TxtPost_OnMenuOpening; - } - - private void TxtPost_OnMenuOpening(object sender, CancelEventArgs e) - { - var item= TxtPost.GetMenuItem("unixtime"); - if(item!=null) - { - var text = TxtPost.SelectedText; - item.Visible = text.IsInt() && text.Length>4; - } - } - - private bool IsExit = false; - private bool IsRunning = false; - Thread th; - private void BtnRunHtml_Click(object sender, EventArgs e) - { - if (IsRunning) { - IsExit = true; - BtnRunHtml.Text = "停止中"; ; - if (th!=null && th.IsAlive) - { - th.Abort(); - } - return; - } - IsExit = false; - IsRunning = true; - BtnRunHtml.Text = "停止执行"; ; - #region 将当前设置赋值到查询 - this.RichHtml.Text = "正在获取数据..."; - Te_Format.Text = "正在获取数据..."; - this.RichCookie.Text = ""; - RichHeader.Text = ""; - RichStatus.Text = ""; - extendedWebBrowser1.LoadStrings(""); - if (TxtUrl.Text.IndexOfEx("//") == 0) - { - TxtUrl.Text = "http:" + TxtUrl.Text; - } - else if (TxtUrl.Text.IndexOfEx("://") == 0) - { - TxtUrl.Text = "http" + TxtUrl.Text; - } - else if (TxtUrl.Text.IndexOfEx("http") != 0) - { - TxtUrl.Text = "http://" + TxtUrl.Text.TrimStart('/'); - } - - string str = "get"; - if (RbGet.Checked) - { - str = "get"; - } - if (RbPost.Checked) - { - str = "post"; - } - HttpItem item = new HttpItem - { - URL = TxtUrl.Text.Trim(), - Method = str, - IsToLower = this.ChkUrlLower.Checked, - Cookie = this.TxtCookie.Text.Trim(), - Referer = this.CbbReferer.Text.Trim(), - Postdata = this.TxtPost.Text.Trim(), - Timeout = Convert.ToInt32(this.CbbTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, - ReadWriteTimeout = Convert.ToInt32(this.CbbWriteTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, - UserAgent = this.CbbUserAgent.Text, - ContentType = this.CbbContentType.Text, - Allowautoredirect = this.ChkJump.Checked, - ProtocolVersion = System.Net.HttpVersion.Version11, - ResultType = ChkGetPic.Checked ? ResultType.Byte : ResultType.String, - }; - if (TxtInputHeader.Text.Length > 0) - { - try - { - string[] item_header = TxtInputHeader.Text.Replace("\r", "").Split('\n'); - for (int i = 0; i < item_header.Length; i++) - { - item.Header.Add(item_header[i]); - //int iPos = item_header[i].LastIndexOf(":"); - //if (iPos > 0) - //{ - // var header_name = item_header[i].Substring(0, iPos); - // var header_value = item_header[i].Substring(iPos + 1); - // item.Header.Add(header_name, header_value); - //} - } - } - catch (Exception exception) - { - this.RichHtml.Text = exception.Message; - Te_Format.Text = ""; - tabControl2.SelectedIndex = 0; - BtnRunHtml.Text = "执行"; - IsRunning = false; - return; - } - } - if (CbbUserAgent.SelectedIndex != -1) - { - if (CbbUserAgent.SelectedItem is UserAgentInfo) - { - item.UserAgent = ((UserAgentInfo)CbbUserAgent.SelectedItem).useragent; - } - } - if (!string.IsNullOrEmpty(this.CbbIp.Text.Trim())) - { - item.ProxyIp = this.CbbIp.Text.Trim(); - } - if (!this.CbbEncoding.Text.Contains("自动")) - { - item.Encoding = Encoding.GetEncoding(this.CbbEncoding.Text.Trim()); - } - #endregion - if (th != null && th.IsAlive) - { - th.Abort(); - } - th = new Thread(Start); - th.Start(); - void Start() - { - try - { - var http = new HttpHelper(); - DateTime dt = DateTime.Now; - var result = http.GetHtml(item); - DateTime dt_end = DateTime.Now; - _ = this.Invoke(new Action(() => - { - #region 将获得的结果显示出来 - if (result.Html.Length > 1024 * 1024 * 4) - { - this.RichHtml.Text = "获取失败,您要获取的网页超过4MB,暂时无法获取。"; - Te_Format.Text = "获取失败,您要获取的网页超过4MB,暂时无法获取。"; - } - else - { - if (result.StatusCode == System.Net.HttpStatusCode.Redirect) - { - if (!ChkJump.Checked) - { - switch (MessageBox.Show("当前Url需要跳转,是否勾选跳转重试获取?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) - { - case DialogResult.Yes: - ChkJump.Checked = true; - IsRunning = false; - BtnRunHtml_Click(sender, e); - return; - } - } - } - RichHtml.Text = string.Empty; - if (this.ChkGetPic.Checked) - { - pictureBox1.Image = this.ByteArrayToImage(result.ResultByte); - RichHtml.Visible = false; - pictureBox1.Visible = true; - tabControl2.SelectedIndex = 0; - AddUrl("", TxtUrl.Text); - } - else - { - this.RichHtml.Text = result.Html; - if (Manager.Json.IsJson(result.Html)) - { - Te_Format.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("JSON"); - Te_Format.Text = Manager.Json.ConvertJsonString(result.Html); - AddUrl("", TxtUrl.Text); - } - else - { - string[] _format_html = result.Html.Replace("\r", "").Split('\n'); - string _html = ""; - for (int i = 0; i < _format_html.Length; i++) - { - if (_format_html[i].Trim().Length == 0) - { - continue; - } - if (_html.Length > 0) { _html += "\r\n"; } - _html += _format_html[i]; - } + Te_Format.Document.FoldingManager.FoldingStrategy = new JackWangCUMT.WinForm.MingFolding(); + } + private void LoadPram() + { + Te_Format.IsReadOnly = true; + CbbContentType.SelectedIndex = 0; + CbbUserAgent.SelectedIndex = 0; + CbbEncoding.SelectedIndex = 0; + CbbTimeout.SelectedIndex = CbbTimeout.Items.Count-2; + CbbWriteTimeout.SelectedIndex = CbbWriteTimeout.Items.Count - 2; + CbbUserAgent.Items.AddRange(new UserAgentInfo[]{ + new UserAgentInfo() { name = "QQ浏览器极速模式", useragent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6776.400 QQBrowser/10.3.2601.400" }, + new UserAgentInfo() { name = "360浏览器极速模式", useragent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" }, + new UserAgentInfo() { name = "QQ浏览器手机版", useragent = "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36" }, + new UserAgentInfo() { name = "微信", useragent = "Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380" }, + new UserAgentInfo() { name = "iPhone", useragent = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C28 Safari/419.3" }, + new UserAgentInfo() { name = "安卓", useragent = "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19" }, + }); + TxtPost.AddSeparatorMenu(); + TxtPost.AddMenu("将选定项进行Url编码(UTF8)", "").Click += new EventHandler((object sender2, EventArgs e2) => + { + RyWeb.QuickWeb web = new RyWeb.QuickWeb(); + TxtPost.SelectedText = web.UrlEncode(TxtPost.SelectedText, Encoding.UTF8); + }); + TxtPost.AddMenu("将选定项进行Url编码(GB2312)", "").Click += new EventHandler((object sender2, EventArgs e2) => + { + RyWeb.QuickWeb web = new RyWeb.QuickWeb(); + TxtPost.SelectedText = web.UrlEncode(TxtPost.SelectedText, Encoding.GetEncoding("GB2312")); + }); + TxtPost.AddSeparatorMenu(); + TxtPost.AddMenu("将选定项进行Url解码(UTF8)", "").Click += new EventHandler((object sender2, EventArgs e2) => + { + TxtPost.SelectedText = RyWeb.WebDecode.UrlDecode(TxtPost.SelectedText, Encoding.UTF8); + }); + TxtPost.AddMenu("将选定项进行Url解码(GB2312)", "").Click += new EventHandler((object sender2, EventArgs e2) => + { + TxtPost.SelectedText = RyWeb.WebDecode.UrlDecode(TxtPost.SelectedText, Encoding.GetEncoding("GB2312")); + }); + TxtPost.AddSeparatorMenu(); + TxtPost.AddMenu("查询选定项对应的时间", "unixtime").Click += new EventHandler((object sender2, EventArgs e2) => + { + MessageBox.Show("当前选中的时间是:" + RyDate.UnixTimeToDateTime(TxtPost.SelectedText).ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + }); + TxtPost.AddMenu("插入时间戳", "").Click += new EventHandler((object sender2, EventArgs e2) => + { + SuperDesign.Controls.FrmInsertUnixTime frm = new SuperDesign.Controls.FrmInsertUnixTime(); + frm.Icon = Icon; + var text = TxtPost.SelectedText; + if(text.Length>4 && text.IsInt()) + { + frm.dateTimePickerEX1.Value = RyDate.UnixTimeToDateTime(text); + } + if (frm.ShowDialog()==DialogResult.OK) + { + TxtPost.SelectedText = RyDate.DateTimeToUnixTime(frm.dateTimePickerEX1.Value).ToString(); + } + // MessageBox.Show("当前选中的时间是:" + RyDate.UnixTimeToDateTime(TxtPost.SelectedText).ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + }); + TxtPost.OnMenuOpening += TxtPost_OnMenuOpening; + } + + private void TxtPost_OnMenuOpening(object sender, CancelEventArgs e) + { + var item= TxtPost.GetMenuItem("unixtime"); + if(item!=null) + { + var text = TxtPost.SelectedText; + item.Visible = text.IsInt() && text.Length>4; + } + } + + private bool IsExit = false; + private bool IsRunning = false; + Thread th; + private void BtnRunHtml_Click(object sender, EventArgs e) + { + if (IsRunning) { + IsExit = true; + BtnRunHtml.Text = "停止中"; ; + if (th!=null && th.IsAlive) + { + th.Abort(); + } + return; + } + IsExit = false; + IsRunning = true; + BtnRunHtml.Text = "停止执行"; ; + #region 将当前设置赋值到查询 + this.RichHtml.Text = "正在获取数据..."; + Te_Format.Text = "正在获取数据..."; + this.RichCookie.Text = ""; + RichHeader.Text = ""; + RichStatus.Text = ""; + extendedWebBrowser1.LoadStrings(""); + if (TxtUrl.Text.IndexOfEx("//") == 0) + { + TxtUrl.Text = "http:" + TxtUrl.Text; + } + else if (TxtUrl.Text.IndexOfEx("://") == 0) + { + TxtUrl.Text = "http" + TxtUrl.Text; + } + else if (TxtUrl.Text.IndexOfEx("http") != 0) + { + TxtUrl.Text = "http://" + TxtUrl.Text.TrimStart('/'); + } + + string str = "get"; + if (RbGet.Checked) + { + str = "get"; + } + if (RbPost.Checked) + { + str = "post"; + } + var PostData = this.TxtPost.Text.Trim(); + if (CbbContentType.Text== "application/json") + { + try + { + JObject jo = (JObject)JsonConvert.DeserializeObject(PostData); + PostData = Newtonsoft.Json.JsonConvert.SerializeObject(jo, new Newtonsoft.Json.JsonSerializerSettings() { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii }); + } + catch (Exception ex) + { + } + } + HttpItem item = new HttpItem + { + URL = TxtUrl.Text.Trim(), + Method = str, + IsToLower = this.ChkUrlLower.Checked, + Cookie = this.TxtCookie.Text.Trim(), + Referer = this.CbbReferer.Text.Trim(), + Postdata = PostData, + Timeout = Convert.ToInt32(this.CbbTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, + ReadWriteTimeout = Convert.ToInt32(this.CbbWriteTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, + UserAgent = this.CbbUserAgent.Text, + ContentType = this.CbbContentType.Text, + Allowautoredirect = this.ChkJump.Checked, + ProtocolVersion = System.Net.HttpVersion.Version11, + ResultType = ChkGetPic.Checked ? ResultType.Byte : ResultType.String, + }; + if (TxtInputHeader.Text.Length > 0) + { + try + { + string[] item_header = TxtInputHeader.Text.Replace("\r", "").Split('\n'); + for (int i = 0; i < item_header.Length; i++) + { + item.Header.Add(item_header[i]); + //int iPos = item_header[i].LastIndexOf(":"); + //if (iPos > 0) + //{ + // var header_name = item_header[i].Substring(0, iPos); + // var header_value = item_header[i].Substring(iPos + 1); + // item.Header.Add(header_name, header_value); + //} + } + } + catch (Exception exception) + { + this.RichHtml.Text = exception.Message; + Te_Format.Text = ""; + tabControl2.SelectedIndex = 0; + BtnRunHtml.Text = "执行"; + IsRunning = false; + return; + } + } + if (CbbUserAgent.SelectedIndex != -1) + { + if (CbbUserAgent.SelectedItem is UserAgentInfo) + { + item.UserAgent = ((UserAgentInfo)CbbUserAgent.SelectedItem).useragent; + } + } + if (!string.IsNullOrEmpty(this.CbbIp.Text.Trim())) + { + item.ProxyIp = this.CbbIp.Text.Trim(); + } + if (!this.CbbEncoding.Text.Contains("自动")) + { + item.Encoding = Encoding.GetEncoding(this.CbbEncoding.Text.Trim()); + } + #endregion + if (th != null && th.IsAlive) + { + th.Abort(); + } + th = new Thread(Start); + th.Start(); + void Start() + { + try + { + var http = new HttpHelper(); + DateTime dt = DateTime.Now; + var result = http.GetHtml(item); + DateTime dt_end = DateTime.Now; + _ = this.Invoke(new Action(() => + { + #region 将获得的结果显示出来 + if (result.Html.Length > 1024 * 1024 * 4) + { + this.RichHtml.Text = "获取失败,您要获取的网页超过4MB,暂时无法获取。"; + Te_Format.Text = "获取失败,您要获取的网页超过4MB,暂时无法获取。"; + } + else + { + if (result.StatusCode == System.Net.HttpStatusCode.Redirect) + { + if (!ChkJump.Checked) + { + switch (MessageBox.Show("当前Url需要跳转,是否勾选跳转重试获取?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) + { + case DialogResult.Yes: + ChkJump.Checked = true; + IsRunning = false; + BtnRunHtml_Click(sender, e); + return; + } + } + } + RichHtml.Text = string.Empty; + if (this.ChkGetPic.Checked) + { + pictureBox1.Image = this.ByteArrayToImage(result.ResultByte); + RichHtml.Visible = false; + pictureBox1.Visible = true; + tabControl2.SelectedIndex = 0; + AddUrl("", TxtUrl.Text); + } + else + { + this.RichHtml.Text = result.Html; + if (Manager.Json.IsJson(result.Html)) + { + Te_Format.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("JSON"); + Te_Format.Text = Manager.Json.ConvertJsonString(result.Html); + AddUrl("", TxtUrl.Text); + } + else + { + string[] _format_html = result.Html.Replace("\r", "").Split('\n'); + string _html = ""; + for (int i = 0; i < _format_html.Length; i++) + { + if (_format_html[i].Trim().Length == 0) + { + continue; + } + if (_html.Length > 0) { _html += "\r\n"; } + _html += _format_html[i]; + } Te_Format.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("HTML"); try { Te_Format.Text = JJCCX.Xml.HtmlFormater.ConvertToXml(_html, true); - } - catch + } + catch { Te_Format.Text = _html; - } - if (result.StatusCode == System.Net.HttpStatusCode.Redirect || result.StatusCode == System.Net.HttpStatusCode.OK) - { - string title = ""; - try - { - HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); - htmlDoc.LoadHtml(result.Html); - var anchors = htmlDoc.DocumentNode.SelectNodes("//title"); - if (anchors != null && anchors.Count > 0) - { - title = RyWeb.WebDecode.ConvertHtmlInner(anchors[0].InnerText); - } - } - catch { } - AddUrl(title, TxtUrl.Text); - } - } - this.RichHtml.Visible = true; - this.pictureBox1.Visible = false; - } - } - this.RichCookie.Text = result.Cookie; - var timespan = (dt_end - dt).TotalMilliseconds.ToInt(); - string timespan_str = ""; - if (timespan < 1000) { timespan_str = timespan + "毫秒"; } - else { timespan_str = timespan / 1000 + "秒" + timespan % 1000 + "毫秒"; } - this.RichStatus.Text = "StatusCode:" + result.StatusCode.ToString() + "\r\nStatusDescription:" + result.StatusDescription + "\r\n耗时:" + timespan_str; - this.RichHeader.Text = ""; + } + if (result.StatusCode == System.Net.HttpStatusCode.Redirect || result.StatusCode == System.Net.HttpStatusCode.OK) + { + string title = ""; + try + { + HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); + htmlDoc.LoadHtml(result.Html); + var anchors = htmlDoc.DocumentNode.SelectNodes("//title"); + if (anchors != null && anchors.Count > 0) + { + title = RyWeb.WebDecode.ConvertHtmlInner(anchors[0].InnerText); + } + } + catch { } + AddUrl(title, TxtUrl.Text); + } + } + this.RichHtml.Visible = true; + this.pictureBox1.Visible = false; + } + } + this.RichCookie.Text = result.Cookie; + var timespan = (dt_end - dt).TotalMilliseconds.ToInt(); + string timespan_str = ""; + if (timespan < 1000) { timespan_str = timespan + "毫秒"; } + else { timespan_str = timespan / 1000 + "秒" + timespan % 1000 + "毫秒"; } + this.RichStatus.Text = "StatusCode:" + result.StatusCode.ToString() + "\r\nStatusDescription:" + result.StatusDescription + "\r\n耗时:" + timespan_str; + this.RichHeader.Text = ""; if (result.Header != null) { foreach (string str1 in result.Header.AllKeys) { string text = this.RichHeader.Text; this.RichHeader.Text = text + str1 + ":" + result.Header[str1].ToString() + "\r\n"; - } - } - if (!ChkNoPreview.Checked) - { - if (ChkHtmlPreview.Checked) - { - if (!this.CbbEncoding.Text.Contains("自动")) - { - extendedWebBrowser1.LoadStrings(RichHtml.Text.Trim(), Encoding.GetEncoding(this.CbbEncoding.Text.Trim())); - } - else { extendedWebBrowser1.LoadStrings(RichHtml.Text.Trim(), Encoding.UTF8); } - //MessageBox.Show(extendedWebBrowser1.Document.Encoding); - //extendedWebBrowser1.Document.Encoding = Encoding.UTF8.BodyName; - } - else - { - if (RbGet.Checked) - { - extendedWebBrowser1.Navigate(TxtUrl.Text, null, null, TxtInputHeader.Text); - } - else - { - string strData = TxtPost.Text; - string strHeaders = "Content-Type: " + CbbContentType.Text + "\r\n" + TxtInputHeader.Text; - ASCIIEncoding AE = new ASCIIEncoding(); - byte[] bytePost = AE.GetBytes(strData); - //byte[] byteHeaders = AE.GetBytes(strHeaders); - extendedWebBrowser1.Navigate(TxtUrl.Text, null, bytePost, strHeaders); - } - } - } - #endregion - })); - } - catch (Exception exception) - { - this.Invoke(new Action(() => - { - if (IsExit) - { - this.RichHtml.Text = "用户中断执行"; - BtnRunHtml.Text = "执行"; - IsRunning = false; - } - else - { - this.RichHtml.Text = exception.Message; - } - Te_Format.Text = ""; - })); - } - this.Invoke(new Action(() => - { - BtnRunHtml.Text = "执行"; - IsRunning = false; - })); - } - - } - - private Image ByteArrayToImage(byte[] Bytes) - { - MemoryStream stream = new MemoryStream(Bytes); - return Image.FromStream(stream, true); - } - - private void TxtUrl_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - BtnRunHtml.PerformClick(); - } - else if (e.KeyCode == Keys.Down) - { - if (table1.Visible) - { - table1.TableModel.Selections.Clear(); - table1.TableModel.Selections.AddCells(0, 0, 0, columnModel1.Columns.Count - 1); - table1.Focus(); - } - } - } - - private void FrmWebGet_Load(object sender, EventArgs e) - { - contextMenuStripHighlightText1.AddSeparatorMenu(); - contextMenuStripHighlightText1.AddMenu("将选中的内容作为Json分析", "").Click += AnalyJson_Click; - for (int i = 0; i < this.Controls.Count; i++) - { - switch (this.Controls[i]) - { - case GroupBox gb: - gb.Click += Gb_Click; - break; - } - } - } - - private void Gb_Click(object sender, EventArgs e) - { - table1.Visible = false; - //RbGet.Focus(); - switch ((this.DockPanel.FindForm())) - { - case Form1 frm: - frm.HideDownList(); - break; - } - } - - private void AnalyJson_Click(object sender, EventArgs e) - { - ContextMenuStrip menu =(ContextMenuStrip) (((ToolStripMenuItem)sender).Owner); - switch(menu.SourceControl) - { - case ICSharpCode.TextEditor.TextEditorControl rich_txt: - var SelectedText= rich_txt.ActiveTextAreaControl.SelectionManager.SelectedText; - if (SelectedText == "") { SelectedText = rich_txt.Text; } - //if (Manager.Json.IsJson(SelectedText)) - { - FrmJson frm = new FrmJson(); - frm.Show(this.DockPanel); - frm.LoadJson(SelectedText); - } - break; - case RichTextBox rich_txt2: - var SelectedText2 = rich_txt2.SelectedText; - if (SelectedText2 == "") { SelectedText2 = rich_txt2.Text; } - //if (Manager.Json.IsJson(SelectedText2)) - { - FrmJson frm = new FrmJson(); - frm.Show(this.DockPanel); - frm.LoadJson(SelectedText2); - } - break; - } - } - - private void BtnCtreateCShape_Click(object sender, EventArgs e) - { - string str = "get"; - if (RbGet.Checked) - { - str = "get"; - } - if (RbPost.Checked) - { - str = "post"; - } - HttpItem item = new HttpItem - { - URL = TxtUrl.Text.Trim(), - Method = str, - IsToLower = this.ChkUrlLower.Checked, - Cookie = this.TxtCookie.Text.Trim(), - Referer = this.CbbReferer.Text.Trim(), - Postdata = this.TxtPost.Text.Trim(), - Timeout = Convert.ToInt32(this.CbbTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, - ReadWriteTimeout = Convert.ToInt32(this.CbbWriteTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, - UserAgent = this.CbbUserAgent.Text, - ContentType = this.CbbContentType.Text, - Allowautoredirect = this.ChkJump.Checked, - ResultType = ChkGetPic.Checked ? ResultType.Byte : ResultType.String - }; - if (CbbUserAgent.SelectedIndex != -1) - { - if (CbbUserAgent.SelectedItem is UserAgentInfo) - { - item.UserAgent = ((UserAgentInfo)CbbUserAgent.SelectedItem).useragent; - } - } - if (!string.IsNullOrEmpty(this.CbbIp.Text.Trim())) - { - item.ProxyIp = this.CbbIp.Text.Trim(); - } - if (!this.CbbEncoding.Text.Contains("自动")) - { - item.Encoding = Encoding.GetEncoding(this.CbbEncoding.Text.Trim()); - } - this.RichHtml.Visible = true; - this.pictureBox1.Visible = false; - //this.SetHttpItem(); - StringBuilder builder = new StringBuilder(); - builder.Append(" HttpHelper http = new HttpHelper();\r\n"); - builder.Append(" HttpItem item = new HttpItem()\r\n"); - builder.Append(" {\r\n"); - builder.Append(" URL = \"" + item.URL + "\",//URL 必需项 \r\n"); - if (!this.CbbEncoding.Text.Trim().Contains("自动")) - { - builder.Append(" Encoding = System.Text.Encoding.GetEncoding( \"" + this.CbbEncoding.Text.Trim() + "\"),//URL 可选项 默认为Get \r\n"); - } - builder.Append(" Method = \"" + item.Method + "\",//URL 可选项 默认为Get \r\n"); - builder.Append(" IsToLower = " + item.IsToLower.ToString().ToLower() + ",//得到的HTML代码是否转成小写 可选项默认转小写 \r\n"); - builder.Append(" Cookie = \"" + item.Cookie + "\",//字符串Cookie 可选项 \r\n"); - builder.Append(" Referer =\"" + item.Referer + "\",//来源URL 可选项 \r\n"); - builder.Append(" Postdata = \"" + item.Postdata + "\",//Post数据 可选项GET时不需要写 \r\n"); - builder.Append(" Timeout = " + item.Timeout + ",//连接超时时间 可选项默认为100000 \r\n"); - builder.Append(" ReadWriteTimeout = " + item.ReadWriteTimeout + ",//写入Post数据超时时间 可选项默认为30000 \r\n"); - builder.Append(" UserAgent = \"" + item.UserAgent + "\",//用户的浏览器类型,版本,操作系统 可选项有默认值 \r\n"); - builder.Append(" ContentType = \"" + item.ContentType + "\",//返回类型 可选项有默认值 \r\n"); - builder.Append(" Allowautoredirect = " + item.Allowautoredirect.ToString().ToLower() + ",//是否根据301跳转 可选项 \r\n"); - builder.Append(" //CerPath = \"d:\\123.cer\",//证书绝对路径 可选项不需要证书时可以不写这个参数 \r\n"); - builder.Append(" //Connectionlimit = 1024,//最大连接数 可选项 默认为1024 \r\n"); - builder.Append(" ProxyIp = \"" + item.ProxyIp + "\",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数 \r\n"); - builder.Append(" //ProxyPwd = \"123456\",//代理服务器密码 可选项 \r\n"); - builder.Append(" //ProxyUserName = \"administrator\",//代理服务器账户名 可选项 \r\n"); - builder.Append(" ResultType = " + (ChkGetPic.Checked ? "ResultType.Byte" : "ResultType.String") + "\r\n"); - builder.Append(" };\r\n"); - builder.Append(""); - builder.Append(" HttpResult result = http.GetHtml(item);\r\n"); - builder.Append(" string html = result.Html;\r\n"); - builder.Append(" string cookie = result.Cookie;\r\n"); - builder.Append(" \r\n\r\n"); - builder.Append(" /// <summary>\r\n"); - builder.Append(" /// 字节数组生成图片\r\n"); - builder.Append(" /// </summary>\r\n"); - builder.Append(" /// <param name=\"Bytes\">字节数组</param>\r\n"); - builder.Append(" /// <returns>图片</returns>\r\n"); - builder.Append(" private Image byteArrayToImage(byte[] Bytes)\r\n"); - builder.Append(" {\r\n"); - builder.Append(" MemoryStream ms = new MemoryStream(Bytes);\r\n"); - builder.Append(" return Bitmap.FromStream(ms,true);\r\n"); - builder.Append(" }\r\n"); - RichHtml.Text = builder.ToString(); - Te_Format.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("C#"); - Te_Format.Text= builder.ToString(); - - } - public void AddUrl(string title,string url) - { - DataProvider mydb = new DataProvider(); - IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); - if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) - { - var _title = title; - if(_title == "") - { - var mode = url.Replace("?","&").GetStr("&a=",""); - if (mode.IndexOf("&") > 0) { mode = mode.GetStr("", "&"); } - if(mode.Length==0) - { - mode = url.Replace("?", "&").GetStr("&Action=", ""); - if (mode.IndexOf("&") > 0) { mode = mode.GetStr("", "&"); } - } - _title = mode; - } - RyQuickSQL mySQL = new RyQuickSQL("Urls"); - mySQL.AddField("Name", _title); - mySQL.AddField("Url", url); - mySQL.AddField("Cookie", TxtCookie.Text); - mySQL.AddField("Postdata", TxtPost.Text); - mySQL.AddField("Header", TxtInputHeader.Text); - mySQL.AddField("Method", RbGet.Checked?"get":"post"); - mySQL.AddField("Referer", CbbReferer.Text); - mySQL.AddField("ContentType", CbbContentType.Text); - mySQL.AddField("Encoding", CbbEncoding.Text); - DataSet ds = db.ReadData("select * from Urls where Url=@Url", mySQL); - if (mydb.HaveData(ds)) - { - DataRow reader = ds.Tables[0].Rows[0]; - #region 读取信息 - mySQL.AddFieldCalc("ClickCount", "ClickCount+1");//点击次数 - mySQL.AddField("editTime", DateTime.Now); - db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + reader["id"].ToString(), mySQL); - #endregion - } - else - { - mySQL.AddField("ClickCount",1); - mySQL.AddField("editTime", DateTime.Now); - mySQL.AddField("addTime", DateTime.Now); - db.ExecuteNonQuery(mySQL.GetInsertSQL(),mySQL); - } - } - db.Free(); - } - bool proc_use = false; - private void ClickItem(bool run = false) - { - if (table1.SelectedItems.Length > 0) - { - table1.Visible = false; - Application.DoEvents(); - proc_use = true; - string url = table1.SelectedItems[0].Cells[ColUrl.Index].Text; - DataProvider mydb = new DataProvider(); - IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); - if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) - { - db.AddParameter("url", url); - DataSet ds = db.ReadData("select * from Urls where Url=@url", db.GetParameter()); - if(mydb.HaveData(ds)) - { - DataRow row = ds.Tables[0].Rows[0]; - SetValueByRich(TxtCookie,"Cookie"); - SetValueByRich(TxtPost, "Postdata"); - SetValueByRich(TxtInputHeader, "Header"); - SetValue2(CbbReferer, "Referer"); - SetValue2(CbbContentType, "ContentType"); - SetValue2(CbbEncoding, "Encoding"); - if (row["Method"].ToString().Length>0) - { - if(row["Method"].ToString()=="post") - { - RbPost.Checked = true; - } - else { RbGet.Checked = true; } - } - void SetValueByRich(ryControls.Controls.RichTextBox2 txt, string Field) - { - if (row[Field].ToString().Length > 0) { txt.Text = row[Field].ToString(); } - } - void SetValue2(ryControls.RyComboBox cbb, string Field) - { - if (row[Field].ToString().Length>0) { cbb.Text = row[Field].ToString(); } - } - } - db.Free(); - } - TxtUrl.Text = url; - if (run) - { BtnRunHtml.PerformClick(); } - proc_use = false; - } - else { table1.Visible = false; } - } - private void Table1_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Up) - { - if (table1.SelectedItems.Length > 0 && table1.SelectedItems[0].Index == 0) - { - table1.TableModel.Selections.Clear(); - TxtUrl.Select(); - //rySearch1.Select(); - } - } - else if (e.KeyCode == Keys.Enter) - { - ClickItem(); - } - } - - private void TxtUrl_TextChanged2(object sender, EventArgs e) - { - if (proc_use) { return; } - string sql_where = ""; - if (TxtUrl.Text != "") { sql_where = " where (Name like @SearchText or Url like @SearchText)"; } - #region 重新载入数据 - tableModel1.Rows.Clear(); - tableModel1.Selections.Clear(); - DataProvider mydb = new DataProvider(); - IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); - if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) - { - db.AddParameter("SearchText", "%" + TxtUrl.Text + "%"); - DataSet ds = db.ReadData("select * from Urls" + sql_where+ " order by ClickCount desc,editTime desc", db.GetParameter()); - for (int i = 0; i < ds.Tables[0].Rows.Count; i++) - { - DataRow row = ds.Tables[0].Rows[i]; - DateTime editTime = row["editTime"].ToDateTime(); - XPTable.Models.Row itemList = new XPTable.Models.Row() - { - Tag = row["id"].ToString() - }; - //需要修改此处 - itemList.Cells.Add(new XPTable.Models.Cell(row["Url"].ToString()));//示例 - itemList.Cells.Add(new XPTable.Models.Cell(row["Name"].ToString())); - if (editTime >= DateTime.Now.AddMinutes(-10)) - { - tableModel1.Rows.Insert(0,itemList); - } - else - { - tableModel1.Rows.Add(itemList); - } - } - db.Free(); - table1.Visible = tableModel1.Rows.Count != 0; - table1.BringToFront(); - } - #endregion - } - - private void FrmWebGet_Click(object sender, EventArgs e) - { - table1.Visible = false; - } - - private void Table1_CellLostFocus(object sender, XPTable.Events.CellFocusEventArgs e) - { - if (e.Row == -1) { table1.Visible = false; } - } - - private void Table1_Leave(object sender, EventArgs e) - { - if(!TxtUrl.Focused) - { - table1.Visible = false; - } - } - - private void TxtUrl_Leave(object sender, EventArgs e) - { - if (!table1.Focused) - { - table1.Visible = false; - } - } - - - private void timer1_Tick(object sender, EventArgs e) - { - } - - private void table1_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - ClickItem(); - } - } - - private void TxtPost_DoubleClick(object sender, EventArgs e) - { - ryControls.Controls.RichTextBox2 txt = (ryControls.Controls.RichTextBox2)sender; - 开发辅助工具.Controls.FrmText frm = new Controls.FrmText - { - Icon = Icon - }; - frm.richTextBox1.Text = txt.Text; - if (frm.ShowDialog() == DialogResult.OK) - { - txt.Text = frm.richTextBox1.Text; - } - } - - private void TxtPost_TextChanged(object sender, EventArgs e) - { - if (TxtPost.Text != "") { tabPage1.Text = "Post数据(有数据)"; } - else { tabPage1.Text = "Post数据"; } - } - - private void TxtCookie_TextChanged(object sender, EventArgs e) - { - if (TxtCookie.Text != "") { tabPage2.Text = "Cookie(有数据)"; } - else { tabPage2.Text = "Cookie"; } - } - - private void TxtInputHeader_TextChanged(object sender, EventArgs e) - { - if (TxtInputHeader.Text != "") { tabPage7.Text = "Header(有数据)"; } - else { tabPage7.Text = "Header"; } - } - - private void ChkNoPreview_CheckedChanged(object sender, EventArgs e) - { - ChkHtmlPreview.Enabled = !ChkNoPreview.Checked; + } + } + if (!ChkNoPreview.Checked) + { + if (ChkHtmlPreview.Checked) + { + if (!this.CbbEncoding.Text.Contains("自动")) + { + extendedWebBrowser1.LoadStrings(RichHtml.Text.Trim(), Encoding.GetEncoding(this.CbbEncoding.Text.Trim())); + } + else { extendedWebBrowser1.LoadStrings(RichHtml.Text.Trim(), Encoding.UTF8); } + //MessageBox.Show(extendedWebBrowser1.Document.Encoding); + //extendedWebBrowser1.Document.Encoding = Encoding.UTF8.BodyName; + } + else + { + if (RbGet.Checked) + { + extendedWebBrowser1.Navigate(TxtUrl.Text, null, null, TxtInputHeader.Text); + } + else + { + string strData = TxtPost.Text; + string strHeaders = "Content-Type: " + CbbContentType.Text + "\r\n" + TxtInputHeader.Text; + ASCIIEncoding AE = new ASCIIEncoding(); + byte[] bytePost = AE.GetBytes(strData); + //byte[] byteHeaders = AE.GetBytes(strHeaders); + extendedWebBrowser1.Navigate(TxtUrl.Text, null, bytePost, strHeaders); + } + } + } + #endregion + })); + } + catch (Exception exception) + { + this.Invoke(new Action(() => + { + if (IsExit) + { + this.RichHtml.Text = "用户中断执行"; + BtnRunHtml.Text = "执行"; + IsRunning = false; + } + else + { + this.RichHtml.Text = exception.Message; + } + Te_Format.Text = ""; + })); + } + this.Invoke(new Action(() => + { + BtnRunHtml.Text = "执行"; + IsRunning = false; + })); + } + + } + + private Image ByteArrayToImage(byte[] Bytes) + { + MemoryStream stream = new MemoryStream(Bytes); + return Image.FromStream(stream, true); + } + + private void TxtUrl_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + BtnRunHtml.PerformClick(); + } + else if (e.KeyCode == Keys.Down) + { + if (table1.Visible) + { + table1.TableModel.Selections.Clear(); + table1.TableModel.Selections.AddCells(0, 0, 0, columnModel1.Columns.Count - 1); + table1.Focus(); + } + } + } + + private void FrmWebGet_Load(object sender, EventArgs e) + { + contextMenuStripHighlightText1.AddSeparatorMenu(); + contextMenuStripHighlightText1.AddMenu("将选中的内容作为Json分析", "").Click += AnalyJson_Click; + for (int i = 0; i < this.Controls.Count; i++) + { + switch (this.Controls[i]) + { + case GroupBox gb: + gb.Click += Gb_Click; + break; + } + } + } + + private void Gb_Click(object sender, EventArgs e) + { + table1.Visible = false; + //RbGet.Focus(); + switch ((this.DockPanel.FindForm())) + { + case Form1 frm: + frm.HideDownList(); + break; + } + } + + private void AnalyJson_Click(object sender, EventArgs e) + { + ContextMenuStrip menu =(ContextMenuStrip) (((ToolStripMenuItem)sender).Owner); + switch(menu.SourceControl) + { + case ICSharpCode.TextEditor.TextEditorControl rich_txt: + var SelectedText= rich_txt.ActiveTextAreaControl.SelectionManager.SelectedText; + if (SelectedText == "") { SelectedText = rich_txt.Text; } + //if (Manager.Json.IsJson(SelectedText)) + { + FrmJson frm = new FrmJson(); + frm.Show(this.DockPanel); + frm.LoadJson(SelectedText); + } + break; + case RichTextBox rich_txt2: + var SelectedText2 = rich_txt2.SelectedText; + if (SelectedText2 == "") { SelectedText2 = rich_txt2.Text; } + //if (Manager.Json.IsJson(SelectedText2)) + { + FrmJson frm = new FrmJson(); + frm.Show(this.DockPanel); + frm.LoadJson(SelectedText2); + } + break; + } + } + + private void BtnCtreateCShape_Click(object sender, EventArgs e) + { + string str = "get"; + if (RbGet.Checked) + { + str = "get"; + } + if (RbPost.Checked) + { + str = "post"; + } + HttpItem item = new HttpItem + { + URL = TxtUrl.Text.Trim(), + Method = str, + IsToLower = this.ChkUrlLower.Checked, + Cookie = this.TxtCookie.Text.Trim(), + Referer = this.CbbReferer.Text.Trim(), + Postdata = this.TxtPost.Text.Trim(), + Timeout = Convert.ToInt32(this.CbbTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, + ReadWriteTimeout = Convert.ToInt32(this.CbbWriteTimeout.Text.Replace("秒", string.Empty).Trim()) * 0x3e8, + UserAgent = this.CbbUserAgent.Text, + ContentType = this.CbbContentType.Text, + Allowautoredirect = this.ChkJump.Checked, + ResultType = ChkGetPic.Checked ? ResultType.Byte : ResultType.String + }; + if (CbbUserAgent.SelectedIndex != -1) + { + if (CbbUserAgent.SelectedItem is UserAgentInfo) + { + item.UserAgent = ((UserAgentInfo)CbbUserAgent.SelectedItem).useragent; + } + } + if (!string.IsNullOrEmpty(this.CbbIp.Text.Trim())) + { + item.ProxyIp = this.CbbIp.Text.Trim(); + } + if (!this.CbbEncoding.Text.Contains("自动")) + { + item.Encoding = Encoding.GetEncoding(this.CbbEncoding.Text.Trim()); + } + this.RichHtml.Visible = true; + this.pictureBox1.Visible = false; + //this.SetHttpItem(); + StringBuilder builder = new StringBuilder(); + builder.Append(" HttpHelper http = new HttpHelper();\r\n"); + builder.Append(" HttpItem item = new HttpItem()\r\n"); + builder.Append(" {\r\n"); + builder.Append(" URL = \"" + item.URL + "\",//URL 必需项 \r\n"); + if (!this.CbbEncoding.Text.Trim().Contains("自动")) + { + builder.Append(" Encoding = System.Text.Encoding.GetEncoding( \"" + this.CbbEncoding.Text.Trim() + "\"),//URL 可选项 默认为Get \r\n"); + } + builder.Append(" Method = \"" + item.Method + "\",//URL 可选项 默认为Get \r\n"); + builder.Append(" IsToLower = " + item.IsToLower.ToString().ToLower() + ",//得到的HTML代码是否转成小写 可选项默认转小写 \r\n"); + builder.Append(" Cookie = \"" + item.Cookie + "\",//字符串Cookie 可选项 \r\n"); + builder.Append(" Referer =\"" + item.Referer + "\",//来源URL 可选项 \r\n"); + builder.Append(" Postdata = \"" + item.Postdata + "\",//Post数据 可选项GET时不需要写 \r\n"); + builder.Append(" Timeout = " + item.Timeout + ",//连接超时时间 可选项默认为100000 \r\n"); + builder.Append(" ReadWriteTimeout = " + item.ReadWriteTimeout + ",//写入Post数据超时时间 可选项默认为30000 \r\n"); + builder.Append(" UserAgent = \"" + item.UserAgent + "\",//用户的浏览器类型,版本,操作系统 可选项有默认值 \r\n"); + builder.Append(" ContentType = \"" + item.ContentType + "\",//返回类型 可选项有默认值 \r\n"); + builder.Append(" Allowautoredirect = " + item.Allowautoredirect.ToString().ToLower() + ",//是否根据301跳转 可选项 \r\n"); + builder.Append(" //CerPath = \"d:\\123.cer\",//证书绝对路径 可选项不需要证书时可以不写这个参数 \r\n"); + builder.Append(" //Connectionlimit = 1024,//最大连接数 可选项 默认为1024 \r\n"); + builder.Append(" ProxyIp = \"" + item.ProxyIp + "\",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数 \r\n"); + builder.Append(" //ProxyPwd = \"123456\",//代理服务器密码 可选项 \r\n"); + builder.Append(" //ProxyUserName = \"administrator\",//代理服务器账户名 可选项 \r\n"); + builder.Append(" ResultType = " + (ChkGetPic.Checked ? "ResultType.Byte" : "ResultType.String") + "\r\n"); + builder.Append(" };\r\n"); + builder.Append(""); + builder.Append(" HttpResult result = http.GetHtml(item);\r\n"); + builder.Append(" string html = result.Html;\r\n"); + builder.Append(" string cookie = result.Cookie;\r\n"); + builder.Append(" \r\n\r\n"); + builder.Append(" /// <summary>\r\n"); + builder.Append(" /// 字节数组生成图片\r\n"); + builder.Append(" /// </summary>\r\n"); + builder.Append(" /// <param name=\"Bytes\">字节数组</param>\r\n"); + builder.Append(" /// <returns>图片</returns>\r\n"); + builder.Append(" private Image byteArrayToImage(byte[] Bytes)\r\n"); + builder.Append(" {\r\n"); + builder.Append(" MemoryStream ms = new MemoryStream(Bytes);\r\n"); + builder.Append(" return Bitmap.FromStream(ms,true);\r\n"); + builder.Append(" }\r\n"); + RichHtml.Text = builder.ToString(); + Te_Format.Document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategy("C#"); + Te_Format.Text= builder.ToString(); + + } + public void AddUrl(string title,string url) + { + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) + { + var _title = title; + if(_title == "") + { + var mode = url.Replace("?","&").GetStr("&a=",""); + if (mode.IndexOf("&") > 0) { mode = mode.GetStr("", "&"); } + if(mode.Length==0) + { + mode = url.Replace("?", "&").GetStr("&Action=", ""); + if (mode.IndexOf("&") > 0) { mode = mode.GetStr("", "&"); } + } + _title = mode; + } + RyQuickSQL mySQL = new RyQuickSQL("Urls"); + mySQL.AddField("Name", _title); + mySQL.AddField("Url", url); + mySQL.AddField("Cookie", TxtCookie.Text); + mySQL.AddField("Postdata", TxtPost.Text); + mySQL.AddField("Header", TxtInputHeader.Text); + mySQL.AddField("Method", RbGet.Checked?"get":"post"); + mySQL.AddField("Referer", CbbReferer.Text); + mySQL.AddField("ContentType", CbbContentType.Text); + mySQL.AddField("Encoding", CbbEncoding.Text); + DataSet ds = db.ReadData("select * from Urls where Url=@Url", mySQL); + if (mydb.HaveData(ds)) + { + DataRow reader = ds.Tables[0].Rows[0]; + #region 读取信息 + mySQL.AddFieldCalc("ClickCount", "ClickCount+1");//点击次数 + mySQL.AddField("editTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + reader["id"].ToString(), mySQL); + #endregion + } + else + { + mySQL.AddField("ClickCount",1); + mySQL.AddField("editTime", DateTime.Now); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(),mySQL); + } + } + db.Free(); + } + bool proc_use = false; + private void ClickItem(bool run = false) + { + if (table1.SelectedItems.Length > 0) + { + table1.Visible = false; + Application.DoEvents(); + proc_use = true; + string url = table1.SelectedItems[0].Cells[ColUrl.Index].Text; + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) + { + db.AddParameter("url", url); + DataSet ds = db.ReadData("select * from Urls where Url=@url", db.GetParameter()); + if(mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + SetValueByRich(TxtCookie,"Cookie"); + SetValueByRich(TxtPost, "Postdata"); + SetValueByRich(TxtInputHeader, "Header"); + SetValue2(CbbReferer, "Referer"); + SetValue2(CbbContentType, "ContentType"); + SetValue2(CbbEncoding, "Encoding"); + if (row["Method"].ToString().Length>0) + { + if(row["Method"].ToString()=="post") + { + RbPost.Checked = true; + } + else { RbGet.Checked = true; } + } + void SetValueByRich(ryControls.Controls.RichTextBox2 txt, string Field) + { + if (row[Field].ToString().Length > 0) { txt.Text = row[Field].ToString(); } + } + void SetValue2(ryControls.RyComboBox cbb, string Field) + { + if (row[Field].ToString().Length>0) { cbb.Text = row[Field].ToString(); } + } + } + db.Free(); + } + TxtUrl.Text = url; + if (run) + { BtnRunHtml.PerformClick(); } + proc_use = false; + } + else { table1.Visible = false; } + } + private void Table1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Up) + { + if (table1.SelectedItems.Length > 0 && table1.SelectedItems[0].Index == 0) + { + table1.TableModel.Selections.Clear(); + TxtUrl.Select(); + //rySearch1.Select(); + } + } + else if (e.KeyCode == Keys.Enter) + { + ClickItem(); + } + } + + private void TxtUrl_TextChanged2(object sender, EventArgs e) + { + if (proc_use) { return; } + string sql_where = ""; + if (TxtUrl.Text != "") { sql_where = " where (Name like @SearchText or Url like @SearchText)"; } + #region 重新载入数据 + tableModel1.Rows.Clear(); + tableModel1.Selections.Clear(); + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) + { + db.AddParameter("SearchText", "%" + TxtUrl.Text + "%"); + DataSet ds = db.ReadData("select * from Urls" + sql_where+ " order by ClickCount desc,editTime desc", db.GetParameter()); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + DateTime editTime = row["editTime"].ToDateTime(); + XPTable.Models.Row itemList = new XPTable.Models.Row() + { + Tag = row["id"].ToString() + }; + //需要修改此处 + itemList.Cells.Add(new XPTable.Models.Cell(row["Url"].ToString()));//示例 + itemList.Cells.Add(new XPTable.Models.Cell(row["Name"].ToString())); + if (editTime >= DateTime.Now.AddMinutes(-10)) + { + tableModel1.Rows.Insert(0,itemList); + } + else + { + tableModel1.Rows.Add(itemList); + } + } + db.Free(); + table1.Visible = tableModel1.Rows.Count != 0; + table1.BringToFront(); + } + #endregion + } + + private void FrmWebGet_Click(object sender, EventArgs e) + { + table1.Visible = false; + } + + private void Table1_CellLostFocus(object sender, XPTable.Events.CellFocusEventArgs e) + { + if (e.Row == -1) { table1.Visible = false; } + } + + private void Table1_Leave(object sender, EventArgs e) + { + if(!TxtUrl.Focused) + { + table1.Visible = false; + } + } + + private void TxtUrl_Leave(object sender, EventArgs e) + { + if (!table1.Focused) + { + table1.Visible = false; + } + } + + + private void timer1_Tick(object sender, EventArgs e) + { + } + + private void table1_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + ClickItem(); + } + } + + private void TxtPost_DoubleClick(object sender, EventArgs e) + { + ryControls.Controls.RichTextBox2 txt = (ryControls.Controls.RichTextBox2)sender; + 开发辅助工具.Controls.FrmText frm = new Controls.FrmText + { + Icon = Icon + }; + frm.richTextBox1.Text = txt.Text; + if (frm.ShowDialog() == DialogResult.OK) + { + txt.Text = frm.richTextBox1.Text; + } + } + + private void TxtPost_TextChanged(object sender, EventArgs e) + { + if (TxtPost.Text != "") { tabPage1.Text = "Post数据(有数据)"; } + else { tabPage1.Text = "Post数据"; } + } + + private void TxtCookie_TextChanged(object sender, EventArgs e) + { + if (TxtCookie.Text != "") { tabPage2.Text = "Cookie(有数据)"; } + else { tabPage2.Text = "Cookie"; } + } + + private void TxtInputHeader_TextChanged(object sender, EventArgs e) + { + if (TxtInputHeader.Text != "") { tabPage7.Text = "Header(有数据)"; } + else { tabPage7.Text = "Header"; } + } + + private void ChkNoPreview_CheckedChanged(object sender, EventArgs e) + { + ChkHtmlPreview.Enabled = !ChkNoPreview.Checked; } private void Te_Format_TextChanged(object sender, EventArgs e) { Te_Format.Document.FoldingManager.UpdateFoldings(null, null); } - } - public class UserAgentInfo - { - public string name = ""; - public string useragent = ""; - public override string ToString() - { - return name; - } - } -} + } + public class UserAgentInfo + { + public string name = ""; + public string useragent = ""; + public override string ToString() + { + return name; + } + } +}