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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
7 C. c; J6 z2 A3 Z( m" P1 a- f' x9 I. c! y5 Z
如果你想每次运行UG 判断 ug外挂是否更新
; [. R4 G  x" I. a5 b7 l; i) ^7 N
8 f) W: E4 B- [+ O1 \+ j# f0 n& D3 ~7 [+ C1 e+ Q3 T: t0 J
原理:
/ |% R' w6 O& S8 N自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
6 t. S, Q0 s/ Q6 o5 r! [' m+ Z然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断+ N/ w1 E' e- I3 D, C, X) H3 K5 D

2 E9 j1 `& r& r$ O
" r2 R$ J1 K6 _! M& B被启动的dll程序源代码,如下
- P- S0 H/ _7 U) z3 W" @
1 Q( v% Q# T: F//  Include files3 c& D* z  t( z0 `- s4 A# u; X) v
#include <uf.h>9 ~" l, o. U( B) G
#include <uf_exit.h>
8 m8 I" ?5 }  [* a  h; P#include <uf_ui.h>
# H1 T: z/ `0 @: d" i  S" X/ _, Q#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
. x3 B0 t6 p  N/ S% A#        include <strstream>0 ~0 d" s8 j$ Z+ G9 y* ~8 o" d) ~6 A9 r
#   include <iostream>
9 H* d+ F; @9 ^- {        using std:strstream;
' v# Z* d* @9 G& c        using std::endl;        
0 p$ C1 O: ]9 g+ J9 a2 g- b        using std::ends;
7 S( _, a0 H3 `        using std::cerr;2 D0 e" i8 \3 {4 I4 Y& }' @3 ?# b; K5 d! s
#else# C. Z$ ~" f( ]( H+ h7 {8 ^, Y
#        include <strstream.h>
3 R2 n0 }( [$ Q$ a' ?#   include <iostream.h>% n% Q0 m9 w4 Y; ^2 D% D
#endif, u- m) Y; ?' t+ V& Y
#include <string.h>/ F+ X+ t* C! Y1 D
#include <afx.h>
( U& }  r4 u' H5 J/ O$ S3 S  P#include <windows.h>
  t# R! D  s9 w#define MAXBLOCKSIZE 1024
( W) Y/ [* b! L  i#include <wininet.h> //网络
6 C5 W+ i$ t3 w; p2 s#pragma comment(lib, "wininet.lib")//网络# _- _, N) S$ @- y, D( ?, u. o
0 c, v+ J/ _9 s  H
char 外挂版本[132]="V2.8F";
: N; y0 n) B5 I$ r- z( W8 w
& k! [" F2 _5 g' w1 i
8 y. V+ F, d* O' h) X3 Xwchar_t* CharToWchar(const char* c)   //char*转wchar_t
% T9 q% F! \. w& @, f1 L) v{  7 p; U0 ~  o1 r# S( d
   wchar_t *m_wchar;" Z8 Q: i* o* ~, T! \' B( c7 Z
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  / F1 U# y) x7 `2 A) M% b/ I
    m_wchar=new wchar_t[len+1];  " |/ d4 @7 H9 v$ `
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
  z# A5 O8 p- X    m_wchar[len]='\0';  ) Z8 L. m+ @- q; M+ D
    return m_wchar;  
" U" H6 \- U& y}  
; [7 T* g9 }8 t: B6 M
. e) _( B5 z( }/ e8 z//TCHAR 转 char
0 c6 t$ S7 Q; }2 Mchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
, z9 H9 S) ~7 e; o& N{  
$ c" c# g4 z1 Y0 D1 K    LPSTR pszOut = NULL;  ) i- R+ ~7 m5 c' U$ K( M( B
    if (lpwszStrIn != NULL)  + P( ?: S5 L$ D
    {  
: M! y# |) ^; E) }* E9 U        int nInputStrLen = wcslen (lpwszStrIn);  6 F4 N: f' `5 ^
3 Z; I9 Q# x" H' i
        // Double NULL Termination  5 ?7 R5 a+ G# D) d) Z/ [! y
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  3 s9 G' _* K) b! p
        pszOut = new char [nOutputStrLen];  
! n* X- L+ ]4 Q  B* I" ~2 W; d5 l- T! j$ n5 _8 \
        if (pszOut)  
( t( s; u# r. w+ V, P# e        {  - v! a! Q  M" E+ _( `2 l
            memset (pszOut, 0x00, nOutputStrLen);  , f; S% O  E( S9 m/ @
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  ! g' A% N+ M6 A, V
        }  % V/ e  G7 O* Y5 b
    }  
2 M1 [$ N3 g1 M1 |: R    return pszOut;  ) s8 o* x+ K: z* k0 \+ ?1 s9 @# t  ^
}  6 d* S# x1 ~0 A4 ^& n1 Z
* c& i) F- N6 R
! ^# }, h( F; V+ w
//CString转char
. R/ F/ n8 r" ]$ z9 C) qvoid CString2Char(CString str, char ch[])
) h3 w& J9 e% e  g8 q" z( G{
, i9 X7 W1 u9 ?: O( E) a' u        int i;/ H8 n$ }: p1 A( q3 |2 i
        char *tmpch;
