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

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

查看: 1290|回复: 1

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

  [复制链接]

该用户从未签到

9

主题

33

帖子

159

积分

注册会员

Rank: 2

积分
159
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
" F- P; ]/ _5 w+ Y: u* p, `6 A
* V" @# [1 }! j" i如果你想每次运行UG 判断 ug外挂是否更新
/ P! d( j2 x( F9 i
* [1 Z; A3 k$ E2 q8 d+ J  b4 P0 G8 ?3 B5 t! }5 B  [
原理:
$ t0 c1 S# e- n, Z* |: |2 {7 Q自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了7 {& E$ u+ Y+ g. `
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断3 X1 J7 F) B4 v! z
8 h6 k4 C( S7 s* S; Q+ {2 G

' H! F+ ?- k% T$ s被启动的dll程序源代码,如下
( P9 X% J. j5 _( ?: ]7 x. l2 Y$ b) K9 R, z1 P1 E# y3 H: N6 s
//  Include files. d; s' H! S' k- A* J
#include <uf.h>9 o+ N6 [7 g( ^4 |7 U/ _
#include <uf_exit.h>: u) y. }6 y7 k+ b8 H0 ?3 Y' u3 h. M
#include <uf_ui.h>
2 d3 c8 D8 G5 k0 w' u#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )+ ?0 A& Z% D$ y3 k
#        include <strstream>3 W/ W: ?" E. K
#   include <iostream>
. n3 ^9 s! l/ d        using std:strstream;+ W5 _5 M3 X' p; J
        using std::endl;        & y, ], @3 H& Z
        using std::ends;7 k, X8 v% T* F0 X' N# b
        using std::cerr;
  Y6 D! {, C# h) X# i- m#else
# j1 E+ T( X7 n& F4 k& i$ U% {4 M( D#        include <strstream.h>: F6 J8 u" {# j1 ]5 E' S
#   include <iostream.h>/ L+ {9 c& L) d0 S) ?
#endif& i1 i% ]8 x2 m9 s3 B: b9 x
#include <string.h>$ A8 r5 n7 i* ?; s
#include <afx.h>
" y- u% M) x/ L' ?6 ]$ p#include <windows.h>- Z8 C0 S! [( ?5 j/ z% H' }
#define MAXBLOCKSIZE 1024
# Y- Y/ K3 ~. @#include <wininet.h> //网络
2 A  A0 m- C% t#pragma comment(lib, "wininet.lib")//网络
/ N. Y2 }% z* R+ P* Q0 r3 s* q; I3 e6 |5 W1 l
char 外挂版本[132]="V2.8F";
8 ]0 D/ b- e! j# n1 q: u$ p% n, m4 @4 |% G7 u! b. S) V, n5 E

: `, W  r* n  F4 \wchar_t* CharToWchar(const char* c)   //char*转wchar_t
! ~# C' s  S, Q& Z{  & \$ f) B+ h. w$ Q# B8 @
   wchar_t *m_wchar;
; A" C4 [% ]/ H0 k7 i" \  v    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  + Y: K* }1 N" X( d+ Q
    m_wchar=new wchar_t[len+1];  
4 V! M* B/ C( J7 `& d    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  + G! n& u- c' x2 x! P1 _
    m_wchar[len]='\0';  ( s. E& T8 c* p+ I$ b1 N5 r$ Z
    return m_wchar;  
7 N  @6 E# L% n  [/ G! _}  
5 o( F  U: K7 j1 `9 o; l/ C$ Z' h( o$ y
//TCHAR 转 char- i( k/ X0 |  ?6 _& C2 t! E
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  , Z4 D3 o# l7 k
{  
* _$ l! u) q* Y    LPSTR pszOut = NULL;  
) h& N; B* o: Q; U/ S& ~# G    if (lpwszStrIn != NULL)  
3 ]3 L4 B+ \2 V% W    {  
8 p1 _  h5 R8 d0 \        int nInputStrLen = wcslen (lpwszStrIn);  
6 s% m2 S  o* p, }- N
5 x8 Q$ z6 b9 ?- B# N7 I% t  |4 e        // Double NULL Termination  
8 U5 {4 ~/ b) d, p6 {6 y, E        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  " O" ?  y+ s7 j& z0 ~7 j
        pszOut = new char [nOutputStrLen];  
. n  ]3 |0 d& |7 B- B( C6 Y
( c* t4 n, m; U. b& B3 V        if (pszOut)  + p, F  W, M9 v* V
        {  
9 k8 _4 H7 _9 w6 e- [6 B            memset (pszOut, 0x00, nOutputStrLen);  
) u) T; i' o2 k; N& h$ ?/ K            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  + I' O- J6 T) _5 e: k8 H
        }  
/ L3 [/ e' {* R/ M# ~' u$ n9 k% h% N    }  
" A4 q- E, y+ M- D1 w1 f    return pszOut;  4 |2 Q8 P8 `6 W1 v8 X
}  ! x- D, U. s$ r1 K$ f2 j, j. p- @
# A/ ?5 d2 k/ Q5 M3 e
% s; U0 \+ u- ?0 z! Q: z+ [* U4 F/ u
//CString转char- Q: P4 j8 B2 m/ ~8 U% N' W/ h
void CString2Char(CString str, char ch[]): a7 S& t6 W8 L4 P+ q' y5 l
{) w- W2 o1 q  Q$ q. C
        int i;% {( h! }& @4 m# M. o2 \" A
        char *tmpch;
1 f  d( v% Z0 Q  s, h0 {9 B        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度8 l" M5 V, t. \- c5 _0 T. E
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
  l3 K3 {1 v9 z: t+ C9 @) [        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
  O2 ^+ A5 [  w8 O! L# M
: C' M3 j$ R; ]/ ?( ?& Q        for(i = 0; tmpch != '\0'; i++) ch = tmpch;% ^  u/ q; X* T8 Q
        ch = '\0';
  I  D3 e' M7 e% e/ \/ @2 s}3 A* n. u5 n  t/ y  N7 [, r2 B! H( P

  I8 V. `* O4 ?# j2 v6 @- y# _2 D, R
char *去掉char首尾空格(const char *str)
6 o% P, i: [- y9 V! e# c{3 q, k& E$ `9 |3 a* m
        static char line[133];
1 Y; s6 [. z2 I9 l. v7 N5 X) D        const char *pbegin;
& z9 O) l$ n; U9 x" Y7 [: k$ |% {        char *p,*pend;1 O- M$ u0 R: z5 t2 c
        int i;# i+ a4 U# r. m# F$ W( F! H

0 r6 j, V) I6 C4 `- i+ V( v        pbegin=str;
: G$ g6 h8 ?# I  n1 I        while (*pbegin==' ')+ ~8 |4 }  e' D4 @; _: J
                pbegin++;
4 _% ?3 n: T1 g( h3 p5 H& g( L2 `8 D- K/ K' Y0 c/ K
        p=line;
4 _  k) U; a( A/ _  p0 T5 I( y        while (*p=*pbegin){
2 r# D0 P# a- o! b, m( j                if ((*p==' ')&&(*(p-1)!=' '))
+ N- R4 E3 U" L. m: W8 C# f                        pend=p;
  S/ W) K8 H7 s0 O! h* ]                p++;pbegin++;        
+ P+ A6 Q9 P1 x3 l8 j/ u, R        }
* L2 C( Y2 @+ N% N- B* A4 Q        if (*(p-1)!=' ') pend=p;
  s' B4 Y" w' X4 ^- B! ~  d, ~; F! m        *pend=0;8 z" D1 ^3 T3 Y
        return line;# P0 d' ?( z5 {( r+ ~3 a. Y% ~: R
} 9 @+ Y- d6 M5 i5 N
/ j4 U& `2 U/ q9 G7 k
. I* Y9 D* |; G3 o* E$ K
//获得网页信息 - 网页信息是中文会乱码 用英文信息# f  d/ u8 w7 k' w* m
void 获得网页内容判断外挂更新(const char *Url,char *html);
. P  L& o5 P! s; K' ~9 cvoid 获得网页内容判断外挂更新(const char *Url,char *html)$ v0 h5 n2 e1 u% u4 E
{: L7 g" k! G  ?3 M' ~
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);( k! q, c9 q7 l
        if (hSession != NULL)
) W, B  N( C/ h8 ?( Q" T" a        {
7 z- |7 `: U! _6 y3 j                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);5 {3 S, e; t) M; H* F
                if (hURL != NULL)7 W% y' ~) D2 N  I' V% y
                {
$ U% Y2 e3 {3 M  o" l4 t
7 m4 R- i5 N) X3 y                        char Temp[MAXBLOCKSIZE] = {0};
. f6 C( y8 h2 `2 w8 O- g+ g( p                        ULONG Number = 1;3 [% p* p  W; z1 n' [
                                while (Number > 0); A- A+ l( Y5 d3 H8 X( V% k
                                {
' i8 J+ B: m" Y8 m                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
' n. r: h1 A8 @1 m$ l; D                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
) J- @: [! i, [                                        int a=strlen(Temp);9 N& i6 H: I- B6 K- D" F
                                        int b=strlen(判断版本);   7 J, x. Y7 x% A8 B/ s
                                        if (a>b)
/ K/ }2 T9 H) S/ X5 Y                                        {
+ q1 X/ M( o9 Q" h, s/ f9 M                                                char *p=strstr(Temp,判断版本);/ A9 i$ N0 R4 F8 U: ?. h
                                                if(NULL != p)
0 s# Q8 m; ^4 _* ~                                                {          1 z0 @0 W: x; ~/ G5 x, f6 {
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置$ j1 _% l- s6 n
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;% ]/ N8 j5 J5 b1 u2 q4 L
                                          char s1[132]="";$ \1 Y0 n5 j" Z% I1 X
                                              strncpy(s1,Temp+wz,wz2);
9 U4 D- x% U1 i" \0 j9 f. n+ g$ a3 V                                                  char *p2=strstr(s1,"MEILEI");
2 }  A+ o7 Y" e$ A0 A' \3 K                                                  if(NULL != p2)6 z" E* V3 b/ Y5 h- o) X, x
                                                  {  0 V6 p$ I- j! L7 C
                                                          wz2= strlen(s1)-strlen(p2);. L5 F/ B6 W% }! W# q; R; Y
                                              char 最新版本[132]="";
  v. X. f, Q+ t, x. Y) t- I                                                  strncpy(最新版本,Temp+wz,wz2);" y; R: k; F2 p# J7 k
                                                      if (strcmp( 外挂版本,最新版本)==0)
1 t7 s' z/ V8 \' N                                                      {
6 L/ T6 J* g/ G; U2 O. W' X                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );- X* [) ], h9 w
                                                      }
+ V& G  h/ }: y7 b+ t                                                      else+ c$ a3 c0 v2 C' @5 j. ]" `6 g
                                                      {
# P, h2 _" |" m1 o7 Y1 X                                                            char msg[256];- s7 |4 s9 |$ p2 X
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
6 Q& h" K8 |  W2 w% t9 n  G7 z                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
, |* ?2 G0 B+ \4 ?" c                                                      }
& Z! ~) V; d' k# H/ \                                                   }
; e+ k5 ^* S8 |9 l                                                  goto LH;. Y0 s: V( x7 I) q
                                                }. N) [& S- X, ~' D+ j  ]
                                        }
; C* y$ K( M2 Q" a/ m5 \
$ f# T; V/ T0 C. r  J! K/ }                                }
4 x$ b- g6 X: E# {! V                                LH:;; v( h* S4 u8 Q- n: f. f+ X
                        InternetCloseHandle(hURL);0 g8 U' W' v3 i, A: a5 C  e6 Y" T
                        hURL = NULL;2 e7 F) E# ^! }" x; w
                }
1 V! ]- o6 Q  x: ~, G/ `
' ]) D% _0 u8 W. Z% S, u0 {                InternetCloseHandle(hSession);
6 M4 u' ?" f2 V. l: P5 _( m                hSession = NULL;
/ L. S& B; R9 F' p% s: `6 m/ y        }
' i# z  A1 ]+ ?* l7 O# I) w$ O}
7 w+ s4 N5 K  P( l% x, p+ v' G' u( h6 k6 f  x
) {% X# c2 m6 G* _
//----------------------------------------------------------------------------; E4 X$ Z* u# q9 C8 [
//  Activation Methods+ ^" m2 B6 g. i2 A% n0 s9 E' |( I
//----------------------------------------------------------------------------
+ n( U7 R, u+ E( K/ c
. ]" e. J9 v) l% ^3 f3 J) O" I//  Unigraphics Startup
( U, L' Z' g2 h//      This entry point activates the application at Unigraphics startup
% N# y* h! }+ Q( yextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
& U6 N) o! e1 _+ ~% t{, C+ M, ^4 L# ?: t0 b
    /* Initialize the API environment */7 \) c- z+ T3 E' m; [/ ?
    int errorCode = UF_initialize();5 o. E- ]% N7 S, r8 P4 l2 ?( F+ d" @
; l* V$ f# Y. w0 c$ |; F1 j
    if ( 0 == errorCode ). b+ T# \$ l+ E- G
    {
& [: v; y2 [' N5 z        /* TODO: Add your application code here */2 A/ c3 ^6 J4 U; x8 ]
- |" P9 m; i3 d( ~  b  O

. {- Y3 ?  }  `8 l* r                //百度云公开链接 通过修改txt文件标题
5 |8 J& M- b* c                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
  Z3 J3 H$ D; d$ ]5 q+ A8 ]! g" F( u- h2 `. L  p% g; A

7 p+ y; }0 x9 H/ W. R                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
7 E) e* V8 A! `0 i* t                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
" J7 k) U4 r- b               
+ X+ K2 Y1 L: I7 T- |, ~* I        5 z+ G: c% n. A! d8 R  M
5 b" G0 M; j( Q9 y9 L5 ?% }
# B" r( L: z' m! `" v
# a2 n+ A% f- w
        /* Terminate the API environment */' J! C$ I, X. d! ~' \7 c
        errorCode = UF_terminate();: R' _+ D2 B! P' M4 N2 c3 J2 D+ y; v; {, _
    }
- k$ D2 f" |; {/ s* i2 w* ^9 K' E. Z: F& |* [5 u3 p
    /* Print out any error messages */9 Q9 c# E. X8 [
return;
/ B: P( N* a( l4 e, V9 w; k}& ^' T6 d; j$ ]- D2 z3 @
7 d. E8 Y, {1 }. Q7 e& d0 f  P. \
//----------------------------------------------------------------------------- Q# \0 B. T: K; h4 m+ U! J
//  Utilities; s8 @+ k+ }+ C3 [5 M" c
//----------------------------------------------------------------------------2 i# X  {5 {' A, H$ u5 G
3 Z( Z- B3 R# V' @8 _% W
// Unload Handler
9 P6 w4 ]3 H$ U4 F//     This function specifies when to unload your application from Unigraphics.% P- N9 A' ~3 ^4 T1 t& O6 v
//     If your application registers a callback (from a MenuScript item or a3 h2 a5 W5 }3 g
//     User Defined Object for example), this function MUST return- A) C/ A; l$ ~; A
//     "UF_UNLOAD_UG_TERMINATE".
# x+ @1 c' R& o* i- zextern "C" int ufusr_ask_unload( void )
( i2 M0 N& `9 i1 G5 Q& h. H{( T& C) t+ e0 I. u6 U9 s
    return( UF_UNLOAD_UG_TERMINATE );$ [  D6 L3 X" }1 {3 ?% X
}
8 r1 C4 F1 a: s6 S' D+ R
- u( R; o' {- s6 c2 M1 l& q' Q9 {; y/ ~$ z0 S; V
启动UG就启动dll的方法
3 i+ H- `& P; t/ {$ o  y2 P$ A* W9 y5 j: s' Q# {4 R1 x
方法1.添加环境变量' w0 d; F( r* I4 E: g( T7 Y
USER_STARTUP=D:\MEILEI.DLL, ?$ K( L6 Y+ j9 q# A) L% H
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了: J* F! V) f3 N( m' Y: U$ e

# L5 y9 B; z- V' p" c: O方法2.在代码里添加(可以执行n个dll)
3 I9 a. z3 k" [$ z# AUG会自动加载 startup目录里入口点是ufsta的dll4 Z3 H7 `6 C/ J7 f5 ~

3 @4 o1 V6 E+ Z3 l  W- Q所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令7 v( V, Q% A$ I
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
. P- P5 P. Y3 u$ t5 }; k. [+ v
, `, G" P; ?  n/ |( l菜单参考  NXOpen_meilei.men.txt& q/ }# m& K, K1 p; T( C( L$ ~

: e' u# ^9 j0 M( g/ Z( vDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录+ A3 f9 [' k' f% t% k
启动UG就启动dll的方法源代码下载6 q+ A2 F3 c: i. s4 }8 _! h3 D
启动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-8-18 22:39 , Processed in 0.156314 second(s), 37 queries .

Powered by PLM之家科技! X3.2

© 2001-2013 PLMHome Inc.

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