PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
- \8 U" B2 b4 h- o8 h: {3 P" T3 Y' _/ r! S  y7 p, T" J1 Q
如果你想每次运行UG 判断 ug外挂是否更新
1 s! r* |7 `% Z4 B5 {& L- F& c  ?$ N; w/ G3 m& Y, M8 A. x
& j6 S1 L5 @: L. q
原理:3 R3 z4 y% K3 I9 C" f) _  S
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了6 [: h5 b6 f2 x  f1 |$ u
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
- i' u* _; {3 k" w; a$ ^. W
% D( k  |* ?# V, {6 s/ @( A2 `+ g
被启动的dll程序源代码,如下2 ~+ ?# n) v9 y
4 J6 G7 r. }: J) F
//  Include files5 U! z) z4 ?& w" l) A
#include <uf.h>  D& Q: t) K% p; W9 ~, ~( y' D
#include <uf_exit.h>$ {/ f5 D$ U9 M$ z3 H
#include <uf_ui.h>7 C6 L, u7 t- `; A& V% r
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
1 i. O5 Z( c2 ]6 j#        include <strstream>
5 V: H' Q8 d5 Y2 ^" ]/ M#   include <iostream>
% A$ d% p% ]& D1 d0 a( S$ x! N7 E        using std:strstream;; t3 L0 ^$ w+ r& [
        using std::endl;        / @* i# [( H# D3 P  K2 ~# n' y
        using std::ends;; y  f3 x7 W$ @2 t# B( d
        using std::cerr;
- c' m2 ]1 y6 z$ C4 |) v7 s#else" s; w# _! @: M( c" n
#        include <strstream.h>
. M( I+ o* f2 S+ C- L" t! Q#   include <iostream.h>! u" C: |) G5 N: \; p9 a" `6 S% z
#endif8 y* K) H7 R- j% c6 E2 g& s& E
#include <string.h>( ]! ^" g0 [2 F* |
#include <afx.h>9 d/ @' U  a2 ?# u4 z
#include <windows.h>
' B$ q& F  k7 c#define MAXBLOCKSIZE 1024
0 h  j/ h# w+ o8 [0 c! b+ w1 Q#include <wininet.h> //网络
' t  b' f- x; [( g: ]$ A#pragma comment(lib, "wininet.lib")//网络. ?7 G/ u. C! e0 m+ R# a

9 J$ }1 o& b1 L* {, H& d5 ]/ Vchar 外挂版本[132]="V2.8F";
9 U+ C% `- S. Q2 N
% t6 A) }' z" g3 F- s; q6 N( m3 i2 \
wchar_t* CharToWchar(const char* c)   //char*转wchar_t6 N) H/ w/ x0 \! c
{  
4 u. l9 S2 _1 B) L; z- |% q0 ~' Z5 s   wchar_t *m_wchar;% X. z+ l1 Q- R8 n& ~7 P5 `; H
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
& P% L, I9 G! z4 a* N    m_wchar=new wchar_t[len+1];  
! I$ s% V2 I1 [! i3 u    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
2 B# Q* S3 }' p7 y0 \& y% r! N    m_wchar[len]='\0';  
' F8 R8 }$ K; T' n5 D4 `5 o# C. X3 K    return m_wchar;  . H6 ?3 V1 m+ Q
}  ; p6 z2 U  F; S3 D+ E' H
0 f* Z( V8 v$ B% y, h% ^
//TCHAR 转 char, B: c* ^4 z. Y5 E0 `9 K
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
1 U& ~9 Q: f+ b* D& l1 L{  
; V" W8 |  R0 W) O, `9 {& v    LPSTR pszOut = NULL;  9 t. n( ~6 X9 V6 f
    if (lpwszStrIn != NULL)  3 a- G1 c$ F4 w# y
    {  5 u/ `2 C" T4 j* P+ o
        int nInputStrLen = wcslen (lpwszStrIn);  ! e5 a) b$ Z, `! g2 J
( s. _: v( X! \3 Z
        // Double NULL Termination  
, C, X) n! d  K* A        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  7 g: R" @- n( ^. U2 y2 x
        pszOut = new char [nOutputStrLen];  
  j: ?( `' u( @! e) v
0 N# L8 O7 P. J        if (pszOut)  1 `% F! p6 u9 O$ H8 v' k
        {  , }5 ~. }" O6 _0 j& {: E
            memset (pszOut, 0x00, nOutputStrLen);    B- r- I' |  L3 e$ P& M
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
( H. \9 V1 A7 X8 C4 u$ {- a7 d        }  1 o( }8 H+ Z4 Z" B2 }" i
    }  
! x4 c1 D$ p4 g. f    return pszOut;  ; s: H2 P. O# \# r6 h, Z
}  
0 r! K6 x( f2 T" N- C* g
. e$ X8 w) _& Q1 b7 t  R3 a/ C1 U/ u9 r7 t# t
//CString转char& U# z8 ]$ m" Y
void CString2Char(CString str, char ch[])7 z) B. H5 U! }) @1 d( L" K
{
6 J' D3 N3 L- Y2 Z        int i;: N7 A- u8 a( `( y* S+ @9 i
        char *tmpch;: X& Y: n2 I9 O- t3 @
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度0 n( t; q0 r5 Y: V# I$ Z2 F5 E
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小% P' \) ~0 n1 A  }% f; l0 j+ ]1 f
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
$ l+ J! d1 \$ V2 a' C! {
3 i; T( Z5 C; U8 o5 B3 k        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
/ V8 |; B! L2 {9 q1 x0 E        ch = '\0';7 U0 E2 M. ^& I. S# R/ C3 t; g6 v
}
1 }% a( M, y: ?- C( o
- d: Z3 ~1 I* i, q
5 ~1 Q: o6 i( \char *去掉char首尾空格(const char *str)3 L) R+ e8 i5 ?
{
8 n8 o8 M# i4 X" S        static char line[133];, B! p0 y$ ~, l! z: w+ }* g
        const char *pbegin;
* o  X  Y2 O! W. b        char *p,*pend;
0 o, q& V7 y1 k9 r        int i;2 u0 E# p) G$ {1 ^3 w3 i
9 J. @, p0 H2 l- A' x2 ~8 ~% K3 _
        pbegin=str;
' t9 G2 i/ H4 F) k2 X; R& `        while (*pbegin==' ')
' L2 a7 ?; O# `4 d; n                pbegin++;# o$ p) [. ]5 p9 @& Y5 {
: I& G3 k9 o) O, |( n
        p=line;
; V  G* r$ s8 U; o1 S        while (*p=*pbegin){* G( f2 x2 U+ ?8 x% v
                if ((*p==' ')&&(*(p-1)!=' ')); f7 V7 B! L2 @" N
                        pend=p;
' g; d* a) {3 R                p++;pbegin++;        
: }6 F5 q; F3 j* U/ D        }
+ N5 i3 P* \6 D; z' V/ u        if (*(p-1)!=' ') pend=p;- ?6 W+ Z6 P9 z7 f% J$ {
        *pend=0;
6 `3 c: I1 Z1 D/ X        return line;, ~: `* r# f5 \3 s! x% Z  V0 v9 A9 G
} 3 T1 j7 z: ~9 P  ]9 X- q
& h% Z/ S. |# v. B5 h5 t

5 o& n- F* a0 L2 R4 O3 T//获得网页信息 - 网页信息是中文会乱码 用英文信息4 U7 y& x0 ^/ `6 o" n
void 获得网页内容判断外挂更新(const char *Url,char *html);; @5 ]2 d1 z4 {: ?. K& H  t6 b  K
void 获得网页内容判断外挂更新(const char *Url,char *html)& i7 X, n- ^5 q8 y
{# ?8 ]' G8 e  U/ w5 H: K' ]/ M' e
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
) ^' f" ?# c! Q+ n/ o3 ^! v% c        if (hSession != NULL)
1 P8 i! l6 Y6 T- x/ E" P        {
2 v& \  P; t1 {' K" P                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
0 J1 y2 A' N; H$ ~" v                if (hURL != NULL)
$ ^8 l5 W! ?6 E- U                {
' C% N, V. ^8 X2 y# Q: \" p* g5 f/ p0 v* g
                        char Temp[MAXBLOCKSIZE] = {0};7 J7 U( f5 \; i' ]
                        ULONG Number = 1;* |5 y) t/ L& V
                                while (Number > 0)/ m) t* W$ x) ?) ]
                                {/ o) s2 y5 ~" H2 d- g  P) F
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
/ [. }# }0 q% M5 O' U$ ]                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";# ~* ~4 A1 L& Q* U
                                        int a=strlen(Temp);
# O" N& P# ]1 `) A( n# y! u                                        int b=strlen(判断版本);   5 `: Q; e  S2 T! Q8 \
                                        if (a>b) $ |1 z. K; f) u- u' W
                                        {7 k; A9 U5 A+ I  u& N0 j- d
                                                char *p=strstr(Temp,判断版本);
* _; L9 c( K% w1 [# T. F/ ?                                                if(NULL != p)
7 o9 t$ j4 T% z: F                                                {         
3 a* n* R1 H* M                                                  int wz=a-strlen(p)+1+b;//版本号起始位置" B/ r( O* [! I4 p- T5 m: t
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
. Y, m# h1 r) R$ \) l                                          char s1[132]="";9 d$ q  u+ [% H$ P0 u
                                              strncpy(s1,Temp+wz,wz2);0 J7 w3 o; ]- m+ g) s
                                                  char *p2=strstr(s1,"MEILEI");7 f: w& K7 Y* }) x9 W  T3 F
                                                  if(NULL != p2). L, U# g* g# u/ e
                                                  {  ) s5 h% k6 k, @- G& o5 m2 p. _8 t
                                                          wz2= strlen(s1)-strlen(p2);  p+ A  R* Y3 D# m
                                              char 最新版本[132]="";4 L. T) B6 X  B( S
                                                  strncpy(最新版本,Temp+wz,wz2);. u/ ^; l# I$ z% z$ _, w. I
                                                      if (strcmp( 外挂版本,最新版本)==0)
6 r; g# z: k$ l* l9 }& M: U                                                      { ; ~; M0 u- q3 L9 I+ l9 X1 g7 N
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
" R5 e. A+ C" F4 X  g! O* {1 H                                                      }
- ^% ~+ |. f3 E5 o                                                      else8 J: i' {9 A7 V% Z" y
                                                      {
, |4 [, H# E! ~* e: P: g( q9 f* c8 @                                                            char msg[256];! p/ {. ~; ?7 }) x- |8 z3 y9 J
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);0 k! ]1 f% Z, L) \6 ]8 l0 P
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );" a6 o% H; m9 y
                                                      }% R* A5 I$ j, s8 t) A) i" x, g) p
                                                   }" J/ A  h; k% S1 N
                                                  goto LH;# @5 x2 |. i# Y4 Y$ T/ M/ i
                                                }
