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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 ( L5 x5 R5 v6 Q
" b7 `, F$ r% q% T& r
如果你想每次运行UG 判断 ug外挂是否更新
- u2 y: S) ~/ [- m3 p4 V( c( k( }) v# w8 k. y  }3 j, E, n$ S

2 }+ N- T. |$ s6 j& _原理:4 Z& Q( v9 M* u8 p$ ?& b- ~
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
- B2 ]. C5 @; Y1 D7 G然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断- r* D# J/ ^. ~/ {) ?* h6 B
' P' x' W+ _/ N2 Z- a! m3 L* I( m

4 J2 f  a) i" {, F2 c/ I& c# S$ R4 G被启动的dll程序源代码,如下8 ^, E% i9 \' K  M$ o( g" v: H* C

) p& |# N- {( w' b0 v+ P//  Include files5 \) N' Y& ^( X% B( x
#include <uf.h>0 c3 E0 x7 S3 V+ `2 s+ `
#include <uf_exit.h>+ |) e- L0 N9 ]( A, W
#include <uf_ui.h>' X9 s7 J3 U# E7 @6 A
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )& @$ F7 g( c' c
#        include <strstream>
- i, O4 X; F3 t' y6 F; g, O#   include <iostream>9 f( D1 U  U  i3 F& U: q3 q3 N
        using std:strstream;
& T; S! P- p9 P        using std::endl;        ; |7 I. d2 |+ _) e5 ~
        using std::ends;$ h% }8 o$ N; E6 {4 [6 @! {2 r
        using std::cerr;
' B8 v% t" e! C  C#else) X$ r$ v7 R# a' u7 [
#        include <strstream.h>, ]/ U* s2 o, D6 x8 B: ^
#   include <iostream.h>
4 C! s/ j% r# T0 Z- A#endif9 w+ `; L; _0 ]& S* t/ z7 a; e
#include <string.h>+ M0 U  Z) U+ h
#include <afx.h>& @! J7 G' J% s  u% z" ?
#include <windows.h>) g3 s# T! G8 L3 b% Z: C* d5 `
#define MAXBLOCKSIZE 1024
) k' s, n% d- Z  E4 T#include <wininet.h> //网络
  D- \7 y/ @1 z1 d3 y#pragma comment(lib, "wininet.lib")//网络
- h! u# K9 @- p7 Z6 [
" C( \4 W7 r1 {/ e$ A7 O! P4 _. Hchar 外挂版本[132]="V2.8F";
7 W  L3 K& V5 \+ F  V" P6 Z2 n- [; F5 N9 C+ Z+ Z: R; F

+ z( ^5 {8 d( f- \9 k( P% Z% Xwchar_t* CharToWchar(const char* c)   //char*转wchar_t
: _* i! |, [# i0 Q  N{  - l. b  K5 a7 `0 _# U& |
   wchar_t *m_wchar;
8 \' I+ ^7 o' V4 l# d, ~    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  $ u* N; m9 Y* U& `9 O
    m_wchar=new wchar_t[len+1];  
" g. ^$ T. L) `4 A    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  # x  N, f3 E0 U- K  v& N
    m_wchar[len]='\0';  
- c4 m) K' Y/ {9 o4 j    return m_wchar;  
" x- W2 s. R7 H6 D& b% a" S}  
; ]+ \8 F3 e0 a4 }% o
0 B3 I3 S  A3 w% L3 I//TCHAR 转 char8 P: o0 ~. T. W8 J
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  + t6 C* [3 y! f# w3 V( K& |5 d
{  
5 X$ v) W& r. I' |) n; [7 M    LPSTR pszOut = NULL;  
9 B. V1 y& Z8 H3 X    if (lpwszStrIn != NULL)  
2 L( M; t7 M! g+ y    {  0 l( m4 D/ t, i& k/ S  Y% e# N* n5 A
        int nInputStrLen = wcslen (lpwszStrIn);  
+ n: t9 c* h+ @  c5 x5 o9 g  N. C+ e& e: d- y: t3 n7 G# M; L
        // Double NULL Termination  ! l* v: J; G# S  \- _! F3 e
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  * U, e+ n2 r8 t% _: ~
        pszOut = new char [nOutputStrLen];  ' p3 v; [$ q4 U5 |

5 X) Q, L+ |# \; X* I0 o8 i: N        if (pszOut)  
8 Z: h# A6 }( W# F! S# D0 a6 S  I        {  # ^8 e; x) Z' ^3 m! C
            memset (pszOut, 0x00, nOutputStrLen);  
9 j7 @# f: E# r- B$ h            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  ' ^/ a% ]9 i6 j. }
        }  
) m% d: }# N, T$ H/ X$ F    }  , k( N: c( n% n" D2 L" H0 r
    return pszOut;  - p0 L  I' w. ^: ^- |0 T7 n# a! G6 i
}  
; `" R8 l2 Y8 U1 {" [' p. [0 o" f! v  c5 K7 C

# c- Q  z4 ?  E, B/ w//CString转char
# R4 P8 w9 R: ^% X% a+ e4 zvoid CString2Char(CString str, char ch[])
0 F- {* \9 k5 }# P% E8 k( W8 F/ e{; A' v: D7 C& }; ]
        int i;
4 B1 \/ t5 L  Z, \' ^        char *tmpch;( f9 \: ?$ g" \: K' s& e6 j6 d8 f
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度3 i! S- n& \$ c
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小4 A. a# @3 P/ I
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*% c1 @0 k5 d8 Q, _$ N1 _* {

5 Z* M: O" Z! a& _        for(i = 0; tmpch != '\0'; i++) ch = tmpch;& f0 K& B; l: }4 [  R( x
        ch = '\0';+ u/ T$ |% ~6 j& P5 e: S, O6 ]
}
! e' Q( L9 [# ~2 a1 \+ a) w+ j5 U# P- F, b; ?

3 t# l; j6 K/ I+ t. i$ n6 F: achar *去掉char首尾空格(const char *str)/ ]( q- K. J" F  G
{. p/ c# B' Q2 _* T9 ^
        static char line[133];
# Y' ]5 N: U# J1 @" R" d        const char *pbegin;3 x4 G/ D  z4 M, x, F6 Y
        char *p,*pend;  p! y7 h7 T' h% q0 N, J' O
        int i;
# T: L1 M' c- `5 `: P4 U7 L# s4 c0 ~) Q6 T5 M
        pbegin=str;
( ~: ^& T3 @6 Z. w7 E: k  [        while (*pbegin==' ')1 O! J  @% d. U& X; m7 F
                pbegin++;/ _& }. o' l5 m* i6 J- _  D: b
4 K5 c# j8 B3 t+ X
        p=line;
  U* F0 ~' j* V! |4 \        while (*p=*pbegin){
. Q8 N1 T8 v) A' u7 X                if ((*p==' ')&&(*(p-1)!=' '))7 D0 X7 Z& ?0 ]0 l  d% i- K
                        pend=p;+ H. p6 W5 y6 ?" y: `
                p++;pbegin++;        
" J1 w5 `9 n% s        }
3 K4 m7 c/ J# D* \4 H4 b) F) o        if (*(p-1)!=' ') pend=p;7 r1 |3 }' X+ r- X9 t
        *pend=0;
) Q/ z) Z' C  P+ @: Q        return line;& i: T; |2 y) a# c8 o: k% {
} " t" @' n8 p' |! ]* T7 v
- g0 y$ D: Q' t6 T" l6 b
" t# F4 ]1 c# g, z1 ]/ h- j+ D/ K
//获得网页信息 - 网页信息是中文会乱码 用英文信息% I& {7 |8 E: z+ f& K3 x
void 获得网页内容判断外挂更新(const char *Url,char *html);
( K, Y: Z2 Y% ]. F$ ?2 m* zvoid 获得网页内容判断外挂更新(const char *Url,char *html)
+ r: F  @5 {/ V5 j* o{' J+ X; M( K8 F) m3 f
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
7 [! e* b( ?/ E$ F1 J; J        if (hSession != NULL)& z( k# k! M5 {( V7 c7 P3 n5 z6 Q
        {, C3 L( d8 f6 z+ ?7 p
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);: ~3 ^- o  N( w1 n# A
                if (hURL != NULL)
1 r, Q0 p( n, T' x/ @5 [                {, {6 Y! }& L* F' W( Q, z
5 G! _; ?9 R* {! f9 B! a2 O+ \8 p
                        char Temp[MAXBLOCKSIZE] = {0};
; n2 ?8 ~. E' P5 ]6 k                        ULONG Number = 1;
) c" M3 f, j+ d" k                                while (Number > 0)
/ B7 r4 f3 C: w* f7 }- r                                {
; f. d4 k4 d9 x( ~, Y) Q                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);6 j. n* y! |. m
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
* A% p% }" x# l5 n                                        int a=strlen(Temp);
3 z2 C# J' m$ Q6 G, n2 l$ h                                        int b=strlen(判断版本);   ! r$ s8 h4 T: n9 M, B6 O' J
                                        if (a>b) . `1 z; s* j9 F' Q5 m1 l; O* l
                                        {
* j' A' L- s' H+ X1 J                                                char *p=strstr(Temp,判断版本);  N9 d3 J! O. C' j1 l+ }: g6 x
                                                if(NULL != p): H) W' {/ N* U
                                                {         
8 X7 f4 k3 D1 p6 P                                                  int wz=a-strlen(p)+1+b;//版本号起始位置1 [3 M+ [5 k7 |1 y" G& U
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
0 [: b8 k, F0 u1 [8 m                                          char s1[132]="";, w5 H/ [) c+ g% S, z1 t
                                              strncpy(s1,Temp+wz,wz2);
( L5 D% l$ B; O6 q! R                                                  char *p2=strstr(s1,"MEILEI");; K; ]( u6 r7 E, f
                                                  if(NULL != p2)
+ i5 S2 G5 p6 y: ], P                                                  {  
2 t$ c. u+ |+ b7 \                                                          wz2= strlen(s1)-strlen(p2);
. @( Y- w) P! w2 o/ a! X9 [  l                                              char 最新版本[132]="";
% T0 B& {- _5 e1 X) F' V# O, e4 J                                                  strncpy(最新版本,Temp+wz,wz2);9 B# a# P- E/ s1 w
                                                      if (strcmp( 外挂版本,最新版本)==0)4 L) i) _- @/ @* |; {
                                                      { - i% m3 y- J- W$ J- W* Q; O
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );( i! T1 E7 Q  _- W" m- w! i
                                                      }
% q/ p0 }& m6 P# E6 S                                                      else
# K5 `5 J  l5 ]' H4 s  x9 k& N3 }2 o                                                      {/ }+ t7 O) p3 v& o
                                                            char msg[256];
+ N* \9 i5 `. D/ [! C                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);) f2 o) |) G- y' Y, g  R2 o, t: |$ k# H
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );! P2 G$ P& p1 e5 q# z
                                                      }1 k! z9 k) X+ m& l
                                                   }
1 S& h3 I' ^" z5 U2 x                                                  goto LH;6 _; |+ |9 Z( l, b
                                                }, e9 h" }% b4 |, E4 b
                                        }  }  f+ _: |, K' k9 Q6 ~

) x6 P$ O' k. G2 m5 {' ?/ n7 N( q                                }: O' B( W2 K8 y* B. C( Q4 f
                                LH:;: e. I/ x) Z0 }! ^: Z- z
                        InternetCloseHandle(hURL);9 ~/ d  l4 I; p
                        hURL = NULL;
8 q  E" O, O/ n4 m+ n                }9 d1 F, K( z( E3 X4 w# `5 n* J

' W% r2 f/ h/ F* }3 q                InternetCloseHandle(hSession);
* o( T: n( ~  }  ~; C                hSession = NULL;
/ Q$ p( T  B/ [3 N3 P        }
+ s4 o! b: w; l0 }! x}
' b' H0 I6 r# |7 _$ t1 {( H- Y& R5 W& [
7 x+ N9 r! j2 k! z9 X( a2 `
//----------------------------------------------------------------------------6 Z& J1 n1 x' _* M8 e. P
//  Activation Methods+ b$ H0 f9 `0 n; V9 z
//----------------------------------------------------------------------------
  h/ M+ \; Z7 W- A" W- o
- P' Q1 z, }5 l5 U//  Unigraphics Startup: z& r% G! a% B7 a5 g+ H4 M
//      This entry point activates the application at Unigraphics startup7 |2 G) Q" t, \8 G
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
' [9 J& l9 \4 x5 o% b{0 }& w4 \" G+ h" a3 |) N
    /* Initialize the API environment */
0 ?2 ]" j7 `. S* y/ W    int errorCode = UF_initialize();) M0 D& c( _; @
$ ?/ K6 e/ }8 o( e, X
    if ( 0 == errorCode )
3 m( i0 f7 P$ m" |* ]6 Q( e    {% v. ^7 l) C; m" H
        /* TODO: Add your application code here */8 @  H6 W$ M( f4 \* v8 l& M

& u: {5 o- H, \  y7 A5 l6 q/ h) M* I$ _
                //百度云公开链接 通过修改txt文件标题) Z, I/ D, }8 l) j- j
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
5 _+ R" K- t3 V/ ?* z5 {# s2 R4 J2 I. W; J
: P- ~( R5 D) v; x' m7 x# t) i; Z
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
. c. A' A  _2 f$ [$ ^                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); % h# X. n1 ~0 T; C& K9 D% M
               
9 l: p' L" u3 @/ U4 _        / S3 t9 ]0 U5 e( |4 V
2 \0 {2 A' f4 x, \
9 o- I. ?; a% R4 l" W

; N1 k. ]$ Y. G4 b7 L5 O        /* Terminate the API environment */, q' r6 |4 D  C7 r" E+ c
        errorCode = UF_terminate();
* v& t+ k  ~( D    }/ c$ R& F3 k. B1 o2 a

5 p" L0 m+ t4 v+ b; I3 _) R    /* Print out any error messages */
& E) X/ D, T; a- a/ \9 Jreturn;
: \7 G  a5 d. p$ G, O7 t7 d6 }7 M}. c1 B; w+ \" J
& ?5 k8 V  [2 t
//----------------------------------------------------------------------------
/ q- S* y* \7 N) b! g5 H1 F# M, ?//  Utilities; {2 ?8 `2 n7 t* f
//----------------------------------------------------------------------------
- h1 j; S& L6 [3 k6 `
: [7 o, h) _2 t7 m1 K// Unload Handler4 M6 a* k- Q- k: |; O
//     This function specifies when to unload your application from Unigraphics.
' t# {* c9 e: ?//     If your application registers a callback (from a MenuScript item or a
4 P3 f: B, f4 h//     User Defined Object for example), this function MUST return
! |. X/ e% ~( R& y4 W6 }& q//     "UF_UNLOAD_UG_TERMINATE".( o) u9 ~% _4 ]+ D9 P
extern "C" int ufusr_ask_unload( void )* V( d/ `5 b  X) [9 d6 w8 W
{
# T) b& O# M. G( f# O$ @    return( UF_UNLOAD_UG_TERMINATE );/ N' y! y1 s4 \/ `. p9 }; z
}
9 h5 D" o" p) r- o" N# g* L4 O+ n; M& n& p! g+ I
% h3 _6 f4 W2 U8 W8 N6 V
启动UG就启动dll的方法4 H8 {% y2 k! s  m7 m- o

' O+ |" }9 H* L. D方法1.添加环境变量
6 T0 Z' d3 ~% o7 F* MUSER_STARTUP=D:\MEILEI.DLL
4 @* F# k% m3 N  f" T5 z6 k0 N但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
* [; z" C7 D# u+ w  k9 h8 x' A3 [$ N/ r: L2 X: ?8 F
方法2.在代码里添加(可以执行n个dll)
" o, [1 f5 v- X/ }. t* R/ zUG会自动加载 startup目录里入口点是ufsta的dll7 `9 m0 L) J. N

" s6 A1 [: `' Y. a8 ^# |8 U, l& Q所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令& _/ P6 t/ f& j3 k, d
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
1 @* i8 |- [5 o5 |3 Q3 W
9 k8 K6 e- p: K& ?) e1 G菜单参考  NXOpen_meilei.men.txt: @# `/ G$ h8 B" L, z7 v4 V' e
) \% N7 }# c& g  ?8 ^; h
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录: P+ `1 Y. L7 n8 w; ^
启动UG就启动dll的方法源代码下载
. J0 f7 x7 Z5 Y1 T7 }$ }$ l 启动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二次开发专题模块培训报名开始啦

    我知道了