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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 0 O% w$ G9 X5 M2 R& f

4 _/ a* Z0 @$ _5 x" r: ^如果你想每次运行UG 判断 ug外挂是否更新
4 o0 N& K% v: h1 I6 B* x& k! {/ o4 b! [* T
8 ?% ?6 B9 n7 J; [7 \7 |8 v
原理:
" \/ Q$ L7 w6 V- I2 Y8 ~+ L自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
* @/ q5 s3 A* n6 z$ e& N% t然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断* J3 B! ~% G; G( ~+ P3 ]* d. w7 P
8 D% i" j4 w7 k. w

2 U' D6 M% s/ |9 J被启动的dll程序源代码,如下# {3 ^. {* Y4 Q( O3 j0 r4 v

7 X+ P, K$ i( D7 O! ^% R* G//  Include files
( Q; K1 z+ S3 [2 J2 p7 T, }#include <uf.h>9 U6 i9 x& d( U8 O. o! ~  i  j* ~
#include <uf_exit.h>4 [5 @7 h2 n$ I4 E; K) w
#include <uf_ui.h>
+ k, x- g- j, t" b. F2 n( B% z#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )) c) P8 O7 b4 F
#        include <strstream>
4 U! t% ^9 ?; O; A#   include <iostream>
! {1 b) j; U: w& p, u, n        using std:strstream;
+ a  ^8 b  K4 [/ H( o        using std::endl;        
% c! p) l9 l/ f& ^6 z        using std::ends;  u  M* H2 `! |% o( V
        using std::cerr;
9 ^5 M8 l% o" e$ s4 R#else9 w/ k+ q% f" o/ ^7 C5 B0 G: H
#        include <strstream.h>! F- U/ O( i2 F' ~7 |& ^) ?  U
#   include <iostream.h>7 f, T# v% }. k7 t% C
#endif% y1 h! ]0 k( @" E: i( E3 T
#include <string.h>
& f* G4 @' h& L& w4 X- ?#include <afx.h>
4 M, p9 }8 s$ x& x: b2 H% Q# {#include <windows.h>- U! k) R% O+ w" z! V6 J; d4 z
#define MAXBLOCKSIZE 1024
! K/ ]& Q3 Y4 n- d( G! T; X! p#include <wininet.h> //网络4 f8 N  C  M. A$ j) v" u
#pragma comment(lib, "wininet.lib")//网络
6 s0 X7 y& U9 u- f  C9 r
& p5 q3 z  r" E$ tchar 外挂版本[132]="V2.8F";  i! r) g0 @4 X9 Q# X- [4 H
8 R6 v5 I* x$ v! U

. z2 O& g: b! W0 Qwchar_t* CharToWchar(const char* c)   //char*转wchar_t7 N7 t9 l6 T: {7 D
{  ( R' J/ F7 g' S6 G4 e$ s3 i
   wchar_t *m_wchar;
" o0 S( C8 w8 |7 _7 O7 T6 _' |    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  % [3 c- r& f! J0 ~" A* J
    m_wchar=new wchar_t[len+1];  
: E; |, i% ^- J) {# Q2 }( y    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
/ u+ a4 S" c+ z9 b4 p$ y. l    m_wchar[len]='\0';  
6 q# T6 I* l8 p    return m_wchar;  
3 U) Y' F7 O  R}  ! `0 v( O* W: I+ E; u3 l4 ^8 L
& U! T+ V$ r5 C4 V
//TCHAR 转 char1 K% |, `# B$ c5 k
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
$ x  ]: z9 x7 |$ K* b% M4 {{  , `. o$ r) D0 A5 w4 ?% w2 u
    LPSTR pszOut = NULL;  
& E$ i" L- w, Z# t" S    if (lpwszStrIn != NULL)  
1 @1 T. g% l& L) s3 t' K3 _/ `, \  g    {  
; v& n1 A7 g, g+ K        int nInputStrLen = wcslen (lpwszStrIn);  
7 p% z$ t! Y6 U+ ~, w
5 p% I8 X7 m2 r" a9 Y" G( T3 W' u        // Double NULL Termination  # V: ~. z- C8 @# I) K. j
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
0 d( }' X, v2 N. y) i        pszOut = new char [nOutputStrLen];  5 E" U0 A, j; M' f5 ^9 ~2 P' P9 U
3 S3 y$ I/ X. H, P+ ^
        if (pszOut)  2 Q6 }0 {6 o) \! U9 C3 l
        {  2 t4 B5 ^) L9 K" H7 j6 T
            memset (pszOut, 0x00, nOutputStrLen);  : f/ A3 p9 \9 t2 [9 B( d& J: `
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  % k8 x; j6 ?4 b# V6 B5 R
        }  7 z$ U+ I, x+ M7 Q/ B3 n
    }  6 r' l/ z5 q0 \
    return pszOut;  
- q2 N7 ]* i% X9 C0 j! v% b}  % w* s' ~$ Q8 {* f9 O2 {4 O
; ^' F. o4 ], h, F8 A

; V3 `$ Z+ c; R; N9 }//CString转char8 ?& q& J" `- i2 Y* X( H
void CString2Char(CString str, char ch[])
$ \8 H$ `3 {" ~! d- ?{
% ]% k; u9 v4 L6 {2 `" Z: }        int i;
6 C! `3 {0 s( q( s3 `$ z5 }. i        char *tmpch;, |& q3 k, r9 C9 X! @" [4 a
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
7 U* k2 O( |! W1 i+ G        tmpch = new char[wLen + 1];                                             //分配变量的地址大小7 a6 z, }; p) a' J8 N( M% Z
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*8 L7 i" @- |$ Q

4 H; @( w1 X) _        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
7 ]* F; n8 Z9 z. I% G$ f        ch = '\0';
" Y7 G- z2 s0 ~; o" H% ?: e7 ~}
" X6 S0 ^3 V/ A+ \$ d: f
4 m2 K% ]! d6 W# @
. m& i6 t: N' W  c. b, V& nchar *去掉char首尾空格(const char *str)
9 a2 p# ~/ ]  ~. k' s{
( R  t) f; Q& I% F0 D1 ~' a        static char line[133];
( ]1 d9 U4 O5 e& V! r& T6 r        const char *pbegin;- h0 a: r* m  A- K: B
        char *p,*pend;
. F2 _4 M- ], L7 p, c2 G1 f        int i;$ f$ s$ r; t9 i6 n

, _) P; K/ K* }& m+ p2 S        pbegin=str;+ ~1 P0 C9 m9 T/ Q! j
        while (*pbegin==' ')' H# S- v$ U* \4 S- `) V
                pbegin++;
( x* ]% ?' V! J7 q
& s0 p- R: Q1 M  ]        p=line;
, s' ~- e3 B7 R  i$ m# h4 g        while (*p=*pbegin){; r' {& l" e& O; v
                if ((*p==' ')&&(*(p-1)!=' '))) D- y2 r4 K0 R: D, `) A
                        pend=p;4 v+ m5 t4 d7 ?- c* j5 V
                p++;pbegin++;        
: ]$ \* G4 a3 F* ?5 T        }
% c/ o! e; a; {) ~( I        if (*(p-1)!=' ') pend=p;8 F7 k, C! n& ~
        *pend=0;, e! h+ H7 q8 H- L! E  N
        return line;
  M2 ^- Q$ l0 w% b}   M; \; J" B. B

. W; ~0 n9 B. F; h3 X% q# G( k- F
7 y' [4 M- p/ s) I//获得网页信息 - 网页信息是中文会乱码 用英文信息6 M. V, d' C% J7 U1 N5 p4 H
void 获得网页内容判断外挂更新(const char *Url,char *html);
- }% g4 e6 |) r5 [! L+ ?* qvoid 获得网页内容判断外挂更新(const char *Url,char *html)
3 s$ q1 i5 \+ l! r: e{
2 {2 b- q, d4 {  J        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);) M0 q2 y  X2 {- J: j; ~' ^
        if (hSession != NULL)1 U5 o3 }% o  u3 W# o9 M& ^# u
        {
+ a  l+ @7 H2 T3 h% G                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);# s; O+ D( a4 E6 E7 @* k$ ^
                if (hURL != NULL)
: D* g1 t' z  G% |: J                {' I. Q& m% _- U! S; |
! p: `& |1 n& W2 _9 C
                        char Temp[MAXBLOCKSIZE] = {0};% U! `8 H# Q# ?5 ?
                        ULONG Number = 1;! ]. D9 `: z$ d
                                while (Number > 0)
1 P  A# {! w* K$ i3 X% Y: _! p                                {
0 [( o! i% o3 I                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
: r; s  B. D% s                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
3 r' k* n) R6 S5 B% U                                        int a=strlen(Temp);
4 W# G! S6 }1 `: Q4 B3 h& C                                        int b=strlen(判断版本);   
3 d! l4 q' K4 Z# N                                        if (a>b)
. j7 m3 d* y  t5 W' v3 n                                        {
) V& }9 e4 N4 V0 |, w: w                                                char *p=strstr(Temp,判断版本);$ ]: G' Z' e! i# y# K8 z1 F& U4 t* F: t
                                                if(NULL != p)9 \& x( E6 ]* k+ p9 u  a8 r+ s
                                                {          , o7 `1 W4 U4 r( H) m
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
* c+ z' a3 @& e: n; F1 @                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;4 A; t' X6 V9 |) V* V" I# W
                                          char s1[132]="";
! ?( A9 i7 X# _' q6 x8 U' x                                              strncpy(s1,Temp+wz,wz2);4 l4 ^$ X+ {* o, Q
                                                  char *p2=strstr(s1,"MEILEI");) ]& \( o  l$ c( x) a8 Y0 h
                                                  if(NULL != p2)
: T' e( l7 `# T/ `& j! D                                                  {  
/ O, q9 K: {4 j9 T* L7 C( O- g' G                                                          wz2= strlen(s1)-strlen(p2);: [$ K0 g7 X& S% T; K& \% K' Y
                                              char 最新版本[132]="";0 _) i0 _0 q2 k' V
                                                  strncpy(最新版本,Temp+wz,wz2);2 N! ]6 R7 {$ l3 R& P+ V0 k
                                                      if (strcmp( 外挂版本,最新版本)==0)3 A9 p3 T* l4 n  c1 x7 k6 W
                                                      { 3 @& y6 E. V9 a9 }+ k
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );9 y. E) V4 B+ p- U4 ~9 ?
                                                      }
# i3 B4 j7 H) l2 }2 D                                                      else8 V& A% e, i. [7 h# U6 W
                                                      {
/ ^: e9 ?. M- k8 f1 V  N0 y                                                            char msg[256];
0 E; q, M. [1 m* h* E                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
4 e. ~" Y& c# a! a6 ]8 }! u                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );4 V5 a9 ?1 \: s  w4 n" C4 o
                                                      }5 x' M: u* k8 Y3 k! }( t
                                                   }
& d% _/ l3 V& j7 t. J+ G                                                  goto LH;# x5 h- C, l/ V0 R- r9 A
                                                }2 D/ `2 }. O* I3 T# ~2 x  W
                                        }
0 e/ R! z) I/ P/ e5 u7 n/ Z3 [  ?# A( G- H
                                }. V. ^9 O4 J( r- m
                                LH:;3 q# w3 W6 b2 n! q+ ^
                        InternetCloseHandle(hURL);
. j, o# ^; }& K; r                        hURL = NULL;% T# \! }' e8 ~9 d
                }( Y/ {& @! o3 d9 E
  F$ _5 D* H5 U0 ^9 x
                InternetCloseHandle(hSession);
# }4 Q+ q, J: |                hSession = NULL;: g+ w+ b5 U( f+ j/ g& y
        }
& M! O6 i8 ~+ a! l}
" `- q2 I3 u( u, h0 ~8 A! |$ d) ?. N3 R: d% C# B$ c+ C4 G
) f3 W/ O9 z$ p& p/ f' v" U2 R5 P
//----------------------------------------------------------------------------0 ~3 ?" [" f( b8 I& k
//  Activation Methods
/ V, f# y( Q* g: w//----------------------------------------------------------------------------, D6 z& d  n5 o# K3 m% Z( t
0 u) Z) Z: y9 _
//  Unigraphics Startup
2 Y( b" h' R5 H- [+ S& k//      This entry point activates the application at Unigraphics startup* Z, q* O0 u' p/ X7 E0 A
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
% V7 T( P+ s( c  E. T  W{
) _. E& i! E/ r. T    /* Initialize the API environment */
0 W8 ~! M. J7 k5 S    int errorCode = UF_initialize();+ [0 D6 L& y5 a2 @0 @4 Q+ ]* P. ]

5 [. F2 a6 d1 Z+ ~& G    if ( 0 == errorCode )
3 `- R, N9 K% O% ]# v    {
: _0 b8 h! m% e1 L        /* TODO: Add your application code here */
0 y& ]; i3 L, r. n) u4 }; w2 J6 d1 M5 V( `) D' G; i
& H% Y. _* r) n7 h
                //百度云公开链接 通过修改txt文件标题
+ v& Y3 D  V6 b/ `+ K/ g                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt+ y. j# I* q9 z

, B8 l# L) N. E% `; i" k/ `9 m, Z3 J! W! s2 y0 i
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
; h: L6 N) c! Z! `7 p                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); ' ]5 z- r& A% p5 H" c9 h2 [
               
7 x1 o; z7 L+ P; e2 H* m# s        
# h# e8 S& U/ h. e2 c. p9 ~) j/ c4 C( s; ^1 K

4 P8 E" H& J9 K6 K' w$ h' q; [3 I( Y5 J5 S
        /* Terminate the API environment */  v4 C. L" u! q9 S( N
        errorCode = UF_terminate();6 @/ J: ~% b+ k5 r8 e$ K
    }
. t4 ?5 }) P; t' O2 G( D2 o9 k  j! `6 m9 F9 z' F1 Z9 V. A; d  r# a! n
    /* Print out any error messages */
