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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
& ?3 G% V+ D- [2 v9 \& T' u) \. g2 W
如果你想每次运行UG 判断 ug外挂是否更新
, M; K1 |0 V; G+ c
* Q0 V1 X: f" d3 `5 O
, Q: R, @4 Z- g5 V原理:! ^" y  @& J5 [0 Z) D
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了6 Z; p8 b- f) H# @" M/ k
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
8 Q8 Y" I1 m, B, J4 l& |8 g: u. y0 Y) |1 \. v: x
3 J) `8 i  C  ]$ W; h. s3 J
被启动的dll程序源代码,如下
, s* h7 d: K/ E1 a3 t: g* ?, |" V: f+ Z; g5 |) z! I8 z$ _% z% C
//  Include files$ y& o/ ~& E4 U6 {9 n
#include <uf.h>6 I- L' r! n3 P# D, W3 D4 a
#include <uf_exit.h>
. Q* N: W' L- P/ |' l# v) @% h/ W1 V, U#include <uf_ui.h>
( ^$ z' o2 j8 h' e" O#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )" N9 d. \. J- b
#        include <strstream>
: k* C: ]% ]$ b2 s9 z/ h. }# {#   include <iostream>$ z0 m6 U* [8 {, ^4 F# v1 T) e6 g
        using std:strstream;8 g; j/ Z' F0 Z+ \" [' s
        using std::endl;        3 B: l6 `8 c) `- b# X& P4 E) D
        using std::ends;
: ?. B: P$ c' g        using std::cerr;6 w' k* g. o' _# x0 U+ f+ b
#else. {! w% w- z+ m1 e
#        include <strstream.h>- t! h- Y" A3 x8 l
#   include <iostream.h>
3 ^" J& x5 J9 G: D0 j) S, V* Z#endif
& C8 K0 T: w/ M/ [#include <string.h>
/ H2 \2 _! C& Y, d! d#include <afx.h>
9 k6 C) T0 o& q" W#include <windows.h>
( g! _( \- z( H/ Y; P/ k! Q* g#define MAXBLOCKSIZE 1024$ X6 `1 T6 e0 @: }1 N  i
#include <wininet.h> //网络4 J; A7 f6 f! L  i6 S% M
#pragma comment(lib, "wininet.lib")//网络+ f3 @9 \4 c# ]% \; i; d; O+ h3 }  _
! b9 d: A) T; L6 S# k3 f
char 外挂版本[132]="V2.8F";$ c+ ]: I4 L4 R' D+ q6 S
  i! ?! r- F0 P# l9 T

