PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 9 ?2 X$ Y; L7 h. J' \3 j6 G

$ u. p9 F  z& o7 T如果你想每次运行UG 判断 ug外挂是否更新& b% p( B' j  @# V3 y  ~! G
2 f' D% ^: O; Z5 A! y1 \; [5 |3 W# ^

7 J+ s" c3 |, W9 s" c原理:
' B4 N1 y* I( @0 x自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
+ c* a1 T; Y9 H6 l8 N然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
; X2 a0 h5 y1 v' }, t0 ~# Y/ L/ L) S0 u. F  x9 _
. {3 r* ]4 r" d
被启动的dll程序源代码,如下: Q+ L5 u7 S: S+ h8 i) Y5 P& W
$ H+ Q, \; Z  B' K
//  Include files
0 h$ S+ {# ^7 x+ @2 U; k+ i$ B#include <uf.h>2 Z) k7 j! H# Y6 }8 z; W
#include <uf_exit.h>3 }$ {2 L8 @' u/ ]
#include <uf_ui.h>/ T0 S. I0 Z3 u$ |/ u
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )3 l0 k1 M( I3 g& a: I7 F
#        include <strstream>
  t, J2 Z1 x  a" n+ O#   include <iostream>  M, I5 U4 S0 Q7 q
        using std:strstream;: A& O4 e, z& M# g
        using std::endl;        , l0 H# j$ S( q( p7 |/ {. @1 Q5 b% T
        using std::ends;
( V6 n2 ~! z) n/ K        using std::cerr;
" r. _6 J7 P  j9 n! D4 }$ r#else
" I# N! K. h# z+ ?0 h1 o#        include <strstream.h>/ {% R* ~6 S- A2 M
#   include <iostream.h>
' M7 j  s- h9 C3 I% c  _#endif
/ ?3 w7 m5 X# L9 e8 w#include <string.h>
. ~- l) D$ ~  M7 P5 ?#include <afx.h>
6 H. }" C) m6 Z1 S#include <windows.h>
+ G# ~: E$ Z( p0 L#define MAXBLOCKSIZE 10244 i# y' H2 u  ?7 G( D
#include <wininet.h> //网络
  B) o. \) h* L" @! i: ?9 b#pragma comment(lib, "wininet.lib")//网络