* L8 C* Q: i/ `return;
% q4 R% P1 G- a; w}' a, o, }3 V, k- @: w

# K6 Z$ _# Y2 }4 ^/ P//----------------------------------------------------------------------------
4 E( ?' O5 T. A, w//  Utilities. O# s! ^0 D& O- y7 O! d% Q
//----------------------------------------------------------------------------
& s; D7 V$ h+ z; G+ e5 \0 ]+ C  p8 o$ f  ?. L
// Unload Handler
2 `! r2 f' q; n8 P//     This function specifies when to unload your application from Unigraphics.- {# v3 ~8 E2 z* P7 M
//     If your application registers a callback (from a MenuScript item or a
7 n2 g; U% u3 r5 A* E$ ^//     User Defined Object for example), this function MUST return
0 N) r& Z, h; X; S: a( }//     "UF_UNLOAD_UG_TERMINATE".
0 E" Q0 E7 D6 v' \; I  }extern "C" int ufusr_ask_unload( void )
' V# X! K8 h+ |2 C* S  p9 j- ^: Q; `{
' r" `/ U' C7 ]" p' [8 L" f    return( UF_UNLOAD_UG_TERMINATE );
0 G6 ]5 X; z  o$ u1 X& d2 E}
7 Q% B& f0 B) x. M3 I( g, S# @$ u3 |
8 T2 W1 G8 N4 R9 x) V2 N$ V5 a
: y' S4 Y3 e, K, k* e2 r; B启动UG就启动dll的方法) V) F( G1 S3 A! S- h/ E8 g/ q
; Z% Y4 p! [: m3 v
方法1.添加环境变量% d3 k" H# Y9 ?  K( ?; i. h; t
USER_STARTUP=D:\MEILEI.DLL, U/ c9 V7 y. p
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了6 V; P, G0 [8 F( r

- ?4 ~8 B" Z3 ]2 b方法2.在代码里添加(可以执行n个dll)
, @# G7 r  D/ BUG会自动加载 startup目录里入口点是ufsta的dll% I) s/ [9 w. W/ x
% Q0 ]# Q9 G2 x$ a1 R& h9 p5 t! d
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令) Q" J; _( g; D& A+ |, U
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
# u# b9 v5 H2 j$ l
6 e5 U, X' i# r; p. U& `4 }菜单参考  NXOpen_meilei.men.txt- b  P; b7 N1 B6 g! ]' k
& C4 y: l, X+ ?/ T3 `( `7 w) [+ y
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
" k8 E% J; X# a/ O+ y9 |# w启动UG就启动dll的方法源代码下载$ w) w! w9 f0 P4 Q+ b* M8 Y$ C
启动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二次开发专题模块培训报名开始啦

    我知道了