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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
. K: H9 {5 v6 ^0 Z6 d1 p# A: v4 ?) B. O8 m4 K! M
如果你想每次运行UG 判断 ug外挂是否更新
) A1 G2 |6 \. S  u! K) S' \1 s1 f( {+ ^% ~9 ~; H4 M; |& S
" \9 {9 p  _' G3 ?# x
原理:
: ]  u0 O' h3 b  V, x; R5 N自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了$ H) _$ y& r: U; P
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
. _9 W" O/ H. e5 Y) Q, ~. ]7 X1 D7 @- n

+ `) {, B# A# X; j& E被启动的dll程序源代码,如下
: g$ j7 O3 n) u/ w  P; K* @- R' s& _5 {' s
//  Include files9 I/ t  Z5 w- @5 ^! W
#include <uf.h>
; I! K8 r* v7 L#include <uf_exit.h>
: R# ^7 L8 f+ g1 I1 q#include <uf_ui.h>
, \' W: ]& {! _: C. s#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )  K1 |8 `- _' A3 o1 E* F
#        include <strstream>
3 P) S8 x  L1 W9 [) U6 E#   include <iostream>' b) b7 t' D) c7 l- O; \
        using std:strstream;  T: f+ r7 K% H& b) M
        using std::endl;        
' x$ F8 p, z6 K/ [: `  [8 X        using std::ends;
% b8 s0 U+ ^! l, o! S6 |        using std::cerr;
2 N' S! T4 G  p- ?4 p% i: N  j% r* f#else
1 F( B" Q* Q) z5 \# R#        include <strstream.h>, Q; s  M/ v% L' O/ e- \2 |) b( R
#   include <iostream.h>
: {" F. o2 J: K+ |3 x#endif
, v5 j8 ]8 }% A" l#include <string.h>2 k+ i% `1 N) k1 Z
#include <afx.h>
- _' n6 ]* X* T! v& r6 r8 |& |; b* z) {#include <windows.h>0 p+ V3 X7 z3 p6 b1 l% Z0 \
#define MAXBLOCKSIZE 1024
# P* [) F! }- W* J#include <wininet.h> //网络
* e; D$ F. F' i7 p4 ?# L% @#pragma comment(lib, "wininet.lib")//网络* |! `& y% j, v* E2 J6 h; N2 b7 i
; K( g' k- `. B6 ~: T  p% p
char 外挂版本[132]="V2.8F";# G, M. h- v7 ?) h: v

% m$ ?$ g# ]% v6 ~2 Q: w1 r; f; N* _8 m: _7 F
wchar_t* CharToWchar(const char* c)   //char*转wchar_t. O+ d: c- B7 d! b5 M& O+ c
{  4 U. t' n/ x- Z, i
   wchar_t *m_wchar;
+ ^* o( y9 L7 E. o( \    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
1 Q; A- Q3 C) _  w5 z! i    m_wchar=new wchar_t[len+1];  9 c$ ?" ?& M( H: j
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
: I6 K% {" t, |$ z    m_wchar[len]='\0';  * B. X/ r4 O. j+ m  a( H& c; K
    return m_wchar;  , p  j, _" T4 j8 q  ?/ h7 }
}  
  `  O! r5 s  M: s  [. ?% W+ m. b+ l; S" {( A
//TCHAR 转 char- p, E3 ~* i, S6 o# P- b
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
! X; A* C: g- i2 `) ^  J{  5 l, \, O4 H* P- g* o  }
    LPSTR pszOut = NULL;  
8 O, b3 r  r! ~) [* w3 S" {    if (lpwszStrIn != NULL)  1 P5 b. ~* ?1 [
    {  1 h" I! C  `, ]+ Q. J
        int nInputStrLen = wcslen (lpwszStrIn);  2 E; ?" t: \! S7 }3 U. V. {2 f  ?: W
* j9 ]: x' u5 Z4 V) Y
        // Double NULL Termination  3 r, k5 {9 w. s& ~% }4 J
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
/ {; c" [$ @8 m1 w# D        pszOut = new char [nOutputStrLen];  
! ~2 I6 n, _; a" }+ I' C
: O$ @( n5 G- j8 g& h        if (pszOut)  
( l6 i- y* _7 Y* P0 F; {        {  ' E- K5 y6 n# H( T
            memset (pszOut, 0x00, nOutputStrLen);  3 X8 l* v& Q9 |9 J9 F1 X" [
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  0 G4 D2 y2 A/ u9 \
        }  ' Q4 Q( O1 ]  }+ Q: b/ n+ ?5 F3 Q% L
    }  
$ |0 B$ a: l( b" a/ ~5 O& @    return pszOut;  5 I. j" p7 ^$ W: X1 n
}  ( t2 ]) e% h9 I' W  l) x' S

1 ~; _6 V& r7 {7 j8 S- R9 H; c1 e/ m: c5 r) p8 ~- j4 S' a$ |
//CString转char( W( v  ~( b& _. j1 J3 h8 h5 n! l
void CString2Char(CString str, char ch[])' M' P% m& F- A! p, f
{
, j% ~* N8 ~0 W& k2 ^& _5 T! e, ^        int i;; z, K& I# k+ t/ O0 o; C  X
        char *tmpch;. d9 N4 ]/ i# q
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
& |% Z$ x, G  s$ p% f4 x        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
) R" q+ ~" N& S        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
3 t5 b7 H! s" H! {* P+ T" N& ~. h( q$ I
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
; m% f% l2 Z" U) f3 Q        ch = '\0';, ^) h' n* e! G& G5 G$ W
}8 K# K) Z/ A! L7 q

/ a7 F6 g1 i: ~9 O$ p0 U
2 D# ], s! Q; o+ q, Jchar *去掉char首尾空格(const char *str)- L. r! m3 z; n
{
6 [  D8 q" a  \% O* h- G/ u        static char line[133];
7 R( `  m0 H5 h        const char *pbegin;6 f- R$ i5 k7 t% C' f* H- x6 [
        char *p,*pend;2 x, J4 J# e1 h. V$ e- U8 t0 n9 n
        int i;  z4 u. q& I# `8 ~6 r! c+ m! c

7 ~$ R# y# u7 W! F: d- V, F3 a        pbegin=str;
) T6 v, Y$ E1 B: Q        while (*pbegin==' ')
& t' U1 }+ t. l; y                pbegin++;
* `6 e! s: C+ h9 D+ W( Y2 D+ d- N
; B3 ?& @( i: @8 Q        p=line;# B; s+ _9 e7 a/ F$ C  _' R  V
        while (*p=*pbegin){
1 R) ], S" j! W                if ((*p==' ')&&(*(p-1)!=' '))
* s/ ~" j/ J! j9 B                        pend=p;: r* `4 V) Q. u% q2 O
                p++;pbegin++;        
+ W; Z/ g5 E$ |2 y3 y5 R6 M        }/ G8 a2 V0 U$ I' W: G
        if (*(p-1)!=' ') pend=p;! a- Y- r4 ], ]* I9 `) S1 @
        *pend=0;
( a3 N' I0 A, ^$ t  a: y        return line;
3 k- ^8 B3 x- o3 j} , K5 g6 p& F% D) ~
6 m3 ]! p& R+ M0 B

+ |7 m2 \2 S+ {! f$ r+ \" W//获得网页信息 - 网页信息是中文会乱码 用英文信息! l" ^( C% m; s8 i$ a% n8 I
void 获得网页内容判断外挂更新(const char *Url,char *html);
  e: D, Y* v1 _  e! m  Qvoid 获得网页内容判断外挂更新(const char *Url,char *html)1 v6 ^; V4 w7 o$ B$ p
{1 e, ^3 f8 I2 c! N- w
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
: ^1 U6 f/ _8 n, W        if (hSession != NULL)
+ A; a# t+ g9 y  L, c* X        {2 G. E& _1 u6 _9 W' z
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);7 O5 |; E, l" q' ], t$ o4 v$ _
                if (hURL != NULL)
$ d5 e9 b5 S6 \1 e! a7 L                {
1 l* w- w# g+ @) _8 I$ y% e* v& N# f- Z8 w/ e
                        char Temp[MAXBLOCKSIZE] = {0};- ^# l; X- u# {' a- B+ W8 {' T$ T4 C2 V
                        ULONG Number = 1;
/ D: S( v- K& F- A7 s) g                                while (Number > 0)
0 \* I5 E  o# P. Z                                {
$ g' }! K) @) A3 a$ O                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);' X, j  K5 E2 [0 q% }9 F
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";5 `; I. G- Q/ L- T
                                        int a=strlen(Temp);
' a) f* t+ l# f                                        int b=strlen(判断版本);   " u: z3 k/ d+ _" i- ^3 G1 |, i
                                        if (a>b)
3 ~" N# n4 A* ^/ i' q                                        {/ D' G& S1 ~# g; @( J' Y
                                                char *p=strstr(Temp,判断版本);5 e2 |3 h+ Q8 J' c0 m$ d2 j8 t  ~
                                                if(NULL != p)- l+ S6 J' ^- ]4 Z
                                                {         
6 K; w- t* G( h/ i2 R, _                                                  int wz=a-strlen(p)+1+b;//版本号起始位置2 Q  D7 Y' c  }; Q
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;9 j9 C) q5 ~1 L. h5 I/ W# `% E) d( G6 m
                                          char s1[132]="";  w7 Y# L! d; J+ j, @8 f' ^' ~
                                              strncpy(s1,Temp+wz,wz2);& M6 w0 U  W' y. B2 Q2 n
                                                  char *p2=strstr(s1,"MEILEI");" V4 r7 x4 d/ J- L4 J
                                                  if(NULL != p2), S3 Y4 T) T$ i3 e- V- b
                                                  {  ' U; m) v* l! r  c7 P  t# e
                                                          wz2= strlen(s1)-strlen(p2);' N' l- u4 a5 r% |/ M
                                              char 最新版本[132]="";! y9 o7 m. O0 M: ]
                                                  strncpy(最新版本,Temp+wz,wz2);
3 L: a& M3 Q2 X3 R                                                      if (strcmp( 外挂版本,最新版本)==0)
# J! M% r7 s8 J6 X                                                      { 5 n+ @1 a2 e2 I- H$ S4 |- x  r
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );& o, X4 f& \  O: p4 A) S, d
                                                      }* Q0 b3 t3 T/ V4 G1 W/ n
                                                      else
