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

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

查看: 1013|回复: 1

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

  [复制链接]

该用户从未签到

9

主题

33

帖子

159

积分

注册会员

Rank: 2

积分
159
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式
本帖最后由 15757753770 于 2016-12-11 15:51 编辑   p: A' }: v0 Y6 X$ r

. [3 i7 \( H& b0 ^, I+ n: _如果你想每次运行UG 判断 ug外挂是否更新8 F% d' ~+ O. L% @
+ G7 D5 q8 ?0 ~& M0 V9 O
6 L! d+ `- j7 t# {$ X! g
原理:# [" g+ ~! Z+ u4 J. u' O
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
. L6 U: L5 y0 E( W' R然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
, s  F# O: @2 u3 ?5 u. ?2 g" x8 w: k) I( s  }: A

" @5 M7 n% Z$ A. c' q- k1 G5 V被启动的dll程序源代码,如下( {+ R4 Q: ]  ^5 \4 v

5 p9 @6 \$ X; |4 U  D2 H" s//  Include files) I0 W. ~1 X! p1 @8 z$ y0 x
#include <uf.h>, {1 Q2 z8 D$ q
#include <uf_exit.h>
, [% Z7 a9 @2 a& c#include <uf_ui.h>
) H# [+ i2 R6 [) A#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )3 \. Y: k8 S2 s
#        include <strstream>, W4 p9 u& E$ e+ S7 V+ Z
#   include <iostream>6 o5 z; g% y" D3 F7 {2 }- U
        using std:strstream;
3 R. S1 a* Z: k        using std::endl;        
! N, ~; w" N. X2 r! `  K9 l" j        using std::ends;0 }, {0 V1 k, T6 Z+ E5 a
        using std::cerr;0 i! V' L1 }+ n
#else
" }6 O+ J( j* }#        include <strstream.h>- w0 M- {" r$ T. [7 c( G
#   include <iostream.h>
; \2 t" F* d* k+ x+ e#endif: Y) O2 v! B6 x2 U0 y0 t2 ^
#include <string.h>6 |7 ^- `; N9 `3 A: {
#include <afx.h>) K9 p& C8 @$ x6 z  |
#include <windows.h>9 b3 t0 H; ?/ ~$ f! G& \8 H; _% s1 Z
#define MAXBLOCKSIZE 1024
* N( z( s+ M# w' d5 p3 ?) w: o#include <wininet.h> //网络9 d# H4 Q  r! i3 A
#pragma comment(lib, "wininet.lib")//网络
( ]- }# B& |9 @7 {/ C  L& M# K& B5 C5 _' P* i. r  S
char 外挂版本[132]="V2.8F";" X( k. T7 g* g* d$ t
9 T$ x2 |- V5 ]3 M, J

! L* G; U+ d2 _# r3 x4 T; v& r, cwchar_t* CharToWchar(const char* c)   //char*转wchar_t# T3 n7 P( }9 W3 A' v# K5 f. g6 y# P
{  5 W6 K: g! K, j* m$ _) I. L: G8 K( }; n
   wchar_t *m_wchar;
7 q% i5 u6 K* ?& I& V; H6 Z    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
# \7 i/ Z4 z- o1 V    m_wchar=new wchar_t[len+1];  
# ^; N2 n% [3 E* _% B% y    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
$ g4 m6 S2 N. K! {4 s    m_wchar[len]='\0';  2 S0 L- z9 U0 M! E, C
    return m_wchar;  
6 f; P, U' F; k5 ~}  8 K7 n" g, ]2 ]) O) J0 n3 L2 n" c! ~
8 J, M* o% Y9 V3 D0 z0 ^
//TCHAR 转 char
( w! Z$ i  V3 j& `. o) Jchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
  i6 F9 r" P- j* y/ x$ r{  
, ~; R8 u$ _% G  s7 @: V0 g8 W    LPSTR pszOut = NULL;  
2 w+ t' B7 h6 H' o, f    if (lpwszStrIn != NULL)  
) G; Y2 b: w: C( [. n: q    {  % T% h) O4 s( J- K1 j
        int nInputStrLen = wcslen (lpwszStrIn);  
1 {  Y2 N9 V8 O4 X8 F: {% ^; w  @8 d
        // Double NULL Termination  , s' O" E2 Q% s* Q2 y
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
% @' ]0 v& R) _        pszOut = new char [nOutputStrLen];  ! O$ I/ P* F1 w( v! T) k8 f& ]) U, ~' M
  A3 T+ y% `: \0 t6 Y
        if (pszOut)  8 ?/ p1 o& Z! |3 y
        {  + I% \& \/ `/ l: k
            memset (pszOut, 0x00, nOutputStrLen);  
/ T5 J; Q2 c, l8 p3 u8 b. ?, G8 W! M            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  7 I' b6 m" b$ r# h
        }  . }6 y. V& @* N. l) K
    }  
8 X. E# Z0 q) j  L+ _: c( T    return pszOut;  2 Z% [! `2 C* a+ ?: C6 H; }2 E
}  1 @" Z9 k5 r% g! c4 W% y( v

" A( z' n6 l' l( m1 C1 ~
$ {9 T0 S. N1 U6 i( O& L  r//CString转char
: `( y5 \# T2 q" o) v2 Qvoid CString2Char(CString str, char ch[])
8 k  X& \6 p1 n1 g+ H1 x/ ~{
0 M2 g% T0 u0 ~# J0 O        int i;( P, {- `+ R9 x' P+ p
        char *tmpch;3 e, p. r$ C% p0 s) ?
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
6 \# [- z' M$ r& A        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
6 U8 M" q% g# G, I& p  B" B& b        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
+ [' _' s3 z' ]/ A. \5 V4 p2 h! |! F5 \
  t+ u/ {% D& W" H- O) s        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
& r& S2 X7 _2 P% O/ R' B        ch = '\0';$ \7 ]; s! k3 B
}
: x# P. |) w' D7 s* |9 N
) M3 m+ s( l) m  c2 y1 s8 Q1 h
6 T. i- W; N5 |7 R$ u6 bchar *去掉char首尾空格(const char *str)3 }9 l+ l, C  l4 v1 v" r, H
{
1 o# x, ^0 {9 S7 C. [        static char line[133];1 p/ ~# {) r; i  g: g
        const char *pbegin;4 v- x8 u6 i/ J2 c5 D. G& t0 T
        char *p,*pend;; s% A* O; B8 o4 U; b9 P, ^/ T) n
        int i;: N3 `  ~9 ?- t3 d+ t! {/ x( Y

) l! @( }5 J3 k/ \% g+ t        pbegin=str;. I  m8 E& b3 [; S$ |
        while (*pbegin==' ')  f0 j! S( U1 M) |
                pbegin++;/ e0 m  T8 x6 @7 c7 @( v& p# M
# l/ a; N! ?0 R" `9 Z; W9 c5 `2 M6 I1 R
        p=line;: L0 m, @& z+ s4 P
        while (*p=*pbegin){2 O3 W8 m  B: P4 T* M( A
                if ((*p==' ')&&(*(p-1)!=' '))
1 x' o% \6 C8 [+ `* J                        pend=p;) H4 j5 H2 [$ M3 i4 m& }8 @
                p++;pbegin++;        , ]2 z. a! A  ^5 d/ E
        }
& Q0 f, N$ z/ W5 a. B1 }; y        if (*(p-1)!=' ') pend=p;0 ?! t; d4 e3 J1 L. m
        *pend=0;
