PLM之家 UG NX10.0二次开发(ufun和NXOpen C++)网络培训火热报名

PLM之家-上海点团信息科技有限公司工业4.0数字化软件官方知识管理平台

查看: 1710|回复: 1

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

  [复制链接]

该用户从未签到

9

主题

33

帖子

159

积分

注册会员

Rank: 2

积分
159
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
! q8 v/ \$ d, B- u6 h; i% F9 i2 p1 O% _! G6 S* [* t$ [$ e
如果你想每次运行UG 判断 ug外挂是否更新
& Z- P+ w0 Q1 F
6 q  n8 [! L; |# Y, B  f3 y& ?! e: Q& _; c2 x3 `
原理:
, n2 U% E" j$ P# B0 K自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
+ C$ r% r' Y# N! c' F" U, u然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
+ U( P5 d1 z0 A2 w- Z5 ]: W% S( U; w: ^, \& X0 \6 A7 ]

# @$ p6 F/ }/ g" g. K* g被启动的dll程序源代码,如下& T% k5 s0 E5 A! x

! t# v7 F$ b5 Z' u4 u//  Include files
9 W6 @' t3 V: j5 B+ ?5 C#include <uf.h>1 _' h8 m  V- e' `2 D
#include <uf_exit.h>1 W* V/ q6 _' P  {
#include <uf_ui.h>
) I& \; }8 O1 ?#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun ), O8 t4 a: v& H6 _  K0 m
#        include <strstream>
! n) V) J8 F, g' y3 [, p#   include <iostream>8 C1 G" R+ t2 B" R; f
        using std:strstream;
' o8 N/ n8 w& R: x7 u: U        using std::endl;        1 n, h( D( o/ e& ~5 n8 h
        using std::ends;
- a1 n9 v( r- [8 F/ c        using std::cerr;
  N6 u/ L  d; r0 F6 O: G#else
- |9 t! D0 ?% A' Z#        include <strstream.h>" x4 k5 N4 l& K( y
#   include <iostream.h>
% G6 d/ X' h$ ~; E  c#endif5 ?& n. v* N/ D6 [
#include <string.h>  b5 T( D+ R) S( w8 [/ d) [
#include <afx.h>
7 i5 V: y* i( o" u7 p% W. d#include <windows.h>. V6 u. @% _5 S3 f3 q5 b- ]  C- R
#define MAXBLOCKSIZE 1024
) l; \; c" S2 \2 \* X9 H# k0 K#include <wininet.h> //网络: t% u- ?* v& Z8 [+ \6 K
#pragma comment(lib, "wininet.lib")//网络' i' c2 R# n1 V2 _2 ^/ @1 S1 A9 S7 H+ I
9 U9 B5 |/ s) `
char 外挂版本[132]="V2.8F";
' @2 x/ z! h& s5 G1 s) z8 A; e3 r
/ D! x  k' q. A- y# {# Z% b: q; j
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
: L$ U' y/ b/ Y! d  j{  
! s. O* X" Q9 |   wchar_t *m_wchar;
/ j( o9 e7 h7 I- c    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
8 Z; y' P. j  p/ C* V# c    m_wchar=new wchar_t[len+1];  7 {( W" ?3 L2 M( ]$ Y! A  J
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  2 [+ l6 b- D" ?$ ~# S, r& ?
    m_wchar[len]='\0';  0 \. e9 V  q% j* D
    return m_wchar;  
1 b2 i5 C. e) c4 }  A% ]}  
( ^7 K' \0 U) K: ]8 m6 a) h: T. W! n" h" A. c( f' Q
//TCHAR 转 char
( e; Q7 X4 p0 a. mchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  2 ]6 U& D" ~; k- [; H$ a' C' {
{  3 ~& U! Q  H- ~3 p; q' V
    LPSTR pszOut = NULL;  
$ @- D( g/ M5 y+ T9 r( b    if (lpwszStrIn != NULL)  
) [6 E  ~$ X7 v, L1 ?' h# f2 n; w3 X    {  8 b; n, m5 G" p( d" J; I) l; f
        int nInputStrLen = wcslen (lpwszStrIn);  
: W$ f( Q5 Q4 J2 @$ \/ Y* y0 ^. |0 c
        // Double NULL Termination  
# P0 l! ?1 }% p7 }" X/ Z6 @4 d5 K        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  - E- k/ a4 P; `5 D# c8 ~
        pszOut = new char [nOutputStrLen];  
" z8 n. J) ]% F
: {5 U/ N. l% ^. V        if (pszOut)  
5 o4 n' v. X# i        {  
) @6 f* ]9 n, o            memset (pszOut, 0x00, nOutputStrLen);  0 A9 u% J- B% E4 j1 H. R
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  4 j- }! r1 r) y7 k
        }  6 U3 f$ D- R; y7 t
    }  