! d0 Y& q) R  n! P/ @  ?3 X                                                      {9 m7 F2 d" C% w, Q% U
                                                            char msg[256];
+ I; ?, c$ R3 T! ~+ G                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);( M; t6 Q2 t$ s* ?6 n+ n- [! Z
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );- x: }+ E; A0 S2 G! J
                                                      }) w& i" a: U9 A5 N; {
                                                   }
% r3 `/ {9 V- K% U- E* Q: ~/ u6 ]                                                  goto LH;
- \- a8 v, g# G5 g  p9 h) b                                                }
; q( f, V; L2 ?6 r8 Q4 ]# J                                        }
0 Y* Y- G- l- x# h$ @' c2 C9 B2 Y1 l' a; Y/ t, r$ e
                                }6 e# Q: v, C, K+ r. w, w
                                LH:;
! o7 A8 m0 D, c% M                        InternetCloseHandle(hURL);  U% ?* u: j7 F* Q4 f3 ~& _
                        hURL = NULL;& r+ |& g0 I  d5 N0 `: _8 z
                }3 L7 E0 _9 R6 r2 C2 x7 p

2 v( A9 q; s% x! @5 l' a* \7 M                InternetCloseHandle(hSession);4 T1 K0 Q, N4 q
                hSession = NULL;, x& T' t# M1 g' r( F' q+ n+ o
        }% f3 _; \8 |3 d, P- b
}
% ^3 O0 W( g$ V0 l$ I3 P
" f& k- Z: O0 [5 N4 ~" ?' e$ Y- a* q% r
//----------------------------------------------------------------------------0 ]0 x. ~4 I7 l: |
//  Activation Methods
/ d  Z7 j7 d9 Y  Z//----------------------------------------------------------------------------. n4 r  U; c5 b( B% n0 m* |3 v

2 f7 H, ~! `% D4 I//  Unigraphics Startup
. i" L$ h; ?1 i% c8 V//      This entry point activates the application at Unigraphics startup) f1 O3 M* Q* G5 T
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )" D7 s: P* Q2 m8 |
{
. c( ?3 q/ {; Y$ n; i( x7 E$ o    /* Initialize the API environment */
9 S7 k. V5 @! o9 j2 K+ k    int errorCode = UF_initialize();& C- ]; y1 g1 [: M4 w
, B/ x: O0 W: p# H" a" _
    if ( 0 == errorCode )
4 E8 A+ _2 x: d    {
0 L0 h4 ~" p% a3 t; Z+ x        /* TODO: Add your application code here */, Y! S% R" e* V3 f6 s4 J8 E

; D4 @5 `1 y3 q1 c, ?3 d0 @: E+ a) d/ ]7 q
                //百度云公开链接 通过修改txt文件标题
