PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
$ A. t* ?4 m# B: C% W8 b! T" V
. k5 ^9 g: A6 O% g! I/ V/ `( I如果你想每次运行UG 判断 ug外挂是否更新  D  i- J0 I! [: Q2 i, {
" f$ h5 b' K- m% T3 M
) z( e8 T7 N- w
原理:
- w( O* k6 t' H自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了5 j$ J+ m" w3 o) X' N% R* w
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
8 m9 s, b2 _7 V2 U! Q5 D+ s8 b" ~  Q; p5 V( R- e* M' g- ]) J
: N/ W( Q7 Y8 C! x1 U# C0 u9 y+ [
被启动的dll程序源代码,如下( `) n& w  u; t2 ~
. [* A) h% D7 ~7 V3 i$ {6 ?
//  Include files
, J; |* d% o8 S3 \#include <uf.h>
: @& g: ~9 v" B9 G' k+ [3 e#include <uf_exit.h>- o6 e7 _! L  ^
#include <uf_ui.h>
' c/ i( G! c; a9 p8 B# k#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )2 ~4 l3 D9 Y, H/ N4 H6 d
#        include <strstream>
; G0 I6 R, m( z7 G#   include <iostream>+ y) b5 e3 n8 J
        using std:strstream;
8 e8 ~" u3 U1 L# x+ ]( p* g& n$ P        using std::endl;        
9 V# e) l, v2 |/ E! g. P; z+ U        using std::ends;" p3 t" ]: |/ C6 j
        using std::cerr;$ ~* S" O' ], v# f% p8 I( @* k
#else
: w9 X# a% Y/ f3 v. g#        include <strstream.h>5 c0 c! r' o* \
#   include <iostream.h>
) B, i" f' l3 c6 W0 n' O' ~3 o#endif7 g0 g+ |7 b8 |1 o- x
#include <string.h>+ I/ W; K6 W5 ^2 y7 c% ?$ w2 S
#include <afx.h>
9 e6 L! @6 A8 f0 L#include <windows.h>
( F2 R6 p4 K4 }) {#define MAXBLOCKSIZE 1024
4 O+ s5 t" M5 x2 J#include <wininet.h> //网络
* [1 C1 C* q2 I( i#pragma comment(lib, "wininet.lib")//网络8 v6 b( M, ?* Y  a4 U3 s# _5 J

) K8 M# D0 p& x$ T: dchar 外挂版本[132]="V2.8F";2 M4 D8 P- J+ c* Z2 b
) Z, Z0 {7 v+ W8 O) e$ _
3 y$ Y) f+ ~3 k
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
6 A( ~+ n1 n' i6 v4 X8 k0 }5 I0 K8 E. {{  , y  Q! {8 n. X6 M3 L2 R6 i; [
   wchar_t *m_wchar;# L( I8 `; l$ `
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
; h1 Z% ?! F, S! q/ s1 U) p    m_wchar=new wchar_t[len+1];  1 L4 X' S6 n- Y# F! ?- F  y0 ^
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  3 x3 M2 D4 @, \4 F
    m_wchar[len]='\0';  
! b- f: U8 C6 z, {! U- v9 R9 k    return m_wchar;  + u; b0 l. X9 F) S% E: |
}  ; n. N2 `0 {2 F2 w

4 {" P, e3 r1 r4 T; n//TCHAR 转 char
8 S5 c8 D; N, ychar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  4 v$ a& Q% e# u# G* F
{  
5 ]1 P3 J8 h, ~0 r    LPSTR pszOut = NULL;  
$ I  [- V/ @( J# ]1 M/ x) f, D5 h    if (lpwszStrIn != NULL)  
! f/ }* I, ?3 P, ~; E    {  ( B: ^" t+ T" Y
        int nInputStrLen = wcslen (lpwszStrIn);  
" C& i* v: q/ e/ P( V2 M" A0 s& H' {& p- ]1 [8 `
        // Double NULL Termination  
  X' y3 i. s6 e" _        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  " \. ?5 i0 e8 P4 A; e2 T  K/ O
        pszOut = new char [nOutputStrLen];  3 X, s# R5 l& B: ~; v/ Z

