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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
- r! z; C: a: S  u* j+ _0 Y. f' O! s/ A0 k4 W7 `( Y! A
如果你想每次运行UG 判断 ug外挂是否更新
) ], K( y. s& n$ }' c' P
/ t+ P4 y: j8 d) H1 c: H7 C9 l. L" o) l/ \# Z! J' [- M# {/ r0 h- T
原理:
/ J4 _. c! a& G0 a$ V" a9 C9 m9 M自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
. k5 M$ D0 x( a+ U7 v然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
0 ]+ `# k# }% s, a9 _
$ t, y2 S& ^* t/ W( L2 }) E  e; l6 X" c0 @* l8 g, U
被启动的dll程序源代码,如下
: R8 ^! g" ]- W4 Z$ P# S, ~+ A) H: a% }8 z. ]
//  Include files
, k( w% l' `  r. M" W( X#include <uf.h>
& B" H. ~. z# o#include <uf_exit.h>" }9 R1 h2 t6 e8 c7 x1 ^* V
#include <uf_ui.h>
  y, B( H4 Z: v8 f#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )& ^& N* }2 U( o
#        include <strstream>
$ a# E: m6 U1 g  u) V& ]+ W#   include <iostream>2 z) ]7 w" x2 q8 ^
        using std:strstream;
5 G6 Q" I) ~% b- v1 e+ f) w        using std::endl;        
5 o" d' a+ R) g8 y) s- F        using std::ends;; _7 K. _0 y+ \6 `: E
        using std::cerr;
! O. a2 I+ K# D) X1 V9 Q- N#else
( g7 F) L  ?/ D- i- X: ]; n  J3 o#        include <strstream.h>
' `! f5 _& V/ O7 Q9 f% b#   include <iostream.h>1 l* Y8 a/ F- E; [" S1 s
#endif7 m% Y' \6 o' M
#include <string.h>8 R2 p2 `0 Z# x3 j+ j- r3 R5 n
#include <afx.h>
: [. o, |3 x. Y2 F8 K& X' {" o  B#include <windows.h>& h9 \- E* z5 d1 U+ U# D% t6 q2 X
#define MAXBLOCKSIZE 10249 F# C' a* `- [1 v
#include <wininet.h> //网络/ a9 u. }0 R& x, r" o. E
#pragma comment(lib, "wininet.lib")//网络4 }' J8 e' K/ C9 X2 ^

% N; k* V9 D: U$ Ichar 外挂版本[132]="V2.8F";( F# _; c5 \: v
) S, R2 O9 ^" Y/ A1 R6 K
* C! E* k: v, b# V7 y' k  W7 n
wchar_t* CharToWchar(const char* c)   //char*转wchar_t5 ]( X2 M6 I/ ^4 Q6 P2 f. K
{  + y1 ~/ P2 e4 \) q, N0 b
   wchar_t *m_wchar;
( n) Q. Z" z* w# L2 S3 B    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  4 h$ y1 F9 o$ M+ {) p
    m_wchar=new wchar_t[len+1];  . q. V2 U: f1 `" C3 u
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
; J5 C' u8 d" i' Z7 G5 D  G    m_wchar[len]='\0';  
9 q) }2 D3 ?( A! m, Z+ u    return m_wchar;  
: y. L1 H# ]" j5 k}  % x) o7 L3 u, y0 p0 l' z

) Z5 {5 a6 _* \" T//TCHAR 转 char6 b4 R6 z( E' B2 q& S, y! _! ]
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  9 L/ {) O8 ?, O9 q9 h
{  ; h" U/ {  q' n' E
    LPSTR pszOut = NULL;  2 c9 x: e6 H- N, W0 N) l2 U
    if (lpwszStrIn != NULL)  
7 V) W- ?4 }! V# d* x, Y. |    {  ; F& Z0 k+ d0 J  U- P
        int nInputStrLen = wcslen (lpwszStrIn);  
5 z% x7 v  c* s6 I
; y* V0 v1 R$ m        // Double NULL Termination  - U+ D. f8 G9 T0 F  T: {
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
% H: Y. U  v- d) Y: b% b; u        pszOut = new char [nOutputStrLen];  
, T; I+ E0 H( f8 H  H/ n2 r+ |2 f* k$ }1 ~  n" K  s
        if (pszOut)    }: o+ I1 P+ i5 F! t
        {  9 V( a7 x, c2 U0 v
            memset (pszOut, 0x00, nOutputStrLen);  
( U2 \6 z. |6 d4 _: r            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  8 ?% Z+ u- @9 C0 }3 W; Y
        }  
: v# m6 A# r! a  `& Z$ B, z/ j    }  9 l0 H/ N% Y) A$ E5 d8 W+ f4 i
    return pszOut;  