7 q! V; t5 G2 }4 f8 _, p. \( U                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
* P# m! Z& U( @- k+ q  {8 d
+ ^( l3 W* i- c0 j/ a
5 S& N) T% l3 s: G; @                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
3 y  e# n& S% y                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
8 _' x" b4 p' G                ' T5 `# x7 ?5 H- w# j* z
        # s. q8 Z: R( `- N1 j
) A4 f3 y) f( W5 T" u

0 T. ~' K3 E' r# {$ t6 }- |6 S
4 S0 E5 I  A0 `0 y        /* Terminate the API environment */
. x1 X, H1 t- s& r5 a( j        errorCode = UF_terminate();
8 w9 Y/ H+ G* c% Q3 N2 J' G2 k    }
4 ?& E# A% ~4 A* B( q, A4 s+ |; ~4 A8 |5 ~' m
    /* Print out any error messages */! `" g; t* T+ P+ R6 d
return;" N8 L3 X( U: ~8 `0 y2 u" }
}# I7 z! g# G! Z  Z, ^4 r
$ n0 o$ L$ G; Y- O( u# W
//----------------------------------------------------------------------------
% [4 w$ j- M* G% }/ h) T, u//  Utilities8 k5 E' A, W) ?) H) a
//----------------------------------------------------------------------------
: i6 n+ u8 e7 K8 I
1 S" s) Z( C# V5 X0 u( {// Unload Handler
  B8 l' u- j) e$ ^* `8 x/ Z//     This function specifies when to unload your application from Unigraphics.8 j- r8 J4 W. o7 Z/ O. |9 R