3 j; C6 Z- N6 w9 r- `, j9 |. ]$ w' h. J/ J
char 外挂版本[132]="V2.8F";1 U$ H+ P% W* x' D1 \

$ t- u; B( K+ w2 h
- R6 W2 m! B. u  k7 Y( Awchar_t* CharToWchar(const char* c)   //char*转wchar_t
; Q6 L) r6 i; `, B- s4 z0 r4 F2 z- s; y{  
) I% D; C' ]+ j' m7 ^: d0 v' R   wchar_t *m_wchar;/ m1 V) ?. K( V- D9 C- w/ x
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
! M  M# {0 n2 P/ X5 Y" o! d    m_wchar=new wchar_t[len+1];  
9 }# ~, D6 X' k& M2 N    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
6 Z* U9 f4 d) }8 B7 {# C- ~    m_wchar[len]='\0';  
- r7 v1 [( m: V3 @    return m_wchar;  . y$ m; N2 B: }# u
}  
6 I, y/ d* x8 L) H3 B0 I$ q9 a8 ~$ p; w
//TCHAR 转 char
3 n3 ?9 K! W/ S# a, ~char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  % J4 Q' ^& X) _0 ]; Q8 j( Q' |
{  
+ s+ d" x2 O/ Y. y    LPSTR pszOut = NULL;  
' l3 k/ O) x% e    if (lpwszStrIn != NULL)  " W# b6 D1 a7 O' t
    {  
- h$ z" z. W" l1 @6 ?& }. G+ j        int nInputStrLen = wcslen (lpwszStrIn);  
- G! D5 l7 N  _' l3 F7 b/ M) @; k% i3 E) e1 E
        // Double NULL Termination  
$ M3 O& O& R* g9 [2 C2 W: G6 z. g        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
& S4 M' y% \/ H        pszOut = new char [nOutputStrLen];  
2 Z& @  u, O/ a( m6 I6 a; U9 d( i5 `/ p6 f9 a$ f2 B
        if (pszOut)  
' Q9 U2 @7 G: I) J- @* g. j        {  ( a* |0 q) k! A1 m: j: x
            memset (pszOut, 0x00, nOutputStrLen);  
! K# b7 }7 C. P5 z: g, X            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
/ |. S7 ~0 R. H7 s5 E) t        }  
6 ]# ?) o6 v+ Y" Y* d    }  
& X5 d1 I; j" t    return pszOut;    I# U* T) J- c9 ^
}  
9 E0 V8 t1 s& r' ^  K3 [$ w2 g( @. d' [
0 d/ {( g5 r# ]1 b
//CString转char6 D# n  ?2 f" p$ h9 E0 i+ K. q3 H
void CString2Char(CString str, char ch[])- n! a: S$ ]! ]# T6 |: I
{/ y& m/ ?4 N7 G& x9 Y* B
        int i;
, Z+ G9 O% X8 ^" U! {! q0 T        char *tmpch;
5 y  K2 B; i5 p8 r+ Q8 w        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
; k4 |$ t4 G* i" J" T7 Q        tmpch = new char[wLen + 1];                                             //分配变量的地址大小9 D8 `6 W& ^. }
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*! @" v! A* l2 c  q, o  b6 _+ w" \

" q% i- ~0 }# y- g, q        for(i = 0; tmpch != '\0'; i++) ch = tmpch;* K& s! l3 o! Q) c; b2 K, @  Z
        ch = '\0';
, D9 x" x! a/ B" a( P) d}) f' a/ L! f- f+ v) }$ \
0 v6 x) q9 k1 K

# y' l1 J: w! u; R3 r! j; [char *去掉char首尾空格(const char *str)! {5 n" c/ F/ {# Y
{
  a2 F9 N! a) b, h! l3 C' o6 N        static char line[133];8 E% h- n0 e) q8 o  y7 G8 v/ G" k
        const char *pbegin;1 O. X9 ]" n5 J+ }) w: W: y# }  }
        char *p,*pend;