- ?1 H  L# I% Rwchar_t* CharToWchar(const char* c)   //char*转wchar_t' b) _$ L2 t2 P6 `) ]
{  
/ I8 I- H8 D( P, R2 s( K+ S   wchar_t *m_wchar;
% k) j2 [8 d0 D8 t: L" q- I    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
+ p! C& C5 d+ b+ I6 ~( P4 e3 y7 X    m_wchar=new wchar_t[len+1];  ( {# r# _7 Q  u6 B  d
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  % H  I5 T' Q2 E
    m_wchar[len]='\0';  
% Q/ j* s0 p* @. w( e* i    return m_wchar;  ' a3 t/ g. H  B8 e
}  
3 h, T- [6 ?) g- W: ]3 h8 [1 b1 r: S0 G5 }. T
//TCHAR 转 char
0 O0 _& Z9 o1 C9 Z- [char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
) I5 ?7 q- w% P9 ]3 u{  
- l: m, ?# v& j9 j6 Q    LPSTR pszOut = NULL;  
6 n1 s  G+ A+ q0 Z    if (lpwszStrIn != NULL)  
( o. _8 e. t6 E+ _  R  D* R    {  
; I9 b- l1 v5 o. k) R' m1 t        int nInputStrLen = wcslen (lpwszStrIn);  - v% e, Z9 C: c# n: K; b+ J

9 e) l' j4 u  |4 `3 b# U        // Double NULL Termination  
, d- u% J( e$ L  p/ i2 e1 B9 @9 U        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  4 q, B* i) J/ M7 u3 Q* ?
        pszOut = new char [nOutputStrLen];  ; D) t# t/ Y: `/ X- j; Q
/ y. C/ d( W. N/ b! t! f7 B3 B, R
        if (pszOut)  
* _& Z! k! s9 j) l4 ^        {  " n2 ]( }: E- t0 Z( ?/ J- P
            memset (pszOut, 0x00, nOutputStrLen);  4 o' X9 E0 ~: J' B
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
+ H1 E- B' m# ~) j8 ~9 A, w        }  - L8 b9 M+ R/ b# d& Z
    }  
1 H, C9 U3 [8 s/ h" {; h2 u    return pszOut;  
! P3 R3 n; H/ |/ G5 d2 p2 b6 o}  ! [6 m5 ~0 x$ F. G) g  h

1 h& F4 E7 ]3 o" @' U% K+ Q' p/ I
//CString转char% A) Q8 T3 b0 m3 ~- g) V8 J
void CString2Char(CString str, char ch[])3 B1 S& D( c% m( z
{
4 ~) ~, e  T' V: o' v        int i;* ?* Q, G2 A! p+ \
        char *tmpch;
9 p$ B; z+ @: h        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
* l- N. `/ x! A) q2 `        tmpch = new char[wLen + 1];                                             //分配变量的地址大小4 J4 J! V3 m# @) t4 f' \( E, \. s$ K
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
" h& C. O" R: F3 l
+ m' {- I4 n2 {, Y; o5 d        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
' [' |9 s2 Y  `! O0 R        ch = '\0';
! ]. F6 r+ S# E9 F3 j* `}5 m! y4 J) N- e; j( x+ K
( e) C% j2 e3 G
2 W( m2 m2 h- i
char *去掉char首尾空格(const char *str)
! ]7 q  Y$ X6 Q8 |6 p5 O# |{
$ k! a$ P% D2 y% |. ^9 j* W        static char line[133];
. X0 {7 ]. }: K        const char *pbegin;2 H) {3 p+ l" k' V7 o. {5 b9 J
        char *p,*pend;; [/ I; D, V6 u1 k/ L! y. k
        int i;# @7 C, p2 F8 e. {( p5 H  D) d

" `  T  |6 H% x6 m/ E- v        pbegin=str;/ A$ J% r0 o# m, `$ Y/ B
        while (*pbegin==' ')3 c+ ]) f/ g3 c: |- R* L& ?
                pbegin++;4 o- J8 n1 s' `9 k; [% s
; k1 i8 o' y. Y
        p=line;' ~4 y  v/ d& \' s5 h' E; X
        while (*p=*pbegin){% h+ D& S/ s& _$ n7 x
                if ((*p==' ')&&(*(p-1)!=' '))2 h6 w" G* n1 v- U  Z" g, y
                        pend=p;  p& q1 i/ C, R5 `) T* E- v5 @5 p
                p++;pbegin++;        
! P! W: j5 S# T: v        }
1 h- f$ z- }+ s& o        if (*(p-1)!=' ') pend=p;
/ |0 [) v! u! f+ N. Q0 z3 r        *pend=0;6 p+ f& p; ?( b" W9 G
        return line;
) ^: I; z; {' @8 }1 Z4 b+ _$ t}
' I+ W/ Q0 G  c% s, o0 z" j% i( r4 `- n$ ]

% ^$ r9 i- D/ x; u' l4 A; \//获得网页信息 - 网页信息是中文会乱码 用英文信息" b2 ]* I( d- s+ b8 N* K5 f; Z
void 获得网页内容判断外挂更新(const char *Url,char *html);
8 b" P  V6 U7 R/ q- e9 p. g; L% G9 wvoid 获得网页内容判断外挂更新(const char *Url,char *html)
$ G# U  O9 y$ [# w& q* f{  [/ h* B# [/ k4 c1 E3 Z
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);( P. m% D2 c4 @  K: R' z* K
        if (hSession != NULL)
5 F/ d; s' p4 |  ^  c2 u' a8 i0 s        {) ]1 o" q; X, {, t
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
8 H; N( Y5 U* ~% I  |5 J$ f; U/ J                if (hURL != NULL)
: d( Q8 @4 I% V; E9 O                {
7 l+ Z7 k; i; {$ S8 F7 u0 z& N) [5 f; s, N! w/ ]2 q
                        char Temp[MAXBLOCKSIZE] = {0};$ t, W; B# u& r8 g( m  D
                        ULONG Number = 1;
$ e* N7 n+ L4 v3 W0 z                                while (Number > 0)  X( U% J/ q8 P1 i( x
                                {
, L9 M/ j; p2 O/ S* C6 ?' \6 p) [                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
- `2 |  j1 T) Q$ L( |$ {" q" F( r                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
7 W9 ]( ?9 b  `9 }' _                                        int a=strlen(Temp);
9 s' Q3 _& m" _+ `+ L# q6 b                                        int b=strlen(判断版本);   ( ^/ v3 O7 W# t: _6 U0 C- W
                                        if (a>b) ) h" M! `7 i: n; y2 O; X
                                        {
  W$ j6 o( ~6 y, D2 F                                                char *p=strstr(Temp,判断版本);
$ _  _; {4 y- v" l  j! h: H                                                if(NULL != p)
8 L  P- ~) f" E% D4 E8 w( w  j                                                {         
5 R0 D9 w) E$ w9 ^4 W                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
) u3 J2 q9 n+ x  N- J, j# `! o                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
" k/ I/ Z4 I/ ^, A* |0 N% `                                          char s1[132]="";# e" u0 f% b6 r- V- g
                                              strncpy(s1,Temp+wz,wz2);5 U; s4 k& E! _: }. o' k
                                                  char *p2=strstr(s1,"MEILEI");. w2 k7 j$ x/ n( a( C7 B4 G4 t# M
                                                  if(NULL != p2)7 a* ~- T; f8 E0 y! V1 l3 c
                                                  {  " I3 f( M5 h& }) L" t7 p1 N
                                                          wz2= strlen(s1)-strlen(p2);, L& }0 C9 [5 w5 ^6 ~" w
                                              char 最新版本[132]="";4 L$ Y4 K+ j" R, Z) z/ f. i7 ~# y* z/ n
                                                  strncpy(最新版本,Temp+wz,wz2);
4 |0 w: Q* ?( z                                                      if (strcmp( 外挂版本,最新版本)==0)! E4 u$ p& v, M, M
                                                      {
& D+ ~3 w- _+ w; e0 K                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );3 N; G( A* f9 M8 h( O* v# H# H* s
                                                      }
7 e% O9 `4 w+ ~8 ^7 f/ O+ j+ ?                                                      else
! Z# Z4 `. {3 D8 m  {                                                      {5 `9 a* ^5 A9 Z" f; J( p8 j
                                                            char msg[256];
, N- D/ q* l7 J6 H& K( f7 U                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);0 [+ C& V: e  |8 H; ^6 @, s: k
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
3 a# D# [& m3 t, P                                                      }+ t( ~- N+ u0 c! Y
                                                   }
  ], [+ \# i7 }2 q, G& x                                                  goto LH;6 Q1 L. o9 B7 N/ I' A0 w7 \
                                                }% V! [( L3 x5 {# \. g$ C/ j
                                        }
( [& ]$ O: g9 B5 P" Z1 [
# \. K8 V4 o( m; }0 o9 V                                }& v( F$ L4 {1 f( k& ~. r
                                LH:;1 u0 B+ H& J1 y7 F2 @  g8 i& i  j
                        InternetCloseHandle(hURL);& }* i- f- G$ w) y1 V1 _  L4 L; w
                        hURL = NULL;9 G3 J) i) F9 ?8 P
                }
3 e' c- t  [% {6 c. N- `% m
# u2 K5 p0 S! ?  ?6 q8 @                InternetCloseHandle(hSession);
! n/ ^4 K  t7 j+ D- L. F8 P                hSession = NULL;% f& @- `+ ]+ s9 }
        }
! M  G0 {9 d' r6 Q2 n}9 x7 _- ]) d: I

# o% n( ^0 x: a. [4 c
# ^( f- E5 _& Z' ], }" p//----------------------------------------------------------------------------
7 B% K) Q0 G$ S2 Y7 r//  Activation Methods; _3 ]" l+ y9 ]  v9 Q
//----------------------------------------------------------------------------1 ^$ X! e& [  s
7 U% _3 z2 |1 s# A4 d2 T( K
//  Unigraphics Startup
! J! Y- |/ u  o0 ]2 F//      This entry point activates the application at Unigraphics startup
# t9 O3 p0 Z6 Kextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )# i+ P* X! q& Y8 B- K* M7 h
{$ `! n2 x- r" C$ V1 y: h
    /* Initialize the API environment */
6 G# I; j2 T- y* j# Q5 t    int errorCode = UF_initialize();3 D9 N) T# R( K8 M
: a! r6 c: @& m; n: h( W9 W, h
    if ( 0 == errorCode )
+ J+ v1 v2 `- O0 W9 H/ y- I. e0 j    {1 Y& I  V& J) d5 i2 I* g
        /* TODO: Add your application code here */
3 p, S$ m% n/ {  L5 S7 K1 Q4 y! a( p
0 C: u7 x% b/ r8 S9 {; P# v$ s  B
$ F+ u* G( W5 Q% N                //百度云公开链接 通过修改txt文件标题+ G! Y$ D( g1 i5 I( L
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
4 l) v& s  g# x% J+ N
$ ^' b/ P" [6 v3 r$ s% B, _* y/ ~8 u2 _- k0 d4 k: E: }3 L& e
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  ! t" P& K& z# _! b# u, B
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); : s2 h; s! T( M$ b' O" F+ q. M1 l
                9 G0 [) _4 s+ Y# ~  ^
        9 U4 S. X$ M! q, L, z

5 c7 ~3 o* p. Z. [4 x
; z' u' G7 \9 T. f" h0 U
6 O& @; e1 z3 h        /* Terminate the API environment */
- e: D) B: `4 u6 i        errorCode = UF_terminate();! {/ k/ G# P$ ~# z/ E7 K( j! ]! o& @
    }4 @, }: k5 o- Q+ ]
' {4 C+ K9 \/ _( I
    /* Print out any error messages */
  A/ Q  u! \1 n! z  [return;6 W4 G. W$ r+ n3 g0 ^0 W
}: T2 p5 _+ G4 G" H6 p; E, S
1 {4 y  w1 y7 B) A3 h5 i# e
//----------------------------------------------------------------------------
- D+ L$ E, ~+ [& Y$ r* T//  Utilities% a; d& D1 b# {! j
//----------------------------------------------------------------------------. d' p+ I/ p) T6 T$ X

2 U: C, D8 r! c6 T/ U& L// Unload Handler
! ~+ [* y, Y9 w' ^) q! Y//     This function specifies when to unload your application from Unigraphics.
$ p1 B' ^- A) a2 R//     If your application registers a callback (from a MenuScript item or a
( ^7 z( \6 j. g//     User Defined Object for example), this function MUST return
9 u8 N% A! @- u1 Y  C//     "UF_UNLOAD_UG_TERMINATE".% V6 P4 W- m' d9 o7 L0 t
extern "C" int ufusr_ask_unload( void )
4 N$ ]7 N% {" q( Y8 Z& S$ s% E/ K{
, p% ^5 u8 H* M2 m3 W" C    return( UF_UNLOAD_UG_TERMINATE );
; h0 b0 N3 a9 r+ G# z}
# j' s* i3 V/ @: N! Z+ ~. T" r3 \$ M/ k

) H: ?' a8 j# h0 W6 h6 _- g" E9 U6 d启动UG就启动dll的方法9 [: x7 b  J; ?( ~, F/ M7 `2 ~

# I" n( }. z9 C' B) T( w; ?方法1.添加环境变量
+ e: h) d% g6 h: h" i3 UUSER_STARTUP=D:\MEILEI.DLL
$ {/ x6 T" w+ w" i: h  B但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了9 _& r7 b6 {/ r& p
( g$ Z: u- R, I, }9 e/ b
方法2.在代码里添加(可以执行n个dll)# p8 J  @2 r9 x* `& z( ]
UG会自动加载 startup目录里入口点是ufsta的dll
$ x. j+ S" b4 X4 K
8 A& W/ u6 o; E# t9 {7 e) A6 F所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令. `* V7 h+ `4 K, V+ ~+ e. U& D% {
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了/ X* x  G. r# S) A* a
( S+ I; a# f2 D* t( M
菜单参考  NXOpen_meilei.men.txt
: o$ t4 {7 M  k8 K! Z* }7 v! U8 q+ P# H$ g: H  G
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录/ S6 w3 B. w$ B0 v& d1 w% K
启动UG就启动dll的方法源代码下载$ V, c" a  U' f. Q. ?- 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二次开发专题模块培训报名开始啦

    我知道了