//     If your application registers a callback (from a MenuScript item or a
/ n; Q8 a8 S; }! P7 i//     User Defined Object for example), this function MUST return; f1 {: c# z- _2 A0 W
//     "UF_UNLOAD_UG_TERMINATE".
8 Q/ G. u/ J( t% i, R0 w; e( Pextern "C" int ufusr_ask_unload( void )3 d( g+ m' b0 @7 R" ^2 q- ]
{
3 m7 n) X9 K2 R9 p$ a: K    return( UF_UNLOAD_UG_TERMINATE );! f, a; z0 b: k0 W8 \0 \
}" p) Y+ X8 ~! g
# g! ^, {/ a4 W7 |

4 I" T+ i- _1 a, O$ o4 |) D启动UG就启动dll的方法; C( A, M$ u* C: F% |
$ a  Y  _- Y0 F. s6 Q
方法1.添加环境变量
7 {/ ]( l6 v  S+ AUSER_STARTUP=D:\MEILEI.DLL# X1 j+ K0 i8 _/ \9 {) B
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
& I+ Q: t' ?  c- u* P6 q3 }+ ?/ k5 j; L4 Y$ L$ t' D
方法2.在代码里添加(可以执行n个dll)# L3 z6 u; u1 f
UG会自动加载 startup目录里入口点是ufsta的dll7 h) d0 h* n3 |0 U7 c! Q" |% E- Z; ~

* Z; E. b) _: f" N3 q. M6 I所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令1 j- l" B( _& R# ~6 m1 z
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
4 ^9 S) j3 d' V: R9 X4 ]% x
0 @% N+ ^& `' u* }+ \菜单参考  NXOpen_meilei.men.txt
2 l# r2 U9 u0 [9 A2 m# _  [
) W) Y# s/ R* x7 c9 sDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录6 d8 y4 D  D8 ]- L
启动UG就启动dll的方法源代码下载
/ I8 J4 J. q- x; T8 k3 a6 h4 u 启动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二次开发专题模块培训报名开始啦

    我知道了