& r' \( ^) T6 R" C. J7 h        if (pszOut)  
  v/ T, t$ @% \- |1 W        {  # c2 i& ^7 Y) C" J3 h
            memset (pszOut, 0x00, nOutputStrLen);  
4 K) w+ T3 R! B            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  $ Q* [4 e- j  ?! j& t* k
        }  1 V- q: e3 m9 C3 L8 ]8 A
    }  0 z( h$ [0 C1 ?
    return pszOut;  
! g% i* i2 B+ B3 l. S4 l6 h) h- l}  % r4 Y9 |- E5 a% U+ o7 y0 ]( K- L

' M* Q! h, X* Y2 m- _  V5 j& n
  l8 t& s8 z! y, S, r+ i) l//CString转char% G1 K* ?" a1 |0 q3 H8 @
void CString2Char(CString str, char ch[])
& c) ^* o3 ^0 O* ^6 {{7 O4 H- G0 V& n7 A4 U% p- a7 {
        int i;3 I2 ]! k- E/ u5 }' M! _" j3 u
        char *tmpch;- x$ W/ j% r  f: Y" z1 @" y
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度% @; `6 b3 D5 y1 s9 w
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
  H0 ?  A9 N/ Y3 h        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
3 G0 L$ v" r# W5 b8 B) H! G
/ `# b# }' p: m, _+ w' u5 ^        for(i = 0; tmpch != '\0'; i++) ch = tmpch;! p8 m3 s$ B. w: J2 u9 i
        ch = '\0';: X$ M* P% o* F! M
}
* m- J5 ]" z, M$ y; G' I
# u0 l# f  ^8 v8 h/ t% M& X) x
3 @2 w0 i4 T( G6 ?, d2 z: Tchar *去掉char首尾空格(const char *str)4 K+ F$ H6 E3 ?7 |- @: p
{
) l0 x, I6 j( p6 ~        static char line[133];
1 k6 ]" S3 c5 P. N# H3 q" z/ `% g        const char *pbegin;* J, H" g: S. g3 i3 Q. p: @$ K
        char *p,*pend;, I& c: o- U3 ~# X1 K
        int i;4 [$ y+ L6 q5 ?7 _! R* i1 q
8 H& e9 u! K2 E7 n
        pbegin=str;
% v6 ?  h% }! T  [$ z# y( k6 M& h/ R        while (*pbegin==' ')
5 s3 L( N% `8 u7 [4 [3 @4 k8 z# \                pbegin++;, @9 I5 N/ d' r

2 b# I" A! f1 |        p=line;
% w1 r/ d% |: f* u6 A        while (*p=*pbegin){5 N) ?6 ^" [' ?* q$ ?) N
                if ((*p==' ')&&(*(p-1)!=' '))
1 S7 i) ?9 X$ J3 |/ ?                        pend=p;- Z  Y  J( ]1 e0 t
                p++;pbegin++;        
% H: q& K( R: P8 A        }
5 L; r5 x; }$ y! H3 D2 S" h        if (*(p-1)!=' ') pend=p;
0 p5 h6 t# |6 n- _" d4 ]2 h        *pend=0;
. ?  x* D' Q. f6 s, R5 K0 ?        return line;; {, u* W3 N9 m4 B; o
} ' g! \% b  a" `7 V" Q* s0 t( l" _) x

. D0 s' d5 I8 j- Y+ V3 f& U( o; D( o* x0 a! [; d( \+ x1 f
//获得网页信息 - 网页信息是中文会乱码 用英文信息( L5 ~" z% Q4 A! \; a) S  t
void 获得网页内容判断外挂更新(const char *Url,char *html);
! E, l# f' i  E. d9 ?; rvoid 获得网页内容判断外挂更新(const char *Url,char *html)
6 w- Z" C, Z0 h{
8 |" w! W  X+ i- h        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
& [- x+ ]$ U' d: M1 t1 N6 o6 M        if (hSession != NULL)
1 {. C/ ]/ t  \  m9 L* |        {+ p1 L4 Q0 s1 f
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
1 C5 h! Q4 f; R* u3 `                if (hURL != NULL)
/ x! k: D" h; M  Z  M; h                {7 _1 M6 W0 L  J; h
9 e, ]% n4 s+ H3 U' m- n) Z
                        char Temp[MAXBLOCKSIZE] = {0};; o4 L  C# u6 e: T  i
                        ULONG Number = 1;
1 x! f- p2 y) }: s  ~                                while (Number > 0)- e! ^& ]/ ^$ {9 J( j' v* N! F
                                {7 W. R! d9 p0 c% ]$ _) p- ^
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);2 U  Z0 q. b5 ~' t: G1 M5 h. |) G
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
5 ?! p" `; |% y, W$ e) I  E                                        int a=strlen(Temp);
' x  M+ A. g1 N8 @% m* N                                        int b=strlen(判断版本);   
! g6 p1 B& a: z! f; Y                                        if (a>b)
, ^, Z; G6 V% g% c                                        {
7 \. F* d) z  E4 K' m                                                char *p=strstr(Temp,判断版本);
7 _. u5 p" K( q8 @" J, P                                                if(NULL != p)' W2 D5 @" V7 H% ?) R. \( \
                                                {         