/ M" W2 b' n1 q7 F9 @" Q/ L    return pszOut;  
& o! M# _, Z0 A# ?- _}  
; D$ ^4 S5 q6 E, L9 |5 l5 b  m
" Z8 n) z  l4 ~- U4 }& C! k+ r% N, e' u( _8 c2 b- e
//CString转char) ]/ D8 \: a$ O
void CString2Char(CString str, char ch[])
3 ^9 [! r' K  N7 D. d7 l' Z; R{
. n* T+ ?" c1 O        int i;" A# G+ v* ~, M8 ?+ o9 S
        char *tmpch;6 X  j: `* n# {6 a0 m
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
6 l0 L: P5 l; Y# T2 u        tmpch = new char[wLen + 1];                                             //分配变量的地址大小3 Q* G7 o# ]% Z' \
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char** f: X1 n) r! r: a
) `. ^. O) d: z% L# |7 y/ H' c" T
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
" d8 k+ G9 n7 l8 F7 h        ch = '\0';7 }/ {9 n5 b, W) P# H7 G
}
! S, V* o  l, r/ p0 ~# X* I9 Z# j4 B* q# i  p: t5 x* t
) ^& T( t. y2 S2 R
char *去掉char首尾空格(const char *str)
5 ]$ J  {7 E1 N' W/ j6 g# h{& ?3 X2 W7 Y* V
        static char line[133];
! {2 |. M2 T+ @& ]9 w        const char *pbegin;
& I8 [+ V  a; p        char *p,*pend;
% b% @! t9 |& J2 j- T7 I/ A5 C$ A        int i;8 |5 L' X: O6 ]

- u4 E+ F* l7 h: x5 `0 U$ D        pbegin=str;6 R" A, T6 ~4 t! M
        while (*pbegin==' ')
+ `& V! a( u3 _9 j4 w6 C                pbegin++;
0 y) G: S4 r( ~* _9 w4 P( q8 F7 T% C0 i' F( ]9 {7 ?/ N7 Y! `
        p=line;
0 ^$ K+ T& \, B' Q        while (*p=*pbegin){3 e0 f1 d5 }, s- Z
                if ((*p==' ')&&(*(p-1)!=' '))6 z; c! _* B$ p- ]
                        pend=p;+ `8 |: z# D9 V3 O
                p++;pbegin++;        8 u- X5 A9 t# ^# g3 x( a
        }
2 E( ~3 k3 b  y! @% _  c        if (*(p-1)!=' ') pend=p;
; N% Z; W* k3 c        *pend=0;
3 n9 r" x- G# F% x& v4 v7 N        return line;8 [" m/ I2 F) ]3 C- ~7 x5 a2 `1 f
} # @5 q- {! W( N/ x! d, w

5 d7 L4 w( I  x: H0 Z, n" Y9 n$ d1 f& [
//获得网页信息 - 网页信息是中文会乱码 用英文信息
9 z: @- l0 ~0 D# C( A8 P0 xvoid 获得网页内容判断外挂更新(const char *Url,char *html);
7 M3 S& H6 w8 w0 g$ j9 [3 dvoid 获得网页内容判断外挂更新(const char *Url,char *html)" Y. R; {5 U* V8 b+ a
{4 L0 s$ r# F4 f, x6 N5 M
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);- ~0 O  J8 A+ H* f8 n, l
        if (hSession != NULL)
3 N0 H2 f& u( O9 K( X6 M        {) b2 v9 c/ _3 k0 x; f, S
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
7 T) F% k7 u3 C' |2 P                if (hURL != NULL)
& ^. Q" M8 Y5 o                {
/ J9 {. H3 G1 X+ d6 m5 _- j+ t8 H" b
                        char Temp[MAXBLOCKSIZE] = {0};
: r1 D5 R5 F% [2 ^+ L. V' \                        ULONG Number = 1;
. `9 C5 f0 d6 s+ V, a/ ]. R: ]: O                                while (Number > 0)" e, {( F7 b+ X6 H7 ]
                                {, [  w) j) b* P; z. G- Q* y
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);8 d  r- G6 J2 S, J  f
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";  N: k: }$ D4 u- |- M
                                        int a=strlen(Temp);
" l1 O/ N+ _* g3 k( l                                        int b=strlen(判断版本);   
! c1 V3 X) B$ R! \                                        if (a>b)
. Z4 ~6 t( A2 l4 T) |, j& w                                        {
' M5 M7 |0 ?( b' L3 k# U$ M                                                char *p=strstr(Temp,判断版本);
3 n# R# @1 h+ B; T) G, b. E" y                                                if(NULL != p)/ ?- B2 ~1 ]" ~5 G; ^
                                                {         
+ j/ I2 H! {- }; E                                                  int wz=a-strlen(p)+1+b;//版本号起始位置8 a  }' I3 E) @
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
  O4 U: u8 ]" _, j                                          char s1[132]="";
+ h2 n0 E/ G( g# ^- d                                              strncpy(s1,Temp+wz,wz2);
" u) Q7 [% a; d' [                                                  char *p2=strstr(s1,"MEILEI");8 n, ^5 X7 t+ P+ ^' a4 p- Y% d
                                                  if(NULL != p2)
( Y# V) e, ~( S7 O7 M: t                                                  {  
! s1 q/ K# c! u  K; ]! x; B9 P                                                          wz2= strlen(s1)-strlen(p2);
+ b7 e6 l$ s4 v& C                                              char 最新版本[132]="";
3 O2 }! k3 x5 O2 ^# c4 L3 Y& b4 c1 e                                                  strncpy(最新版本,Temp+wz,wz2);
4 r/ @0 h1 D! n- Q                                                      if (strcmp( 外挂版本,最新版本)==0)
8 S) a/ E2 `6 B  A                                                      {
. }1 _9 a0 n& V  }2 {8 I                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
1 U+ E8 t+ V8 C! ~9 D8 g2 Q% r                                                      }
" v6 O# s6 W4 [                                                      else
( V7 f- P8 c0 I$ z                                                      {2 b; a, R7 _' I
                                                            char msg[256];
; A' W* i6 K; i5 g$ g; n                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);# v: ~- X$ c; b  f
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );' T* i! B/ P# B' ]$ F& O1 x% F: S. a
                                                      }% v% o5 B7 N3 ]/ b, y  o4 \  \/ @
                                                   }
6 i0 g9 _) I- @2 E& f3 l2 p) y                                                  goto LH;  r$ \& V1 u! Y/ b# X
                                                }