: P% K9 R+ u5 m        return line;
$ G# e$ {  S; q. M1 j9 S}
2 t) K& o# i/ w, ]7 {+ U" _& w7 {0 J4 e' b
8 X) `4 y7 V, X  c' d+ d; H
//获得网页信息 - 网页信息是中文会乱码 用英文信息
7 {3 Q+ V! G/ T' F1 ?, Fvoid 获得网页内容判断外挂更新(const char *Url,char *html);# k( Z! _; ]" N& S  K% ]: a% e' X1 H
void 获得网页内容判断外挂更新(const char *Url,char *html)
  r, i: D8 u, @{
. ^8 q$ J5 v' h7 d        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);' ?4 U5 Y9 q" Z8 n3 s
        if (hSession != NULL)
& H( }( ]6 V: |3 {& ]; y- A; }        {
- L  v; v8 L6 n# o* a3 S                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
$ q$ D2 Z% L& g( ~                if (hURL != NULL)
# I9 l* S" g4 V3 G3 k0 x- {" m                {0 q, o3 Y+ b: Z

5 |; F: ?7 {' L. x                        char Temp[MAXBLOCKSIZE] = {0};
; _$ C6 Y( a- }: }  p7 x# I* G                        ULONG Number = 1;/ n  o: `- n( |+ H" c
                                while (Number > 0)
+ {. _$ V2 C- X, r                                {2 `7 \/ P" V" p1 F9 V. `. y
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
* j  B5 B9 \7 C                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
  c: Z" s' y% H                                        int a=strlen(Temp);7 N: e" f& z, T( Q( S  V6 |
                                        int b=strlen(判断版本);   
! O, R' U+ p0 d+ s5 d' x4 ]; ~; p9 a                                        if (a>b)
' y+ m/ |9 Y' j+ J* [* w8 @3 L2 W                                        {
! K" |! \, O; \# l# R& @                                                char *p=strstr(Temp,判断版本);
& l  S' V4 v9 K  \6 T9 V4 j4 Q" p' ]4 @                                                if(NULL != p)
& \0 u# E; m4 G& B3 }% T% e' K                                                {          # r" y; m+ u/ M
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
, B" t7 K) \, E8 y$ e# _3 Q" B                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
" i# i  P( w; P6 J                                          char s1[132]="";( s: Q- F* e- j4 B
                                              strncpy(s1,Temp+wz,wz2);
% S+ p- P4 z4 g# V) L1 d                                                  char *p2=strstr(s1,"MEILEI");
  q/ x) J! @: h4 x) o( F                                                  if(NULL != p2); k" U, i) w6 P( k# m, H2 O
                                                  {  + b4 q/ F4 A% O' X$ h# v7 U/ X
                                                          wz2= strlen(s1)-strlen(p2);8 ]) E0 o# k) z% [/ U
                                              char 最新版本[132]="";; n7 P7 {" e. J" ]
                                                  strncpy(最新版本,Temp+wz,wz2);! v/ T8 ]( y( X$ I2 f& q% q! J
                                                      if (strcmp( 外挂版本,最新版本)==0)
! C5 f& x+ G+ A* [                                                      {
. A% P1 k( K  V3 X  U- J/ C3 t                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );  i: A1 T  h4 j: }% ]( S
                                                      }9 n4 l- r) ^  Q8 o" E0 E
                                                      else# `9 y) o2 {. d7 j6 i1 a9 O! l
                                                      {
7 ?4 {- l' x+ R: d                                                            char msg[256];
, i4 B) ?- q2 f* {% E- J, V$ F                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
) P7 [6 O! @9 d# b: J) D! ~                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );, \* }2 T% f0 k8 n) O; M
                                                      }
$ a& n3 n4 r$ z- K( m                                                   }- u: B0 m: G9 a; _- E# o- ~7 a
                                                  goto LH;6 i2 N1 N0 m# G
                                                }
7 \, c. w7 ~9 z& f# K  s7 ~                                        }% ]( b( a' J& N- x$ U

7 `; I& T& n$ P) ?                                }
2 J. x! U% x! N% ~, h                                LH:;( t0 e1 O$ R" v3 c3 [
                        InternetCloseHandle(hURL);
1 L$ T$ I" O6 C4 m                        hURL = NULL;
* k# t* E$ W, C( Y9 r; X                }
8 n# T* e, a0 t7 ]2 b/ F8 Y( o; o+ X. \2 u0 {" d0 z8 F
                InternetCloseHandle(hSession);
6 e; U% ~6 y6 g2 z5 V- [6 z                hSession = NULL;8 F1 r+ G) `% B2 A* d) y2 ?8 O
        }. v# i  r/ b5 l
}, ~" W& ~; [* _+ |" W  {

; L/ I& t9 i6 Z- n* q
4 ^  y( j2 K' {. I% t5 R6 E//----------------------------------------------------------------------------
! s8 N+ z" s) y! G//  Activation Methods
( T9 e; ~4 I7 A! |5 m, i//----------------------------------------------------------------------------4 x: w( O  H6 r& r1 e  ?: q

. G3 z3 A( ]6 A  B, y) P, l- r//  Unigraphics Startup
" S# R0 Z9 g7 v* O% U2 t# v//      This entry point activates the application at Unigraphics startup2 \. q+ i% s; \$ n/ q/ B: L. ]
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
- T/ g) ]( B: Q6 i' V  k{% s+ L* u, p; T9 s
    /* Initialize the API environment */. p' _0 B% X* h( m( z
    int errorCode = UF_initialize();
5 U$ ]7 @- |3 e! N3 |: P
6 X2 G2 w! T2 w; o9 g    if ( 0 == errorCode )
8 y, l* B3 X" [8 y3 r* q% h- E    {: f2 k( T# M6 p8 ^  M
        /* TODO: Add your application code here */