' R7 X9 \* e: K6 f) l) C& U0 e        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度3 L/ |& z4 J$ N9 m3 l+ m# M# E
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小) [& t: W9 Z. A) k9 R4 @
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
* V7 c% K- ~1 A7 @+ b+ ]  R  d& ?: b" t" T
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
3 t4 T& H, l3 V9 y5 o        ch = '\0';/ q$ B; i- E' N! D# y" K; n- k
}% M! r3 Z# y+ L) H% z1 _

3 Q6 W) S0 {0 H" n5 K! l& ~; v7 V, B5 C3 ^1 o! _
char *去掉char首尾空格(const char *str)
& G0 l6 t. S# R{/ m: w* G# J: h
        static char line[133];
. z% C# ~: u; y$ `5 m# F        const char *pbegin;( j" q( h  k% F' d; e% d1 E
        char *p,*pend;& i* u- z4 B4 ^. A2 _
        int i;+ R- `- ^7 ]8 N9 V) G

- |" T5 ]* {1 m* b2 y7 {9 p  B5 B; ^  h        pbegin=str;
: M) b8 x9 b3 J        while (*pbegin==' ')
; f% S0 v8 x6 l: p  m                pbegin++;) `7 K0 v; g5 c4 i

, B2 m9 W/ W4 X% p% d) s4 x        p=line;" ~! b4 d# s. ?& @4 r5 U, p
        while (*p=*pbegin){
2 M: W: ]/ ~$ a8 v2 ^                if ((*p==' ')&&(*(p-1)!=' '))
: H4 E( j' _) P% l                        pend=p;
, g; o, T6 ?' }# g% U% L& }                p++;pbegin++;        + T' `5 S- d# [2 R, U% g
        }
8 F3 _# M, U1 v% i; u) S/ b# y        if (*(p-1)!=' ') pend=p;' r# f8 P1 X0 U6 p6 w" ~) u
        *pend=0;6 j! B/ I4 R* e& I1 I
        return line;
8 J! N% u& ~- \% P' h0 J4 v}
7 F+ j& T( k% J/ _& M' n
& J* i% j2 n) ^3 s# {
3 K# k6 m" O- I; A; K' J; Z//获得网页信息 - 网页信息是中文会乱码 用英文信息0 g$ l! ?& w8 d
void 获得网页内容判断外挂更新(const char *Url,char *html);; L  |4 j* |: M" l: j) d4 }
void 获得网页内容判断外挂更新(const char *Url,char *html)$ {* N5 F' Z3 p# e' M
{
. |3 }3 X+ L8 x0 u        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
# ^# k: d2 }7 m( f4 G( l        if (hSession != NULL)
9 F( G+ i1 d4 n/ f! i' H6 u' w* O        {$ q, }5 J' L0 S! O( w( A
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);. C+ \1 W$ W# i: _4 R' z
                if (hURL != NULL)
/ D( N' s# }& g1 }4 M6 M7 W                {+ m" d" D( e' J3 I5 ?( Q. L
9 |, d0 `. b* M0 z0 O, m$ O
                        char Temp[MAXBLOCKSIZE] = {0};
6 G1 V4 t! r. ?* k. m3 j                        ULONG Number = 1;
+ r& t. W% P1 M+ T" d                                while (Number > 0)
3 h2 e" J( Y$ q5 n3 C0 \$ B                                {- `' \% }4 H! v" b. b, }' V+ D
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
  Z! R5 I* h: C0 ~                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