. Y) \, A- [+ X; m* y        int i;- o" H: V2 C6 w/ ^4 t- C

( V7 y7 D# @& m' ^( D& n        pbegin=str;; c  s. D# m( e# |3 W5 W+ j
        while (*pbegin==' '): x7 @/ c5 n6 R% d+ \. Y4 p
                pbegin++;9 n/ E3 Q. B& m7 c) V& @3 ?

7 Z6 y' y9 M( r4 h6 l0 K        p=line;& g6 G4 f/ B( r$ t- S. P0 ?
        while (*p=*pbegin){
  W& Q; ^9 e, h4 f# _. E                if ((*p==' ')&&(*(p-1)!=' '))) u" x. U2 }+ z3 I- H' L/ m
                        pend=p;
9 v) w" E0 S: l% W* k- g3 Z                p++;pbegin++;        7 n5 P4 k% k! i5 \+ T/ p" H
        }$ y  s' k! {6 M) ]
        if (*(p-1)!=' ') pend=p;) }: w4 t0 l, {, @- E
        *pend=0;
& O1 W  x- |3 m' C6 ]' L( _2 @  P: ^        return line;& ]5 i4 p  s, l% P* u
}
+ v# a/ T( K- V! o: ?# m2 g- `
. ]4 _' g  l3 A+ j" j5 u: H0 `* l; e: }
//获得网页信息 - 网页信息是中文会乱码 用英文信息( p7 |, E( V) H/ b
void 获得网页内容判断外挂更新(const char *Url,char *html);
+ C: |2 l' \! \9 P& Nvoid 获得网页内容判断外挂更新(const char *Url,char *html)* _8 h8 [" I9 w2 l
{
1 o/ s/ z; v, k! x! V        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);* _- z4 Z" t$ p' H% w
        if (hSession != NULL)3 |; z! R  r) w0 @1 m+ N3 `2 V3 x
        {
  q5 @, r. k- @/ [3 L                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
2 d8 i8 _& _5 f6 |9 K9 u                if (hURL != NULL)
/ y5 H' X6 w4 z* ^# g+ D) [3 f7 j/ g                {
6 m" R! n  `1 i8 X
& |& ]; ~! D6 B+ y( p* \                        char Temp[MAXBLOCKSIZE] = {0};5 ^) c" V# W4 R
                        ULONG Number = 1;3 }/ d) x4 _' R! \5 `
                                while (Number > 0)# k8 b  }+ o. h' V- b" L. ~9 W
                                {
$ U+ f' `& J$ R; m: ]; e! @                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
) M/ e& r* h( ^$ U9 D0 r                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
8 U8 |, v8 B$ {% p- R                                        int a=strlen(Temp);
2 i8 R3 n9 P! q# s8 o9 w) B+ `                                        int b=strlen(判断版本);   
4 _7 U9 [* p/ M. S7 L: B; i8 E+ E6 D                                        if (a>b) 4 |* l  @# b( D" x% R% A; G0 y
                                        {
5 [, c. C2 D4 ^$ \: P" p3 n0 x                                                char *p=strstr(Temp,判断版本);" W7 N8 L2 s: u, _% K1 w; _. |* K
                                                if(NULL != p)# A! @: N) r$ C
                                                {          4 p4 O$ F: g  ]4 U1 R
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置" r/ \* x9 F  K8 c$ f
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
* S5 a' ^0 m- A                                          char s1[132]="";
  `& @6 r% |) j5 G' V: F2 w                                              strncpy(s1,Temp+wz,wz2);
9 m3 l) W5 h. x7 l/ O                                                  char *p2=strstr(s1,"MEILEI");- |$ J+ Q2 ^  |8 N
                                                  if(NULL != p2)
9 @; z/ k( p; L& i                                                  {  
" c0 j+ @( h  N% [1 J                                                          wz2= strlen(s1)-strlen(p2);! s3 w9 y$ Y4 X1 Y. N& c& \4 n
                                              char 最新版本[132]="";
! k6 c3 n/ m$ U                                                  strncpy(最新版本,Temp+wz,wz2);0 _, p1 h/ w% H* k, X
                                                      if (strcmp( 外挂版本,最新版本)==0)5 f, R' a% n* n* [& g
                                                      {
) B( k6 k3 T+ d8 T$ s  y" q                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );4 N+ k9 E, g0 A- x
                                                      }
2 b. T$ o5 ~6 W                                                      else. S: q7 Y1 y  E& M+ [$ Y* S
                                                      {8 r, S# F& K* k) l" u$ L" f
                                                            char msg[256];
8 h" l$ M% N; @3 u$ v                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
6 h) s, ^% u+ O; d0 H  |, E                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
# z9 ]2 [5 `1 D7 f( j                                                      }' J0 W' ^$ B' _- u2 P
                                                   }
; _6 ]( u9 ]# k6 n  z3 g                                                  goto LH;
5 A' m; c. j( t' \1 M3 N                                                }
; t: V' a. T0 ^! g) p  E                                        }( ]0 s: s' Y9 j2 m" k6 V& i" h

; K" u7 a* e# s$ L3 Z                                }
( }# E$ _( w8 s1 i& q: K8 t- S                                LH:;) B0 g. \% b; d( R3 P* |
                        InternetCloseHandle(hURL);7 T2 r1 ?5 `5 T* w: u  j
                        hURL = NULL;- l6 @6 ?: [, C
                }
3 x2 v4 B$ f5 H- \& ]! {
! [) H8 _, s  ~5 U                InternetCloseHandle(hSession);
. q8 r/ |( ?  Y3 I6 V% E                hSession = NULL;; c  P  O- [( D4 C- I
        }# X: q/ R6 p5 q& u5 ?) g
}
9 F% T! g4 x) _5 l7 U) u' K; ^! L( S: p& a# N+ `6 Y$ y0 C1 H

2 Z& V/ w& e" P1 |, l" `//----------------------------------------------------------------------------/ j! i) i/ B' Y$ K, l8 |  C
//  Activation Methods
3 f! c2 J9 U' L! u2 x//----------------------------------------------------------------------------
& k# r9 \! K: u: A( H8 o3 w% C$ |; Y
& g* C. B& h% ~8 S( J2 E$ x//  Unigraphics Startup
( I. Q5 Z( o, F6 E/ d6 i; |0 k9 m//      This entry point activates the application at Unigraphics startup, i8 i2 c4 f- _) P' T
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
; Z: Z4 I4 v( g: Z{
# j1 o# i8 x% i6 w: p    /* Initialize the API environment */8 ^' a8 ]! \5 J7 [7 n
    int errorCode = UF_initialize();
3 C6 S' D3 L1 M$ p' E/ h1 }
& ~$ X5 o* t2 c% j) |5 Y4 k# b    if ( 0 == errorCode )6 K% `0 d& W4 t$ _
    {7 D: q& r5 c$ b  s( r& @' o1 ~
        /* TODO: Add your application code here */$ r- V9 D# m/ @
! u+ [, W! U  O

. @/ q0 l3 R, u$ R6 k  b                //百度云公开链接 通过修改txt文件标题- w' B. J2 b# o5 L2 k& D6 x
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt2 G! p1 F5 n# J7 g5 K. d
7 O4 L+ X, [8 s. g; e( T

3 P# _5 ?  O  Z                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
0 w8 A8 K2 C+ C/ `8 j                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); & M2 p% j2 X8 G3 l: q
               
7 z% H7 Z& t8 W        7 i) l: x3 j" u2 J9 M2 j

# K! r+ D+ F1 a8 n% O6 Z) ]; p3 C
. L2 t) h1 _, }. T0 x5 n
5 Q3 y! n/ W7 T' f! K: r" m; Q        /* Terminate the API environment */
8 h: J5 {& x& U$ R        errorCode = UF_terminate();- F/ Y: u2 a0 t! X+ F
    }
: }6 H  \4 V3 ^+ z! K1 s/ W! Z
* u* c: s6 x( s    /* Print out any error messages */
2 N5 z- z8 N  f- ~return;
8 Y4 Z. ?. A2 E6 @7 W  J}, \; e7 ^/ h1 [" j4 b/ g
1 ]# {' K/ j- E
//----------------------------------------------------------------------------$ P7 T6 z' O: W0 e: T  R
//  Utilities2 Q) m  \) `+ }/ c
//----------------------------------------------------------------------------
" q7 N% O$ g, @6 z5 c, H4 Z& m4 p- {: x5 b7 _, x
// Unload Handler
: A  `- Y9 K* b, l/ C/ y! `' \//     This function specifies when to unload your application from Unigraphics.
: D# w0 f; w6 J//     If your application registers a callback (from a MenuScript item or a# D! t: U, _6 s
//     User Defined Object for example), this function MUST return
" F; W0 {9 Z" n! Q+ M2 M//     "UF_UNLOAD_UG_TERMINATE".
9 [4 o; S) Z2 n9 u' v$ g0 ^extern "C" int ufusr_ask_unload( void )
* n5 `% o' R+ e! N- `& b{
) I' i0 O8 t; Z    return( UF_UNLOAD_UG_TERMINATE );
4 ^  Z9 ]5 `1 k8 A' ?' H}
& ^$ X  C4 _! e: v" B, q
% ]' Q8 g* `6 w5 S! e0 {7 V- d8 \& o9 R
启动UG就启动dll的方法
3 @9 N! S0 K# K
- \  T7 d$ y8 V! x  [/ X方法1.添加环境变量" a# q% }5 ~3 k9 d4 L% ]: J# q: w
USER_STARTUP=D:\MEILEI.DLL1 {  [! d' g( ^2 X3 z
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了, d; h- F+ K3 j+ ^7 B/ P& ~
( x, l# x% ]' L4 e, Y9 o
方法2.在代码里添加(可以执行n个dll)
8 ]0 I* g# w6 |! q. k, HUG会自动加载 startup目录里入口点是ufsta的dll& ?( ~4 _, {0 c

' x5 A+ R* {, ~" [8 D9 U9 G所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
/ u% u% W! P& L$ X' w参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了' r- e/ q6 O% I0 M# u: w, S3 h

' i  g- @5 g- n菜单参考  NXOpen_meilei.men.txt7 G  Y* q% }* l: C

+ C. S2 R) z, b/ bDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
* N0 H' h# p0 {( i0 W) F启动UG就启动dll的方法源代码下载
3 z) G) O: W( D0 V' } 启动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二次开发专题模块培训报名开始啦

    我知道了