; R" ~+ c6 W4 ~& j                                        }# F' ~( [8 U5 K5 Z& X* R
+ d1 T; ]# e5 p1 e3 E* z
                                }. e' ]# ]6 \2 H3 T6 F8 u$ j' w$ a
                                LH:;+ x3 J0 J5 R) D. o0 \5 _9 s
                        InternetCloseHandle(hURL);
( a  K: b, ?* c8 u0 Z                        hURL = NULL;
5 j4 _" |  v5 f# W! H$ ^                }8 i$ z# e+ l; N, y$ |2 z
2 k: s! |5 X" ^  U, @
                InternetCloseHandle(hSession);
$ I- X/ j& j* R0 F/ `                hSession = NULL;% b; e3 C$ _8 c
        }
* M2 {3 ]# I: @% p# A- L) d/ `}: s$ ]: @4 ~- S* m/ V& y

" K1 U0 I  r' S3 r3 a; _, O2 [0 j
//----------------------------------------------------------------------------( E# D4 {$ s( _$ b' ?
//  Activation Methods1 \# D! [8 {/ y$ a: |3 R  e
//----------------------------------------------------------------------------  ~9 G, I  ^+ d8 I& b; I' G
& j- x: N7 `3 ^
//  Unigraphics Startup
+ d! B' ?# r% j8 S: o//      This entry point activates the application at Unigraphics startup# T9 W6 h6 [/ H
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
1 H7 @0 R9 e7 ~4 E7 S8 T7 m+ I{% Q$ N( B6 S4 z3 ^0 F; \
    /* Initialize the API environment */
: [% N' Y5 r9 E9 \8 @    int errorCode = UF_initialize();6 {; Y' a# A- ^- z! V2 L9 E& J
0 Z7 j0 {0 {1 X6 O5 {6 l
    if ( 0 == errorCode )
; |) E8 @; ^# A$ O5 ~    {  {% ]# B& @3 x/ [
        /* TODO: Add your application code here */
* d2 K/ n5 ^4 W- m9 E. \) M* l( V) r+ k8 j1 L# u6 M

/ f* u( B( Y4 i7 L  L                //百度云公开链接 通过修改txt文件标题- Y! O1 ]$ i' L( m$ w  X6 }$ ?
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt8 E- G0 ?! P" Z7 ?6 t7 k

! O5 C( S& I8 k: e8 ~
1 }- f. `5 X+ z: I: `& s                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
7 B* z) y! J% I$ P0 p9 }4 ?3 }                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
/ i5 d! L; U5 d- v6 v$ W" E               
, e8 w! B+ _5 ?9 d9 E        
9 T& ~$ S' T3 r# \  j% ^
- s0 ?# s6 T; \; a1 Y5 e4 c9 s0 y- t) X( Q; Y
; j: W2 B' W" ]+ O' n) w' s9 F
        /* Terminate the API environment */
' O9 c3 y3 S- S: b        errorCode = UF_terminate();% O: _& D4 Z' H; v# Y& b
    }
) f. n. h3 w! G" P0 t- E
' b* |; Z0 ~9 m" V! Q    /* Print out any error messages */( G/ a; O$ O$ d. Y
return;
3 E3 b' n+ U* D! N}
3 w* S% K( n* F7 `0 h) h+ b
) N) ^; z3 [6 D) z# M2 k& H//----------------------------------------------------------------------------3 g- [9 v; m- u4 |& {! q
//  Utilities* c6 H( |# k4 x' n+ B2 \3 o8 z9 E
//----------------------------------------------------------------------------
; p" `# w; p4 L: I, e
" X; I( E- N: k8 T2 D' U* c' u/ [1 a// Unload Handler' b& `1 d+ W6 Q; c2 {, \
//     This function specifies when to unload your application from Unigraphics.
1 g/ ?1 e2 S. I' ]) c8 J4 ?//     If your application registers a callback (from a MenuScript item or a7 z, b8 P0 j* G% y- b* ?; o
//     User Defined Object for example), this function MUST return. _& g8 H# D+ z) X
//     "UF_UNLOAD_UG_TERMINATE".
$ X/ X- Z% q0 n7 [5 hextern "C" int ufusr_ask_unload( void )( ^6 o6 A( R, }( Y* C. p
{" v6 M% r: ~0 w$ a; e$ c# o% N
    return( UF_UNLOAD_UG_TERMINATE );
# B" g7 |) }5 I3 b- e0 }, P  Q; `}! ?; f, }! J6 H& C& d, e/ j) C# L. S) R

. p  k4 P2 Y/ N
8 [; m1 h+ }- k" ]% R启动UG就启动dll的方法
) u4 Y. W, l) r4 P- u; z
/ j! i# M0 d. B# K1 V2 @8 [. J) o2 A方法1.添加环境变量5 X( W* w1 c. l+ ~8 c: n
USER_STARTUP=D:\MEILEI.DLL
  t4 X3 @: u# f  c7 a但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
6 L+ ~  g/ g) ~% @) l
: y* S) r/ o* L7 N方法2.在代码里添加(可以执行n个dll)+ ~0 Q. v; l) ~  ]
UG会自动加载 startup目录里入口点是ufsta的dll
+ z  t2 K# u* t: b: _7 U1 |/ K7 A7 Z$ y2 {
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令! ~: K3 u2 V- X" f0 b+ m% a
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了+ A1 |$ `$ h4 d% m7 _5 j3 h
* \7 `6 Y$ o' Q, a& J6 C
菜单参考  NXOpen_meilei.men.txt" M9 K2 O. Z0 t# `- s2 k2 }

" e) f; @% @. c$ V( P0 f* F) iDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
2 }7 x' w2 x. v1 F; X启动UG就启动dll的方法源代码下载
! W4 |$ m8 C. x 启动UG就启动dll的方法.rar (3.3 KB, 下载次数: 19)

评分

参与人数 1PLM币 +5 收起 理由
admin + 5 很给力!

查看全部评分

回复

使用道具 举报

该用户从未签到

0

主题

25

帖子

151

积分

PLM之家NX VIP

Rank: 7Rank: 7Rank: 7

积分
151
发表于 2016-12-23 19:47:22 | 显示全部楼层
支持下梅大师!
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

<

QQ|小黑屋|手机版|Archiver|PLM之家-工业4.0数字化驱动之家 ( 沪ICP备13003373-3

GMT+8, 2017-10-20 03:49 , Processed in 0.170661 second(s), 37 queries .

Powered by PLM之家科技! X3.2

© 2001-2013 PLMHome Inc.

快速回复 返回顶部 返回列表