PLM之家PLMHome-工业软件与AI结合践行者

[原创] 通过网络判断外挂是否更新

  [复制链接]

2016-12-23 19:47:22 4761 1

15757753770 发表于 2016-12-11 15:45:38 |阅读模式

15757753770 楼主

2016-12-11 15:45:38

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 $ C, e1 ^9 [- C' v) v& M# p

2 s5 e* X9 c9 m, `# {, W如果你想每次运行UG 判断 ug外挂是否更新/ n4 J7 l+ D& o: c! S% C; L
, U0 I' m! K9 w$ t2 `* a7 {

# y! e; \3 X) f6 B0 G原理:
, `- E( h4 Z6 l6 f# P2 `自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
( c/ Z. b" n6 }4 {然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
3 a- O  j6 l! B1 m1 v! X1 X' g0 s5 m- x% Z. L

9 O$ A$ ^* z1 d3 J! K被启动的dll程序源代码,如下- q# S  d( V# D) f4 \6 J4 x1 R

* d- S2 L& ?# f/ T- q//  Include files4 v% Z9 ?1 T5 q# f4 }
#include <uf.h>- h  G+ T2 L; k- D2 O
#include <uf_exit.h>
/ R4 |% _1 c9 S#include <uf_ui.h>
; W+ H8 H: s/ U$ f#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
) l$ C& m8 I2 N4 L#        include <strstream>2 F8 W$ B+ G" w+ ^0 t$ z" Q
#   include <iostream>
/ P1 J" p# X9 b        using std:strstream;/ v" i! M# {5 ^4 t
        using std::endl;        
( J9 m. l" b( Q$ r# j        using std::ends;8 X' |; z2 W. d. X. H6 |: K
        using std::cerr;
' q$ n# X! O# z% O( Y* ?, I: t#else
$ H& R- {" w5 [7 M#        include <strstream.h>
6 b6 d% _. s" r#   include <iostream.h>; n8 Z# E' z  c( Z# ^3 ]2 v1 e+ h
#endif$ H4 \& ?% |) K% Q5 w4 N0 ^) D/ Q2 M
#include <string.h>! E, A+ U! ^. i( z8 b; Q2 ]
#include <afx.h>0 f& \% C: P; `4 Y( g. X+ G3 @
#include <windows.h>5 G8 C8 U& }1 h1 r# ?0 L
#define MAXBLOCKSIZE 1024
# K! \9 B' }' P( U#include <wininet.h> //网络
8 n" _0 R* r7 Q& q: o#pragma comment(lib, "wininet.lib")//网络9 l0 i4 O! F0 ]3 y  ]1 U1 n6 @3 ~, _" \
% `0 u7 C" x9 p" |) k9 G) y
char 外挂版本[132]="V2.8F";
' W8 h8 k6 h2 J
( l4 m9 x9 i, U+ u/ t7 P) w5 d
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
+ J0 T% D5 |7 n3 V% W" i/ _- [, {1 }7 q{  
* C6 ?5 X# `8 S8 Y6 ^* y   wchar_t *m_wchar;
1 S. {- k- Y& F0 u    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
  I7 L& ~5 ?  V6 R    m_wchar=new wchar_t[len+1];  
; ~9 f- q; P: \' C  t) L    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  ' f7 o( O: S0 c
    m_wchar[len]='\0';  
' O" D* F* m& h0 @    return m_wchar;  
# E5 b  [) Y- B}  
$ x+ t% S1 N. P
( x+ u8 n# w/ A6 O2 T//TCHAR 转 char; g, [8 Q3 y& l) G# M/ d9 g
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
6 G4 K' D: ~! T: e" p! ]{  0 ?+ W6 h" ?: v7 c' `
    LPSTR pszOut = NULL;  : l; j5 _5 `- J' v5 C2 ]2 x$ p
    if (lpwszStrIn != NULL)  
9 n* m9 Z0 g  {* C: E    {  3 h/ V% S& A- o! C5 Q4 z% d& _9 J3 i
        int nInputStrLen = wcslen (lpwszStrIn);  
) y& I9 {; i* F) C
5 ^4 o" g+ I: Y        // Double NULL Termination  ! |6 @( j. r, ?0 Y% r! s) |! D
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  1 x7 K2 [7 z* x- r' J' x$ i9 H
        pszOut = new char [nOutputStrLen];  , N  F2 ]' R0 z  R. B0 u

/ o) r7 w/ y8 _0 _* Y- u        if (pszOut)  & S" ]: G7 Z; l5 ~" ^# I
        {  
, m4 l  P4 s6 G            memset (pszOut, 0x00, nOutputStrLen);  4 }# X* P6 a. \4 C# U
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  + A" u& d7 U/ t5 P1 T: H
        }  9 Z, H9 m2 k0 ]9 `4 r
    }  
- H0 Y; ^* V5 C0 Y1 u    return pszOut;  ) y: H" P( X  I+ F5 {' M# L
}  0 E9 E( [, F; ?4 z, J3 M% u
% d! s' |3 m4 e3 W9 T( C6 W- i4 x3 j
  z' @5 s2 B: i7 _, ~+ U  `( a
//CString转char
( l; E' ?$ d! @. _/ Yvoid CString2Char(CString str, char ch[])5 E% M' g# O9 [
{
) q6 F# v, i- r/ C) Y        int i;2 J) z( _. p; Y) O
        char *tmpch;
8 N& x" G( {/ Q        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
% m/ S- E2 x- n( \6 ?: \- I        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
* z* j( f2 x8 H; f  X+ Z0 U        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*3 B$ ?# w1 z( }5 g8 j

3 V4 N6 S$ p5 `        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
& @& P& W$ V1 A  `  C$ W        ch = '\0';
" L0 E8 ^1 w7 n* t* z' }}
% a8 `$ a; |: l1 X. w; E# @2 W3 [9 ~* N; z6 H: k; @
/ e% t4 \) m6 E4 f( _( M* E. P: ~0 T
char *去掉char首尾空格(const char *str)
$ s0 M3 h, V8 M- u) j; p{# o) s$ B! H' ]4 ]& I9 F! m
        static char line[133];& e7 l; m1 Y2 R) R4 E7 I5 i
        const char *pbegin;+ y. I5 h, \7 j: [7 c; n
        char *p,*pend;- G2 U1 x2 C  }) F  _+ W
        int i;7 w- M( s7 @* u: Q! c
3 }& s2 j- U- g, m
        pbegin=str;
- H) a. x) l/ F        while (*pbegin==' ')5 C- Y9 ~4 F+ @1 {' E6 g6 K) V
                pbegin++;
9 k$ |: Y/ C& F2 \( g: k, Z* I! L
        p=line;! |) }7 M9 i, V
        while (*p=*pbegin){, ~% R& m* V+ z3 w, H
                if ((*p==' ')&&(*(p-1)!=' ')); U) ^6 Y% Z0 }! L3 a& F
                        pend=p;
) V3 K& t" d, {' B( B/ @                p++;pbegin++;        
/ K' Q+ M* R4 ~1 T" T2 T        }
% q3 a* C: o) p  o( V        if (*(p-1)!=' ') pend=p;
) u) |8 P6 B# b4 N( S% |        *pend=0;
4 Z9 X1 h# q, k) C7 k' n! K        return line;. n$ n: W1 O8 X0 k
} 2 z  [; K/ v+ i: G" `2 e% N9 i" d

# p$ R8 n: z3 R3 u' X9 j! }% Q' c( U' s1 B  J; r
//获得网页信息 - 网页信息是中文会乱码 用英文信息2 n9 C* D9 d# ?+ ]* G0 _6 F2 ~' O. g
void 获得网页内容判断外挂更新(const char *Url,char *html);
! c' v# @5 I) X! B' M+ E8 C& kvoid 获得网页内容判断外挂更新(const char *Url,char *html). ?& p$ S0 O2 q
{# a# J- _/ o  O
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);5 V, c* S3 N! P6 z) [  c
        if (hSession != NULL)  Z  p4 {1 [8 F' F" [8 \% M" H
        {
6 U* B% x: _* I% V' H4 _2 q                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
- H: W' }* h* Y                if (hURL != NULL)
( @; R: `# O( Y* m+ G3 \                {, }& G: |7 I8 L( [5 P7 d
- Y6 S5 ~* m$ v5 V+ ?8 \: B0 [
                        char Temp[MAXBLOCKSIZE] = {0};( I7 {3 k+ d) _* L6 i; A
                        ULONG Number = 1;- b0 S* i$ P5 z# O& R
                                while (Number > 0)+ |1 D6 B& L! I/ Y3 b
                                {* D& i) m6 H4 k/ h
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);  s* m/ z6 W% j
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
0 r0 z' k1 p- z6 S9 V2 e; O                                        int a=strlen(Temp);
& h2 t9 E4 a, d  W  o                                        int b=strlen(判断版本);   ) r4 x3 d9 \, z9 k4 d
                                        if (a>b)
6 f3 y2 V4 G7 V! K2 u* N; J                                        {
* W9 p( ?/ B1 u$ L5 a                                                char *p=strstr(Temp,判断版本);/ J* c( G+ G1 X3 U) @9 T% H
                                                if(NULL != p)
; E2 Y5 `) X) Y8 e% q+ P  R                                                {          9 Y( D& c5 r/ K
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
% S% I, f+ o' G, F) g; N1 p                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;! H) m6 Q! y/ u7 E' C
                                          char s1[132]="";
% Q7 a4 O" [: Z' |3 S* Q; [                                              strncpy(s1,Temp+wz,wz2);+ J5 ~. I) C* p! u
                                                  char *p2=strstr(s1,"MEILEI");) W& p, K( F9 g5 n, o8 V$ x9 |
                                                  if(NULL != p2)
) s/ s& G- f6 U2 T' R- l7 q                                                  {  $ f. ?2 L  D7 ^
                                                          wz2= strlen(s1)-strlen(p2);
7 a1 s! L0 L! w+ \% F% G& c                                              char 最新版本[132]="";% Y+ s) T# X1 Q  t
                                                  strncpy(最新版本,Temp+wz,wz2);
# i- g# r& ?- T( B2 [. l( o- T                                                      if (strcmp( 外挂版本,最新版本)==0)6 G' Q8 l. P8 g6 T
                                                      {
, B7 e3 j& [: s+ ]                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
0 ]1 x' ^# }+ N  K. r8 W: h  |6 o                                                      }
! M) r4 d* b, Q1 D/ `                                                      else+ [0 \6 J- y# b+ f: ?
                                                      {
! q, P& A7 W  ]* L/ k8 }                                                            char msg[256];( P4 k, \1 E2 \2 A1 ^) x# @4 m% L
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);; S! F, v5 K4 ^( e. t: A. U
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );% B4 w& M+ G% A8 h) w5 f
                                                      }# @- ^; a0 _% F9 v1 G6 w/ C6 J
                                                   }/ m8 N5 A* @" D% {( S
                                                  goto LH;
+ f) G( g- T* t6 g4 O- G5 B                                                }" W/ h) L  {" w& u; U) w
                                        }
+ o! M6 a% Z/ S1 A/ W2 H9 ]5 u
3 V, K: X: b# ]$ q                                }
% `9 q' {0 y* x) ^9 }: X                                LH:;# T, H, e9 u) p  i4 w
                        InternetCloseHandle(hURL);+ y2 I( \4 r1 Q6 A
                        hURL = NULL;
' c! O+ T; m  w% U( i, d. F: x                }; p5 P" k  ?- Q. C: G

" Y% w" @' e( s* i5 O                InternetCloseHandle(hSession);- a: X7 K8 v: V* ]4 N4 ]
                hSession = NULL;' l7 E& @. S/ ]" J4 f2 ~
        }1 w9 n( t4 G. y/ k9 v/ P# }% J
}# S! Y$ d# m" t. ~2 W# j
  F" H% k7 ?" i

! o: M$ n- K0 `/ f' C5 a* e' }" h6 B//----------------------------------------------------------------------------/ M4 C: M' f3 U0 l$ |& C
//  Activation Methods
  G; v- R% Z1 m0 |) n- C. C% ?//----------------------------------------------------------------------------( |+ K- g3 s$ R& Z

" s+ O8 U) I$ w//  Unigraphics Startup9 W9 G# q/ m; g, @. {4 Z
//      This entry point activates the application at Unigraphics startup
$ {% a- r9 ], t4 O: Nextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )7 f; {4 G. p/ W0 H
{
1 J$ L' z% H: B  I% M4 R# A' H    /* Initialize the API environment */
# w2 |1 m! c9 h" P    int errorCode = UF_initialize();7 r! n! t  m8 t* k
- i4 d4 U! L1 T- H. u
    if ( 0 == errorCode )8 C8 O  r; {2 }# V6 X& E
    {
2 b9 _7 X6 e- O. H, T        /* TODO: Add your application code here */  W7 T/ ?) t3 U3 z2 K  m

3 J" P/ a# z) k3 h& }( _8 f7 e0 j: u( h: e% q) `  K. t  ^+ ~
                //百度云公开链接 通过修改txt文件标题8 f0 U0 i3 Z2 H. b2 e! J: X
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
; J; D; f/ U4 H3 b$ H/ j; v* I; E3 t8 y7 E# g7 v
* w, k  S0 T( f- _6 V1 ^
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  - \- {  P7 T  Z  @8 L& @) V+ D
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); : n: P5 k- }, p/ f7 b# a  f6 ?( r
                4 n/ f# L! o& S" b. D2 X1 g2 N; T
        . y: \2 ]8 R- G9 \% ~6 C

8 N" j* @$ a- v% W& a# A: W; ]0 e8 j4 ~4 {7 o6 q
( y1 I" u* x8 A+ ]- O. y- l
        /* Terminate the API environment *// V/ S& [* m  b/ @$ O: F! g
        errorCode = UF_terminate();
6 K* t* a; ?6 u    }' x5 `; f5 r/ @, n" G1 H* N" b
) W! X8 E5 Q3 E" W
    /* Print out any error messages */. C; @/ M, S7 H5 e, H7 j, C
return;: Y  v* o- F, \7 s- \. [! m: [
}* n% P7 `. j0 _
3 T( w# k& G3 i" h. U; m& Z
//----------------------------------------------------------------------------
4 D5 g2 n. G. z( S7 N' D//  Utilities
# a% z+ x" \4 A: `- X//----------------------------------------------------------------------------
, I. C/ L% o" g; @8 E6 z. T9 L; R
// Unload Handler
5 H+ _# M% t$ u: k; ^7 R  I//     This function specifies when to unload your application from Unigraphics.! L3 x( @. b' t+ @# o* @, e
//     If your application registers a callback (from a MenuScript item or a$ Z( m9 q& L" k( M4 R: u9 I( g$ }: \
//     User Defined Object for example), this function MUST return" v/ t4 W. c: |+ o) D" b8 \
//     "UF_UNLOAD_UG_TERMINATE".
5 T: R( g2 A7 b3 [+ Aextern "C" int ufusr_ask_unload( void )
/ M. }& b* B! r{. P; Y& U3 g, q' e& z: e' Z
    return( UF_UNLOAD_UG_TERMINATE );$ c& n' ^& Z; v/ D/ p
}1 x: G# O) Y% {0 p3 q, o
* g. N( J/ F/ L5 _' }0 x6 ?
% k' _, Q( a( y) u- f; d/ k) S
启动UG就启动dll的方法# X- k* F: ?3 |# [$ [( W) {
! o7 \1 _, r5 E% S6 J
方法1.添加环境变量' }6 \5 [5 W1 Q/ i# u) D
USER_STARTUP=D:\MEILEI.DLL- i0 j/ E, [/ R9 ^8 W5 G
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
# O6 O. W& h6 C: m" d
' E! V& o& T- v3 N" j$ ^方法2.在代码里添加(可以执行n个dll)- a# u" S' C* n* ~  O1 `& |: T: U( ~! e
UG会自动加载 startup目录里入口点是ufsta的dll; Q: X7 G1 F7 G/ h9 A9 v2 M/ I4 S

( \4 o. d% I- H2 I# A所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
9 G3 b; |) P, Q$ d0 A/ q& Q参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
7 @4 _* n+ D, v# W1 a( H* `7 P5 S: y9 F3 g2 m/ g2 c1 g5 g8 I
菜单参考  NXOpen_meilei.men.txt; z8 C9 J! x4 I/ \# @1 P
! i" H4 T5 h7 r9 G) w! \% Q, M0 [
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录8 f9 o, e( f' u5 e( w, S4 h
启动UG就启动dll的方法源代码下载1 K( J- T5 a+ n% V0 H7 ]
启动UG就启动dll的方法.rar (3.3 KB, 下载次数: 28)

评分

参与人数 1PLM币 +5 收起 理由
admin + 5 很给力!

查看全部评分

上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

周钢 发表于 2016-12-23 19:47:22

周钢 沙发

2016-12-23 19:47:22

支持下梅大师!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了