/ g; @$ ]5 k# C                                        }
6 f" U, J. P5 L4 n7 p: d4 d  _; D1 \% [! h
                                }& C3 \- z$ {' n/ ]6 r1 r/ q* f
                                LH:;! e6 w: F4 Q, ]) F7 z: [% F, @4 |
                        InternetCloseHandle(hURL);
% ^5 X: p7 a) J6 U' v- Y                        hURL = NULL;6 V2 y9 _1 ^1 z5 K, s2 A" o
                }
  m, W* V; _7 M) O6 M; S( H+ [# u$ e6 j7 j3 T. `1 R* j7 S7 L( H8 V
                InternetCloseHandle(hSession);
* T3 s' F$ q: [2 ]                hSession = NULL;1 u9 m! u; N% s: o
        }
( {  g7 Z  {& X# j) V) N}
! V, G8 L! q& e! z7 T* y1 J) W) m- v. C. V0 [3 d: e. f

3 m1 ?$ y6 B8 j' q5 @//----------------------------------------------------------------------------3 ?$ y; `9 W' c; w' A5 J) C
//  Activation Methods- M$ D2 g9 O7 g: m$ C% v7 j. D# ~
//----------------------------------------------------------------------------
% `& Y  ~* H) [( j" E$ f- L3 Q6 u
//  Unigraphics Startup
; ?4 J9 s3 o. I# m: }//      This entry point activates the application at Unigraphics startup
8 ~# n+ p* Z- b3 i- p/ Kextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
0 Z/ R+ L& B8 H7 j; n  J/ ?{! I& N) e( Z& m& z  J
    /* Initialize the API environment */  P/ Y- Q3 M8 x3 F; x! c4 N( B3 }
    int errorCode = UF_initialize();
* d3 T! R6 E9 E+ _: w. [
. o# A* W' s+ |0 q- n- W    if ( 0 == errorCode ): ^% T% m# W& A% h  m0 e2 _" p
    {+ [# h0 Z  p1 E2 |: i+ V( W* h+ I
        /* TODO: Add your application code here */+ s* h' k7 C& V8 }* D8 D# p

7 p: l& d3 p. \$ X9 z: g  z1 w* \5 N. [
                //百度云公开链接 通过修改txt文件标题8 J0 R$ [2 |+ z; F* ], U
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt2 P# F: T4 Y, O) h; t

! x% U5 o1 ]' u4 P
; F$ i0 u6 X) T' i3 E% s$ g                char 网页文件[256]="C:\\Windows\\版本.html.bat";  ( w* D' ]3 `/ K5 |; K, j- X7 g' g
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); : m9 t- k0 t8 l' M* j) N
               
/ u, K7 r7 c1 W9 c3 Y        
+ |& r0 C: b6 d! X9 k  d3 O0 q3 z/ {" [  h5 M. T

9 ~0 D& U3 b( o7 D4 P
) n. T2 A! t: \& h1 C/ Q1 q% {        /* Terminate the API environment */$ V) @, C) v- f$ B8 h
        errorCode = UF_terminate();2 m8 e' f0 c1 l3 l
    }
9 ]! f( Z. |0 e9 q) O9 K
8 z+ o) L, j1 M$ h- J    /* Print out any error messages */) T$ F: `% f( t* Y! p
return;! Y$ |' w/ b4 x3 n
}4 W& a9 z' L' ~) V" G

' E. M* `# C9 r  z* l1 k/ b//----------------------------------------------------------------------------4 _+ M4 y9 ]/ Q4 _! P* R& J
//  Utilities
! t' D0 R. i5 q! A( Q, N( C0 G//----------------------------------------------------------------------------
3 |+ [& y1 r5 |: p- h0 M) Z
/ O" i2 _) Q* r" y// Unload Handler
! D8 `- w5 v$ A6 Q$ W* `! W//     This function specifies when to unload your application from Unigraphics.
( p) N) W( ~& m8 t: f5 r7 F//     If your application registers a callback (from a MenuScript item or a
% e4 T. g) t  g% W//     User Defined Object for example), this function MUST return
" L+ a3 ~/ [9 i1 e5 l' C: Q//     "UF_UNLOAD_UG_TERMINATE".* ^5 S+ `4 U+ H& @1 ?" E" n
extern "C" int ufusr_ask_unload( void )3 v. ^' I7 B  _5 L+ I& P( l/ _2 Y
{5 u8 _8 T- g7 l3 m
    return( UF_UNLOAD_UG_TERMINATE );
5 v1 R' @9 v  c+ ~4 ]5 ^}
& u3 l  J2 x: [7 L; ]/ O
# J) Y8 k  V! ^  l2 F  B1 ?/ H0 n, ?3 E- |* F  b* l
启动UG就启动dll的方法: Z, P6 |! c$ f; d, Y' {
* S9 ^  t) O1 v
方法1.添加环境变量+ d2 m1 I) k  P* v
USER_STARTUP=D:\MEILEI.DLL% N; P" F7 V/ F" T, f  Z
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了6 e$ K4 B8 T& F/ ]
: B  E. L7 A  q, ~+ C2 P1 G
方法2.在代码里添加(可以执行n个dll)9 A6 D5 I& w3 U/ \5 Q
UG会自动加载 startup目录里入口点是ufsta的dll
0 B0 c+ n+ G' @; ~5 z6 O8 u. g  d4 t; j- O# l0 x0 Z
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
$ A& j& v5 h+ ?参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了. Z  }" b" E! `' d& o1 Q; N( N4 `# l
6 r/ `* b% C: d9 D: S# _
菜单参考  NXOpen_meilei.men.txt* h1 D3 t; q4 w1 \
& P, D) O+ C( P; |. L, x% L7 r& I
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
* R: C7 e& Y; j' Y6 ~启动UG就启动dll的方法源代码下载
# A7 s8 x! t- Z( x 启动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.doteam.tech
回复

使用道具 举报

全部回复1

0

主题

30

回帖

222

积分

PLM之家NX VIP

积分
222
发表于 2016-12-23 19:47:22 | 显示全部楼层
支持下梅大师!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了