; U  a2 m% L$ v5 n}  
- X- ^" x) t' U( S
3 r" ^0 B% q" o* w; Y5 a+ v
: Q, D# a' b& L0 Q; l; P- a, P! w# g//CString转char; _7 k; M; J6 V+ o
void CString2Char(CString str, char ch[])! C6 j- H! A7 h$ v* g  ?; F3 m
{  L: k+ @6 M& j" S
        int i;2 Q6 x7 w- {  X7 ?" ]# A
        char *tmpch;3 G7 O7 c3 P; M& Y
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度' G$ z6 k  C% o5 k) U
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
/ H7 O1 V7 @# ]6 V3 |        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*. z3 m! N4 i' J* O
* ~) j) J4 F: [5 ~3 M
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;; \9 I6 J7 a" `; R! l8 o' r
        ch = '\0';
( Z- F9 b& f' F; \# U( F- c6 N}6 d; U' G: W/ v8 P4 D
' _' {! @6 }. L4 k) y6 F9 t" u

+ Q2 H9 v$ u+ Z3 v: Tchar *去掉char首尾空格(const char *str)
" R  r& E% y1 r2 |$ L{5 Y$ g* y, v7 {3 V
        static char line[133];
# }! ?. R3 @* W        const char *pbegin;( g+ }, m( R( w& G  |$ Z, ]
        char *p,*pend;. c- s! Q0 k" P* N7 n8 ~0 [7 ^
        int i;
2 Q  Z! L0 I$ \. [* R7 f4 H5 H4 ^+ k
        pbegin=str;* W7 a' ^5 M5 V1 I8 X
        while (*pbegin==' ')1 b4 R; |; Z& Q1 C7 Q6 G+ W
                pbegin++;- \0 p9 I9 E0 [- K+ _7 p1 {$ Q

# g$ y: y+ L. g2 e' U  v        p=line;
: i* ?: v8 W6 u: E* ?8 T% Q        while (*p=*pbegin){* M/ C+ Z$ i% P9 j7 H5 }% J
                if ((*p==' ')&&(*(p-1)!=' '))
6 r2 t. D( S! I6 x. [: H                        pend=p;
! i4 Z$ f1 T; T1 p: g, I                p++;pbegin++;        
  |0 F5 ^2 e' z7 d% i        }  x: o; F+ d& g% ~) f( i- W
        if (*(p-1)!=' ') pend=p;
) P6 _; `# x& G        *pend=0;
( v$ Y  [" f2 N( _, H% L        return line;2 R, M; W. J' {# a/ n
} 7 L6 G, F- m! a
. Q: n! s( l4 [- W! {- h% ^
6 V1 T! Q+ c1 I. [
//获得网页信息 - 网页信息是中文会乱码 用英文信息
- T( B6 ?6 z6 R+ \& ~2 Nvoid 获得网页内容判断外挂更新(const char *Url,char *html);0 ?7 X( U7 `$ a8 O- C* u
void 获得网页内容判断外挂更新(const char *Url,char *html)
7 @9 s" g' {. O0 |{
9 n& V. m5 f, i! B) {        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);7 g+ e6 Q6 }( \% R3 x( q
        if (hSession != NULL)
- l- [. M. q" J: ~- r3 @- W        {
& [+ ^. w' ]+ v% f( F' i+ \                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
# o) |+ i% }7 b1 o; H* T; ]0 o9 r                if (hURL != NULL)
1 [, X1 i* C5 W7 _# B# e7 T; I8 V0 k                {1 l) @* x( c0 K  ]  A& e
1 B) K5 p; f: i  ?1 y" I6 v
                        char Temp[MAXBLOCKSIZE] = {0};
$ I/ z4 Z8 @& M7 @5 {                        ULONG Number = 1;+ w$ M$ f- q, W* g* @( a4 K) z' Q
                                while (Number > 0)0 I9 _! ~" Y0 ?
                                {
  Y. i/ ^+ @) g6 }" d. @; E                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);0 r2 ^7 H" K6 V
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
. J) N& H+ l* q: b( N" N) q2 B4 t/ u                                        int a=strlen(Temp);
  }8 x2 D4 W4 r. X/ R& i                                        int b=strlen(判断版本);   - r- s, C2 Z1 d4 F# E- K; v3 k
                                        if (a>b) 0 R; G* R0 a& k8 S
                                        {# w/ }. M% p" ^7 P" w
                                                char *p=strstr(Temp,判断版本);
& z0 E; P+ A0 o                                                if(NULL != p)
$ P3 X3 V8 E6 }6 N                                                {          ( ^6 L  N5 s. B- C% g+ m1 }% O
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置1 Y; F' r- J2 M1 ]2 m
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;2 J3 @# t; D4 ~* [7 N
                                          char s1[132]="";  q" U( I) n7 v* [: b" }
                                              strncpy(s1,Temp+wz,wz2);
& _! h; }2 x9 @$ d2 s) W                                                  char *p2=strstr(s1,"MEILEI");# E* N. Y7 T2 D
                                                  if(NULL != p2)
: `- X$ J/ y' l                                                  {  % z8 O% S4 |6 D! T/ e
                                                          wz2= strlen(s1)-strlen(p2);
& `9 |  {: x' i$ \3 U+ ^$ `                                              char 最新版本[132]="";% e+ n3 {* e+ x' ]4 w+ w* l. _. |" Y* [
                                                  strncpy(最新版本,Temp+wz,wz2);+ Z1 r. ~# }: x, C
                                                      if (strcmp( 外挂版本,最新版本)==0)
- Y. G% m  g8 |; L1 x5 r0 ]( T9 E+ b5 T                                                      {
8 I0 H# ^8 [; `                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
, I# }1 D8 q* X( _                                                      }
- C, u. X: R+ `: ^! ?/ o/ I9 F+ j( X" r                                                      else
2 y' e! ~. f" {+ @                                                      {
* f. G7 p- m$ r) H1 \$ w3 s( l                                                            char msg[256];
$ J1 B$ C" v1 ?5 ^  [8 G/ d7 w                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);$ m; ~& q! Z/ w7 M
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );# \+ b- R/ }) _- i" d& o
                                                      }- c& V# P* ~- @' k: W
                                                   }- `3 t  B- v& ?: O
                                                  goto LH;
1 u& u/ M) H/ O# i* l% b! N                                                }
  b0 q: `/ I/ P3 ]+ W                                        }
% P: ?0 V7 x. T6 \) D& \- {0 N6 g
                                }
, n- F+ ~6 |/ y5 ~3 [" P                                LH:;
1 G: J+ _, G- |. p( |# ^                        InternetCloseHandle(hURL);
. }; B, E; H( C                        hURL = NULL;: ^8 }! ^3 P/ \5 F" j& K  _5 v# M
                }2 A% @! k- c7 z- S0 g9 V5 @" W, E

# Z0 P9 r* a' q  G: I; g) {                InternetCloseHandle(hSession);
& x3 \% w7 @% G1 t' r" i; L                hSession = NULL;1 f% e# Q5 N2 ~; S
        }
0 k- C) @9 N' @5 M$ S}& g" U+ `; N" P! S9 F0 s

- k9 O( s: f. x+ j' M) P/ t' |1 `; O* E, u% ?& f
//----------------------------------------------------------------------------; N9 b( d2 {$ U3 m" C+ W
//  Activation Methods
. H% ]- [" p0 e//----------------------------------------------------------------------------# T% ]* H4 {5 m6 H& ~6 |' w
6 R- i- c9 g$ H
//  Unigraphics Startup! ~, u% |( I1 t
//      This entry point activates the application at Unigraphics startup
) c0 B9 N5 F. T0 F, aextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
) w+ [$ g! ~; q8 P/ k{
: l& z0 z4 Z2 [! h" D8 }+ T    /* Initialize the API environment */
; o" V& n! I% {' t) K    int errorCode = UF_initialize();
4 |  h0 y2 h$ G/ X9 J6 \$ n! x& u' |7 B1 T# B
    if ( 0 == errorCode )
, p* o5 h+ Q7 x4 s    {* N- Y+ o2 h4 M7 G- N
        /* TODO: Add your application code here */
4 f0 g* k$ |& Z; Z2 F- @5 R7 [6 m% \9 G9 C( d

" F3 X4 [2 ?# Q" z                //百度云公开链接 通过修改txt文件标题( o8 a6 I' h$ O
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
1 s9 h; ?% o8 Z6 I
/ Z$ }( V" K) T: s& z" z+ e7 Z3 L# J- ?* V8 l1 U8 X
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  ( Y4 W5 u( B! E# j5 t; q0 V) \
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); ) S7 n/ |, {% @; d
                ) F5 w2 [  @5 t2 M" C5 z; A
        
6 B' ?  O) g" E( B; C
( M6 N; B" P$ E7 Z1 S& i$ ?0 r2 d. `8 t: B. W
) y9 M0 B5 F! z' X& Y
        /* Terminate the API environment */
5 L4 @5 y$ l( `! Z1 f0 I: }) `        errorCode = UF_terminate();3 `* X. P: X+ D6 B7 f; B
    }
5 ~' Y* o& {1 j- _7 R9 `
3 L  }9 V" z; {% m, g# u( \    /* Print out any error messages */
2 Z6 Y2 @( J9 R2 v" ~return;0 r4 q/ m. Q+ N8 Z' E
}
: P3 p- {/ ]; h4 ]
& j9 m- n7 P/ f5 ~! e//----------------------------------------------------------------------------- Y  p. Z. f, K* ^$ G7 e
//  Utilities4 \0 _: u5 n" |
//----------------------------------------------------------------------------
' h" l0 S' u" V; x- L
  y6 [1 E5 C' x9 k% R// Unload Handler2 ]5 Q; W1 y$ N& J5 j0 C
//     This function specifies when to unload your application from Unigraphics.
2 y! i0 P' m/ R! T# @' L' j//     If your application registers a callback (from a MenuScript item or a
! T' v- q, e/ o- h//     User Defined Object for example), this function MUST return& E% G: L: I8 z. X
//     "UF_UNLOAD_UG_TERMINATE".
9 M& e! g1 p( Q5 \extern "C" int ufusr_ask_unload( void )
4 G4 l$ V* {5 Z& m: i, C, q{4 {  `+ q% y  z/ ?  M
    return( UF_UNLOAD_UG_TERMINATE );
& X8 x% F+ n* r* _}3 a) P; S8 d- b. A4 }! e: F

% ~8 z/ s8 i# s; u7 t1 j6 u2 L& E* y, c9 M- W+ q: z( f
启动UG就启动dll的方法9 Q7 ]: M  L% g
- E! E7 E8 @) @
方法1.添加环境变量
: V- P2 w5 y. TUSER_STARTUP=D:\MEILEI.DLL, F: O% `. ^' q$ G8 ~
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了/ K% p' Q$ H" C

! ^; x$ j! f  x& N8 p, M方法2.在代码里添加(可以执行n个dll)
5 t$ @1 P, v# n  FUG会自动加载 startup目录里入口点是ufsta的dll, L" y; J! H5 Q* k- C) D

: Y. `/ Z0 c( y( v( Y所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令5 v. s7 X1 U6 Z5 r, p6 r4 ?
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
) f9 @9 a$ ~" J$ Q2 F5 ?8 A! h) w2 S$ V: B# p
菜单参考  NXOpen_meilei.men.txt+ ]! z3 i  Y  R8 S$ j

2 f, e2 P" f3 oDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录0 g1 x3 a: n" i. _- N
启动UG就启动dll的方法源代码下载
- f1 h# R) o6 V! N& `' H 启动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二次开发专题模块培训报名开始啦

    我知道了