; y, v, k  n* |& B: `$ E* n% V8 B6 _7 V" l# D- i  y2 Q  N
' ?. J- e) Z/ A# |. n3 L; q
                //百度云公开链接 通过修改txt文件标题
6 y' N# \- `, l- W                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
1 o- y: D7 D8 u6 l' n
% ]3 q4 k; j* W5 G6 p3 ^
" q" Y" e) ?1 M4 W                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
& F0 ]- ?. V5 @' K5 u                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 8 i* T8 N) i1 I8 K- u6 E% F8 V5 N
               
* g7 H1 j4 y" ^3 T) q% G, G' B        
7 O* h6 A; N3 \7 ^8 }! K0 r8 z8 Y% y3 f: |; M8 C. I

4 J: A  S7 ?( C, }  w
9 h& W8 ^" v# F# Q2 c0 w        /* Terminate the API environment */$ S3 H/ y4 @! s6 Q( l
        errorCode = UF_terminate();
3 Z: P$ J  S5 b6 g8 C    }
0 g6 B1 J. k5 r9 {, Y& M3 Q6 B9 `4 \) l$ e
    /* Print out any error messages */: [3 A+ F8 T% t
return;
. A/ q1 |: n4 v+ I' q1 F0 h* j}6 l, G" C1 l  y, y! w, }- O
2 c9 M5 O! K! r3 J% i
//----------------------------------------------------------------------------; N& B/ Y+ c9 x+ T( f8 Z! q9 T5 {
//  Utilities) ?, c1 O1 [5 F+ D( X+ `0 h+ z8 B
//----------------------------------------------------------------------------
. ^1 u9 Y/ Z/ \- d' u8 V! r7 S" u0 \8 T4 x' m( j
// Unload Handler; `; k+ l3 n3 {1 `
//     This function specifies when to unload your application from Unigraphics., e/ g- I7 V4 g# I6 q/ K2 |
//     If your application registers a callback (from a MenuScript item or a
2 {4 T3 F# t) V- U//     User Defined Object for example), this function MUST return
( L: i' K* C( y) e6 [( r//     "UF_UNLOAD_UG_TERMINATE".
3 A  D- I5 a' t. [4 B: p( V! bextern "C" int ufusr_ask_unload( void )
% O6 D" m& k- k7 z9 g+ q2 I{; q! C& g6 ~+ j9 M
    return( UF_UNLOAD_UG_TERMINATE );
- }* Z/ N- r, c% {}. v+ b9 b9 R/ a7 ]
. d: n% i+ L4 X0 s
0 u: o! z, m. \) p% B; F
启动UG就启动dll的方法
9 C: F4 ]; J( M1 V$ \' t- I7 w7 ~. }9 A% @/ G( y/ j5 F
方法1.添加环境变量( {  E9 w! {2 x1 J. A
USER_STARTUP=D:\MEILEI.DLL
! w: J! V* U# Y( q' Y" ?* u. J6 w$ u/ U但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
5 T6 i1 u0 Y, f2 P! H: ]6 I, y
5 `7 K$ A, w- }9 C$ L4 v方法2.在代码里添加(可以执行n个dll)
: o; x8 T6 Z7 F% y# {1 P# T! IUG会自动加载 startup目录里入口点是ufsta的dll
! v( U+ ~& n6 N1 l$ c# D4 `$ m% k( P. }9 ]% n
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令7 r. B: }6 _" }
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了  G( i! C" c) c# A

" e  \3 H; p# u$ k$ _: |菜单参考  NXOpen_meilei.men.txt- t2 @; S3 Z6 N' o) _

. A: e; _2 l* E, ?: T5 IDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录, f& ~. h( G  J+ z
启动UG就启动dll的方法源代码下载
% j- x* [" J6 u6 t 启动UG就启动dll的方法.rar (3.3 KB, 下载次数: 18)

评分

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

查看全部评分

回复

使用道具 举报

该用户从未签到

0

主题

25

帖子

147

积分

PLM之家NX VIP

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

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

本版积分规则

关闭

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

<

QQ|小黑屋|手机版|Archiver|PLM之家-NX|Catia|Teamcenter|Tecnomatix数字化软件学习网 ( 沪ICP备13003373-3

GMT+8, 2017-6-24 16:49 , Processed in 0.242384 second(s), 37 queries .

Powered by PLM之家科技! X3.2

© 2001-2013 PLMHome Inc.

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