! o) {4 u5 c& H. a1 }                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
; T( L# y4 P# m" z4 Q- \                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;1 C2 L0 }" q& P/ g
                                          char s1[132]="";) [( c2 d* @7 x0 _2 y  Q
                                              strncpy(s1,Temp+wz,wz2);2 o5 Z# a2 n( [2 T0 [' O
                                                  char *p2=strstr(s1,"MEILEI");
) e! b7 P& |( l) {                                                  if(NULL != p2). G- [6 C+ y! K) P( P. H
                                                  {  ; \9 R, `- q# k  ]* {
                                                          wz2= strlen(s1)-strlen(p2);0 g( J8 |7 k3 J
                                              char 最新版本[132]="";
  }4 X0 m, x* A4 Y* J( Y# S1 }                                                  strncpy(最新版本,Temp+wz,wz2);/ M3 M7 B# K7 m
                                                      if (strcmp( 外挂版本,最新版本)==0)
2 J# K( c5 {" P3 H9 m7 W                                                      {
" k- E9 I7 ~: B) C( S0 Z; D/ ?                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
3 R7 Q  E3 `1 Y4 ]% F+ S5 p/ A% A                                                      }: B. C/ B% Q0 Y
                                                      else/ F" h  H1 Z, I; c
                                                      {
' n# [8 o  D7 [( t0 V                                                            char msg[256];- R& p5 v; g3 g1 Y& |/ i# R
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
8 V" b0 G$ V% a                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
0 V; m2 q' F. E" q$ |1 M( S" s                                                      }" A/ o, }6 f3 P3 Z- V) z5 b3 U
                                                   }3 P9 X. M; f" `; u) D
                                                  goto LH;) T, p7 @) c/ c
                                                }4 I$ o1 u8 r7 N' u- S
                                        }
1 O* E' a* G$ a' C; D7 n& V7 p& t1 {& p5 x, ]% G
                                }
; G/ D  {7 _  S8 W* T/ u                                LH:;
! `5 K. s3 d1 X* h7 @* ~# i' @                        InternetCloseHandle(hURL);
* D, ~+ e* q+ T7 P7 m, J5 [' G0 P                        hURL = NULL;
5 E& b% S! i( ~2 ]2 a2 M                }: N! ?  S  d) l& H4 ^, P5 K

5 i$ h8 d7 O0 r2 A  j+ X. _                InternetCloseHandle(hSession);: H9 o; B9 |: E5 K8 Z! {7 ]
                hSession = NULL;
" ]4 }, B0 r: I; R6 B, I- b        }3 R6 L( J& N2 }/ p$ U' ?; _6 x
}, K0 b3 c: F. W  |, g! v& ^# {* V
) Z* k! v) }- u' k! H/ o2 d! K% _
& E" k! f, m# t+ p! i- P2 ^  |3 l
//----------------------------------------------------------------------------
$ K: Q3 C: U0 F6 r6 w0 A//  Activation Methods
6 t8 K1 c  Z) ^6 q1 \1 s6 X" _//----------------------------------------------------------------------------
. V# w! p4 a4 ^9 _$ c0 n1 V' C7 j1 ?. V* P4 a  q
//  Unigraphics Startup2 e. g8 H* c5 W, Y# A, e
//      This entry point activates the application at Unigraphics startup" \; U: w) o2 \5 c1 J9 y
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
' K3 C, N) a! F{8 T$ C4 z' k$ P& G
    /* Initialize the API environment */
* X& v; s9 \6 u    int errorCode = UF_initialize();) g! e9 v1 V& h2 R- f: q

4 g! z! {% e) b6 d    if ( 0 == errorCode ). v8 f1 `) |% Z! f3 C5 `
    {
; y2 f; ~( n0 |4 @4 b  K& n! y        /* TODO: Add your application code here */
7 l  R* o9 O4 Z- x) _- M- Q* s9 P  }* z& W* z6 k

% ~5 S$ s) H. ?8 d. e/ C                //百度云公开链接 通过修改txt文件标题! k# L, t3 ^& g6 E1 \) _; N* B
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
! K" V' l& Y% v3 s2 O" S2 w# m' U6 d! R" K( j0 }: O
7 X" P* P1 u$ C9 m1 ?
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
) \$ f" z9 Q* x) t- i                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); & k7 N" Q) Q3 e: e" S  o4 _
                1 ?+ ?+ B& U. }8 X, X4 a5 @
        
" A; Y- l- J4 h7 o. v5 [, u8 {  C2 i( N! A- D
/ i/ A/ |( `9 i* z# B. {
4 y7 h7 t! M. p* ^# H$ @0 C5 A
        /* Terminate the API environment */7 _% G* \% U# g. V) L
        errorCode = UF_terminate();) W6 @* P& l6 H% Q* f+ p0 F
    }