/ N3 A9 I1 I3 _% {                                        int a=strlen(Temp);
- V  r9 f. ~: l, M, o                                        int b=strlen(判断版本);   
  [. g# D- X& J  i) w9 N                                        if (a>b) $ g& n! n0 B7 s. t1 R
                                        {
7 p% _; a. W1 x( z, a2 O6 d- k6 x                                                char *p=strstr(Temp,判断版本);8 ?$ j+ v( O) W  T
                                                if(NULL != p)
. ~$ ~' ]" I$ j1 W# @                                                {         
6 z3 b/ B8 b* t9 |. l                                                  int wz=a-strlen(p)+1+b;//版本号起始位置$ Z$ v# J: J# T
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;7 t* E( S& c; m% d9 N
                                          char s1[132]="";0 o: @/ J# T  d6 m5 s% R: F
                                              strncpy(s1,Temp+wz,wz2);0 T: F! X/ q" e" W2 _$ X
                                                  char *p2=strstr(s1,"MEILEI");
7 ?- h, E& G7 {* L8 j. _1 F9 A. j                                                  if(NULL != p2)
: `! j4 Z8 @' a& N# S# @                                                  {  7 T  Z& B2 d. v& a) Z9 @' W
                                                          wz2= strlen(s1)-strlen(p2);
' M* h( a' K# G! o9 F" X6 Z% {                                              char 最新版本[132]="";  X2 {7 _: F& F
                                                  strncpy(最新版本,Temp+wz,wz2);
' o1 d2 x; E* P                                                      if (strcmp( 外挂版本,最新版本)==0)6 c( Y0 j; k4 T5 D* O5 }4 \
                                                      { ' \- h; Y) |- v7 s
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );& x: `$ E6 d' W1 @& r
                                                      }
- _, X/ V4 F: {# Q( O. C                                                      else
( e& b$ |* @/ D6 I1 |                                                      {
, p7 K# e8 P- r                                                            char msg[256];
7 f6 t, H9 F3 {0 z                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);. ~2 k: P+ s1 E0 t. T/ q& l
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );- \2 u( q+ s- A* R4 Q
                                                      }
' r: }7 f  y$ V. K7 F                                                   }
4 |, ]8 F6 s* r# T& p7 W: P, _                                                  goto LH;
( I/ v) d( l3 A/ i% A" g3 `                                                }
/ S. K- A; h' s. X                                        }2 r8 q3 w7 Q0 n1 a) h
3 p4 V5 j: ]3 Y
                                }6 C8 Q7 X" U4 [! T  S
                                LH:;( D" P" g5 N; ]7 F$ r! G3 P* F
                        InternetCloseHandle(hURL);
; R& h9 e" a  Y9 Q( F; J% M                        hURL = NULL;
7 M+ N# F0 {9 M3 o6 ?/ K                }
# @; t" ^- f6 X& Z* ~% }
. T: E& E6 U. _0 k( t: u% A                InternetCloseHandle(hSession);
6 p. }( K5 m$ y. m' I& u+ i6 F* {                hSession = NULL;) G7 M2 Q( D/ d% B
        }
/ o8 y: T2 ]3 v" G- u: C0 E}  i# u8 i; |6 x
3 \* R1 L" a& m5 ?2 n5 Q) \$ N

. ]# J* x. F8 m. g2 C; m! K//----------------------------------------------------------------------------. R- }3 Q% |& B2 y" o1 T8 }% ]  j8 H1 {
//  Activation Methods
& A0 }3 N2 x& `. D3 l' B//----------------------------------------------------------------------------
; [( g8 W! G+ o: q* K" D
0 X: t, N! W7 P7 W6 x1 J' g! v- g' P//  Unigraphics Startup$ T  S! R' m1 l+ \+ q/ T5 K
//      This entry point activates the application at Unigraphics startup
# ~0 b7 d  w" W' m4 D4 @extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )/ a  u3 o- }' t0 m
{' w) c9 A# Y: r: u
    /* Initialize the API environment */
3 Y% M. [- N$ R4 [- |" `+ r* [    int errorCode = UF_initialize();8 p0 ]' g/ B# x. J( ~6 H/ c

1 c2 ?4 A8 \" I) G6 u    if ( 0 == errorCode )$ g1 y8 [& P: u4 o# c: |" G6 m7 s
    {: b( U5 ~3 i% w  P9 t5 Y9 l; k# L
        /* TODO: Add your application code here *// V& E# W. X8 L
9 ~7 H3 ~: q8 R% p; N
* ?# e$ A1 G5 Z9 G
                //百度云公开链接 通过修改txt文件标题; F% k1 }$ O/ E( k: A8 z5 l
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
, d* Y0 ]: o4 C7 g1 N  `. T) x# m1 t* r, R
* B2 Z! W: G8 ?( o7 I) M
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
1 _/ n/ A8 w! Z$ c% t( I8 g                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
/ s' `4 E) M4 y5 z                ( p8 X/ ^% Y( E( u( a
        & N, A. s' h7 a: x, X2 G4 s5 \
- P# e7 ]4 e2 n
: H: P, m2 Q& r- I8 I

- B& C2 u8 Z* |$ L" t- ^* b        /* Terminate the API environment */
2 J/ o$ S* Y$ Q! ]( q6 x; b* N        errorCode = UF_terminate();+ M' K. M3 K2 g- \) n* L4 {! W
    }
6 N* o3 |  G+ D$ |
4 B" U3 d" C( h7 }' v% J& f    /* Print out any error messages */
% Q# g, s3 D  r1 H5 E  ]return;
1 x% a6 l' o1 {6 A* w9 q}0 e5 u* R& I) t& X
9 g4 d% U8 y7 ~6 c2 @6 f
//----------------------------------------------------------------------------
2 r2 J4 F' b$ C# C* b//  Utilities
. R- @0 s4 q( a% ?, t5 ^+ ^6 e//----------------------------------------------------------------------------3 N6 Q9 T2 W! }9 B' H# @

. ]( i3 t- Y# k// Unload Handler' o  R  ?3 Q5 ]: m1 i9 n
//     This function specifies when to unload your application from Unigraphics.7 }  l& `6 ]. G0 N# M
//     If your application registers a callback (from a MenuScript item or a
; L# E0 I0 `, c7 z//     User Defined Object for example), this function MUST return7 v# K1 E, n/ V) R! B
//     "UF_UNLOAD_UG_TERMINATE".
1 p% c0 B8 U( e* X6 l9 d( f- wextern "C" int ufusr_ask_unload( void )
! J8 i" K9 ?% e4 k6 Q3 |{8 C& K% A3 f* J. |
    return( UF_UNLOAD_UG_TERMINATE );, X8 y; l. \, a( O% \  ~1 C
}1 g# z3 a8 b2 W
% D( n2 U0 r5 \4 e+ [, H+ g/ ?
0 o) Q' p# ?: k( O4 s- a8 ?
启动UG就启动dll的方法
$ e* j& ~  T5 d& e' {; _1 r/ c" C1 X0 K* c/ t9 }2 e- w  y; C
方法1.添加环境变量2 b4 B$ B5 H- ^' `
USER_STARTUP=D:\MEILEI.DLL
, j7 B, `# |! M" `; c但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
/ E7 L* Q, O% V4 b& {
0 E% D# \$ Z8 a, j! J5 ~. k+ J方法2.在代码里添加(可以执行n个dll)
- U1 _' W+ t: b, I! t/ a: B" q- N4 zUG会自动加载 startup目录里入口点是ufsta的dll/ J) |; o! x: |) Q
0 Y, \2 H! N+ p. a! D
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令+ p+ l5 v- \" l3 x* g( V0 J1 P
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
* Q+ i- F& `4 X* T2 ~$ U
8 ~6 _% |  c! x' O+ O0 g菜单参考  NXOpen_meilei.men.txt% N3 J! h; S" O
' `  \) o$ g+ S7 s" v
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
$ m+ j( c" a. Y& Z启动UG就启动dll的方法源代码下载0 X* ~$ U8 F7 y# M# P5 x  E9 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二次开发专题模块培训报名开始啦

    我知道了