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

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

查看: 1902|回复: 1

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

  [复制链接]

该用户从未签到

9

主题

33

帖子

159

积分

注册会员

Rank: 2

积分
159
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 , H! Y! p) V0 V  F2 p

! c  h. z/ R* q+ w2 l2 _如果你想每次运行UG 判断 ug外挂是否更新' F6 S5 A0 [: T8 g

% }2 C. M1 m( k  j% e$ U% w% i6 A$ Q$ J/ l; E
原理:3 b, Q$ w# k: z) O( ?, R: |! Z% Q
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了5 q0 U4 i- T. ~, @9 E0 ]  X% ?7 p7 h( X
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断! w- m6 j# Q0 \2 Y! h; P' S

' |5 D# z% J4 l/ E2 R6 f2 g4 ?5 j8 V$ T  A3 Y% D4 m2 F: f+ t8 N
被启动的dll程序源代码,如下
' f$ M" B+ s$ f' q3 r( y9 c$ H3 a" f. r* \3 x2 E% j0 V3 |
//  Include files+ t/ O. F0 t) \2 W! c0 @* `' A
#include <uf.h>% X" D& B% B) h
#include <uf_exit.h>
) J, h0 Q; N; y/ E8 |* T# k+ c#include <uf_ui.h>5 }5 o1 `  M0 }! w! w9 o: L5 o) A, Z
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )3 h( m' \" S6 U
#        include <strstream>
5 b& V- e' f: M, ^#   include <iostream>
* m8 b! ]/ D( I! `. H        using std:strstream;
* m& O) r' {: u1 f1 h( X7 J6 o        using std::endl;        : u2 W2 L% K" w0 J7 J$ P
        using std::ends;
6 ^5 e2 m" y# |: q' V5 p        using std::cerr;) d7 U2 Q& ?4 Z5 z
#else
- L- e+ X2 T) G" j#        include <strstream.h>
6 i7 O3 F/ H8 @# _2 x0 Y#   include <iostream.h>* s& Y6 t# @* m, P9 s5 Q
#endif
3 A* O( u5 U/ \3 [  L#include <string.h>/ _* p, n( |8 [( q4 [5 s
#include <afx.h>
, n: E# p; e1 Q#include <windows.h>
* v' q) b) @4 i$ z4 y: g. q8 y#define MAXBLOCKSIZE 1024
, @( D. `( p5 E: Y; d9 Z3 R& t#include <wininet.h> //网络
7 S( @4 u# g; C  h2 ~#pragma comment(lib, "wininet.lib")//网络/ B. C8 h9 b7 k1 {2 |' L) ]4 G
0 }; _6 A1 N9 b- r
char 外挂版本[132]="V2.8F";
- \! y7 s8 k+ T4 ~+ z) d  y& q( @
: ?: c- l. n9 Y  e' g+ e( k0 c
  K: Y, a0 ?+ j$ N: qwchar_t* CharToWchar(const char* c)   //char*转wchar_t( S0 h& u" F' s; V# g
{  8 p. P9 l/ S3 [9 o# y% b
   wchar_t *m_wchar;
' q/ ?( w. [7 F- W( e# h  q$ K1 G; J2 ?    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
( a6 C0 k5 o. c    m_wchar=new wchar_t[len+1];  
# p1 M& o5 O3 T7 A8 k0 p: V    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
; {7 t; @0 X6 [    m_wchar[len]='\0';  
% J% v* }% q2 P$ n1 q    return m_wchar;    ^9 @6 h& m  A( }9 m/ Z
}    h) X! D! g+ I5 X
0 h9 e4 e' R* ~" `
//TCHAR 转 char4 B2 I( k: d  y
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
  w% {  o' e* [5 P{  . }1 z; G0 Q' J! m5 E! s: U# e
    LPSTR pszOut = NULL;  
( c0 t3 Q! p( V: {6 @    if (lpwszStrIn != NULL)  2 j! _* j+ r2 I5 c$ n
    {  ) J  s2 E6 j0 j9 B
        int nInputStrLen = wcslen (lpwszStrIn);  
5 Y+ _9 g5 I" f* p) p' x3 o7 F8 Z, X+ s' U
        // Double NULL Termination  1 ^1 q' O4 V+ B; e$ C9 m4 X# [
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
  M) |$ o$ A6 Q        pszOut = new char [nOutputStrLen];  . {! v6 w2 ?: w
) g+ Z, x8 |8 \5 r( e5 A4 ~9 A
        if (pszOut)  
. |9 l; W; N  a: \" F        {  $ D: j0 j: E! x
            memset (pszOut, 0x00, nOutputStrLen);  4 B* n: m% t1 e( S
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  6 I. W( H2 t; T5 n* F+ v4 i8 ?
        }  
; V) x* O8 v2 s' F0 S, b) Y    }  2 e  h* o; C4 [0 c
    return pszOut;  3 l& }2 Q. r$ `' O& \* T( ~
}  
- b2 J% q+ j5 k
+ j. E5 G$ u' x5 _! R- b. e4 T- i
7 e8 A$ C# ?2 O//CString转char& K1 W  \# P$ v
void CString2Char(CString str, char ch[]), k0 L' }1 Q) c3 \8 ^! I3 h! k
{0 S( Q( u  I# C' X% U
        int i;* {; q! E$ k! ^$ B6 ^# x0 z: a
        char *tmpch;
! u# O1 g- I- p9 _5 N$ ~' ^        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度; X8 W! r$ c! E$ m
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
& @+ y" ^6 q' _" O, w6 n8 V9 S        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
+ Q* i( O  q9 b" u) V+ S
5 i; K! f. t. O# ?        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
, L% {8 n8 W( u: v" R8 j7 A7 x        ch = '\0';
( n3 E8 n5 x7 N) H}
. `2 Z. o8 ^0 q8 x! z2 b
0 H6 |" L  C+ S- S' V6 t
$ d% }- [" o7 V2 z* Ochar *去掉char首尾空格(const char *str)
. b: B* a1 U1 {/ [4 J2 b{
7 j) T6 p6 l( V; p1 G6 M3 D2 s3 K        static char line[133];7 v1 y  \% b8 s  x% G
        const char *pbegin;9 l# Z1 O+ s- }) p
        char *p,*pend;
  l' h/ F- `$ k5 d        int i;
  m. s5 d; v- A' [4 y5 t- o2 i+ I! P+ V3 C( ^7 r9 i7 ~
        pbegin=str;1 l. e! D# e1 U
        while (*pbegin==' '). j' b- X7 O" e, `
                pbegin++;* `- h1 ~9 H1 K6 d+ C& e
& `3 V  k/ j; h4 D1 M3 H
        p=line;2 f3 ^6 a/ j1 C4 l% B6 X
        while (*p=*pbegin){5 e& o  g' Z: L( b5 o. N
                if ((*p==' ')&&(*(p-1)!=' '))- B+ Q2 H) U6 d# \, A; m
                        pend=p;% T  g2 ~6 i4 |' |/ a6 Q
                p++;pbegin++;        ; l6 T' P/ q; p) H5 L
        }
# ?0 F# o3 h- A- s6 ~6 O2 \        if (*(p-1)!=' ') pend=p;" S, E6 ^3 Z3 ^+ M& f) R$ E. r
        *pend=0;7 Z% D9 c. ?' b  {$ [4 Y
        return line;
  ^5 h( \+ d  g} $ U( b( h+ `  W( f, Y" O; V% Q6 y

/ P; n* o" C; H
( [4 \. @5 w3 E; b) o- y( x//获得网页信息 - 网页信息是中文会乱码 用英文信息
- O2 D. z  W, T; p- d, L& Wvoid 获得网页内容判断外挂更新(const char *Url,char *html);
5 ?. U- g- g  W9 R' K7 k6 a' X! t2 ?" Gvoid 获得网页内容判断外挂更新(const char *Url,char *html)
+ a: }/ B& l( J0 L  i{
6 k& b) y. @  K: e1 G' ?9 g' H2 s        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);, N; V( ~2 A( ^; k8 ?3 h. S
        if (hSession != NULL)
) M% P# n. x; ^8 s( A1 h        {8 N0 m6 o' M6 v, z
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);5 W% r2 x+ i/ ?( w; T1 N0 q
                if (hURL != NULL)+ K1 C4 `" f& m$ U' r" ^
                {7 b- @) o0 \) `6 d

1 J: }* X5 A/ T8 s) M% G3 w+ e                        char Temp[MAXBLOCKSIZE] = {0};
. ^- {( w2 ]$ u6 ?0 i                        ULONG Number = 1;
' g' x' Q) J% V' W% P$ A/ u                                while (Number > 0)! v% E  W/ b: B  _4 b
                                {
/ k, W) b* ?- ~' Q1 n0 `                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);; a' a4 y: {3 ~; R1 Y
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
5 c5 C) U, |; G3 l                                        int a=strlen(Temp);
# a" v! C8 E# \) A                                        int b=strlen(判断版本);   
" p1 d1 G  a; p! L) L3 N! q                                        if (a>b)
* M* n7 M' s6 G1 Y                                        {4 {& _( J7 B6 |9 @6 M2 i
                                                char *p=strstr(Temp,判断版本);$ r. n9 G' Y9 F& S5 x* R
                                                if(NULL != p)
  `& `$ N2 B  j1 ?+ f: D* p/ I( X; S                                                {         
% j/ S7 D5 j. ?7 z( B4 E6 D                                                  int wz=a-strlen(p)+1+b;//版本号起始位置  }6 a9 p9 y2 @$ V9 X) T4 E- p
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
( t. P5 A, b. T& \                                          char s1[132]="";7 B- L  W2 v3 P$ J7 s1 R) r& H4 ~( I
                                              strncpy(s1,Temp+wz,wz2);
( m, p: v1 z3 |4 Z+ t( h! ]/ J                                                  char *p2=strstr(s1,"MEILEI");
/ C8 q* Y$ i6 d5 R                                                  if(NULL != p2)
2 i$ [( W' D4 m7 ?6 v, S5 a                                                  {  . `" r; d" m8 U6 `( h" ]4 s$ W
                                                          wz2= strlen(s1)-strlen(p2);: E0 @( d4 \9 w' p  O9 ^  D
                                              char 最新版本[132]="";5 L- u9 ]: D3 [6 R; W
                                                  strncpy(最新版本,Temp+wz,wz2);
/ g7 L0 G& n4 i* s                                                      if (strcmp( 外挂版本,最新版本)==0)/ F/ K! x5 v6 N& i$ |: ^
                                                      {
  }! v1 E+ j3 Y5 q                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );; g! M3 z6 {$ L2 \5 X' d1 ~  \
                                                      }
" H) v# T- r9 ^# W$ h* P+ ?                                                      else
4 N9 z' }7 D8 Q1 L7 b+ J                                                      {
" ]7 t6 s; X; ?9 R' b: _- O                                                            char msg[256];
" a; K! ]9 J+ X6 q" O                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);$ m; [" t; S" G- B
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
% r* z: |+ Y8 f; D) [- s. W  m, V                                                      }
! O$ o% L% B0 W                                                   }1 n/ T' D9 ~. @; z
                                                  goto LH;1 u3 K; h6 \! c. ~2 H; z4 k
                                                }
1 t4 B& F# i1 _' U3 j                                        }1 O2 s1 x  Q9 w2 K4 H9 D

* n6 \% x* Z- v3 c                                }7 m  m7 {; u* n4 Y0 p& T( o& F
                                LH:;  s$ b+ j, C& Z* S8 h
                        InternetCloseHandle(hURL);
/ Z/ s9 R* q/ E. X+ [% z                        hURL = NULL;
+ s) e) B0 i) z' V7 f3 U/ h                }! X7 v+ E& s+ Z* O9 O+ v

+ O& [* d( o- c1 _. e. I# I9 k0 v                InternetCloseHandle(hSession);' g! {: k; T; B( b
                hSession = NULL;
+ E" j# T# F% |        }
3 G. ?' _( e- O, k' f8 y! U9 C}
- r9 g* T) [# c! C# Y" W% q' Q! T: k

, N, B  _( p' f0 b0 j9 M//----------------------------------------------------------------------------
9 j) h( @! w% Y6 q//  Activation Methods
) |  I8 c$ Q" y2 _  \* J) U//----------------------------------------------------------------------------* V! l& E1 k" n$ s% [: I' W

& @& l4 j+ d4 @+ w8 b7 U//  Unigraphics Startup5 z1 h) f  l7 }, p' J
//      This entry point activates the application at Unigraphics startup0 z; w7 d9 c- d4 Z% o0 B1 f9 ?: n
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )! Z; Q5 U; {1 [0 \; p, f9 U& {
{9 n) j- v$ ^- P; y
    /* Initialize the API environment */2 n* d8 p4 L3 ]% [
    int errorCode = UF_initialize();: k3 `2 k( |, L

6 _6 J# ]9 k4 Y2 o/ T; A+ u0 _    if ( 0 == errorCode )
( r: A: P$ q" G4 [' A7 z    {6 ^7 D* T: G, j, d2 E
        /* TODO: Add your application code here */
, T# H: N- m0 Y! @1 W. @! [1 p# \: M
) V( V5 K( y0 I9 e' `% ]
. i/ c6 c% v# m" J) C  R- Q* C; P                //百度云公开链接 通过修改txt文件标题
" A# {: k7 I/ e  {                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt: ?( Y/ M' R8 H3 m

$ `+ M7 Z- W% R$ i+ q/ Q4 [0 V1 _) G+ T& `0 }
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  ; G9 U4 H( m! }/ E" S3 J# D: ]: v( A
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 1 J" h+ m, G6 R! @, W  g3 [7 \- [+ m
               
- v% S2 d3 j8 u. }        
" k; T2 v2 W( V) K: f6 \+ J4 y
" S& V# I. H0 k& S* y% N) ?( D! h' p6 X4 ~
# Q) u5 v! @+ b1 B# ~  z* |" X7 C
        /* Terminate the API environment */4 @: p9 N! w2 J8 B: p2 g
        errorCode = UF_terminate();
1 ^. X. _% q- K3 b5 k  b: l  {    }' X" t9 B) a  M; `- |' v( N/ M& _

+ Z0 \& F' Q9 O1 E5 H( o* ~    /* Print out any error messages */
/ n1 @6 Y5 j% P7 |: a- zreturn;5 {+ s% S( X2 X
}
! O# A+ V% J5 t2 M* t7 }
5 l9 ~9 I) M: k' T3 [+ H1 H//----------------------------------------------------------------------------0 {; N4 ?/ l9 P+ E/ n: l2 ~
//  Utilities
+ e3 H: M$ Q) o1 X//----------------------------------------------------------------------------
" U( U0 p: o3 G3 ]7 W
( ^" O& [  Z# N3 H* c7 D; j4 R& i// Unload Handler
2 H0 n/ X7 m' {//     This function specifies when to unload your application from Unigraphics.
, G2 m! m$ c; ]8 u//     If your application registers a callback (from a MenuScript item or a: }- R3 R7 p" _! _: F- k
//     User Defined Object for example), this function MUST return# i; T( u6 q, g3 }
//     "UF_UNLOAD_UG_TERMINATE".
9 C* T4 G( d- \) Iextern "C" int ufusr_ask_unload( void )7 f: s/ ?5 {: v1 \; \
{7 B* w8 t) a  K  U4 C
    return( UF_UNLOAD_UG_TERMINATE );
9 O# j0 s8 p) s- I}/ Z" v$ Q6 m5 t; F
, ^+ f8 q. N! S" l7 w$ _
( o& [; N! r: O. B- t0 j' k
启动UG就启动dll的方法; U# G0 R- w! x% @, t3 `

- o1 `0 {0 C: i9 R) I8 C方法1.添加环境变量3 `; M: c0 r# G
USER_STARTUP=D:\MEILEI.DLL
+ A2 d4 T: F. U5 v+ a但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了# G' y- Y* ]9 P6 r3 T5 g1 f

5 m  y4 x4 o1 s8 v2 B( B' q+ o- r方法2.在代码里添加(可以执行n个dll)
+ o. q" Y2 G2 M/ @4 YUG会自动加载 startup目录里入口点是ufsta的dll. u9 B# ]. e: v4 d, y
1 h. M5 E8 }& o. u0 g9 L0 [
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令# r1 c, I  z' B/ A$ ^
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
) K* c0 q4 a1 ]) Q% `4 o6 c6 M. f! q" l9 j* L0 r2 G4 T
菜单参考  NXOpen_meilei.men.txt9 R3 d7 {+ j& n$ L4 X( Q

5 Z# m6 t/ o4 J+ w. rDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
+ h9 X. |3 A2 M% n, |9 I启动UG就启动dll的方法源代码下载2 y* Q* z! H# ]( l3 J0 j5 x
启动UG就启动dll的方法.rar (3.3 KB, 下载次数: 19)

评分

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

查看全部评分

回复

使用道具 举报

该用户从未签到

0

主题

27

帖子

173

积分

PLM之家NX VIP

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

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

本版积分规则



<

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

GMT+8, 2017-12-11 14:04 , Processed in 0.152336 second(s), 36 queries .

Powered by PLM之家科技! X3.2

© 2001-2013 PLMHome Inc.

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