. _. b% ~$ x, ^& I
3 O5 t$ r9 I& h6 U/ k  f! x# \; E    /* Print out any error messages */
  h- ?  \0 U. G- a9 T' F4 c) ^: Treturn;/ |: I; o, D4 X$ B
}2 ~* q& w; \& d5 c
$ f* w$ V$ V7 V6 W; r
//----------------------------------------------------------------------------( @6 K: A3 D: q
//  Utilities4 n7 _7 o; K2 N5 c6 K; a8 F
//----------------------------------------------------------------------------: K" @8 I  P. D# ?; B+ M
* u3 n  I  N* z- |. u+ l
// Unload Handler
6 G# L' h- V( c+ \& ^1 R//     This function specifies when to unload your application from Unigraphics.
- G& ^( z4 H. W' l) `$ `//     If your application registers a callback (from a MenuScript item or a
# }( |5 N  @* ?6 ^! k//     User Defined Object for example), this function MUST return
" `/ j) ~7 F4 W  O- X. }//     "UF_UNLOAD_UG_TERMINATE".# j: b0 E6 G2 `0 m
extern "C" int ufusr_ask_unload( void )
. M( q' k2 q7 a. r8 C6 F: U+ M{
) C' `% X' F/ b$ J; n. X    return( UF_UNLOAD_UG_TERMINATE );3 ^. i/ ?; Z# i) ]4 x  ~7 x1 N
}  n. x3 y9 U2 T* D9 X8 x, t; ?+ Y
, f6 B0 Z# ]' |, n# g& ^  n$ T
9 I5 Z1 X3 O/ F2 |. |7 _/ ?" ]
启动UG就启动dll的方法
) F" t3 A1 c% a. Z, Q, D' i4 a8 R9 Q% {/ U. S7 q0 I9 y) v
方法1.添加环境变量' R1 E; g+ U9 |7 a( F% m+ w/ v2 A: k
USER_STARTUP=D:\MEILEI.DLL
: O, m( s( v- H7 ?2 A1 R但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
% r: S/ K/ i  \  u" T, |; Z- U2 U  W( B1 T- F) j2 E
方法2.在代码里添加(可以执行n个dll)+ u  o% B2 [+ |  @
UG会自动加载 startup目录里入口点是ufsta的dll$ @. d. i% D% @
( U: }: h6 ]7 [9 [  }
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令$ Q( o- s& C6 O1 Y* e
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
0 y" G+ \( E( q4 _0 q) a1 {9 w" X# y+ T1 d/ s+ P" ^' G
菜单参考  NXOpen_meilei.men.txt
. J& J0 d- T7 d7 t6 s" G% @
  g' ~3 H) T5 r' F+ gDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录$ F. C! C+ \6 m
启动UG就启动dll的方法源代码下载: D4 c/ v) O3 F' @. T7 [- F; k
启动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二次开发专题模块培训报名开始啦

    我知道了