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

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

  [复制链接]

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

15757753770 发表于 2016-12-11 15:45:38 |阅读模式

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
$ t/ ]/ {# Z% E) W8 ~( x' m" K* z
* Y" }7 J/ A1 V0 L如果你想每次运行UG 判断 ug外挂是否更新& y9 m5 b7 ~/ h& _: b2 X/ @1 e

# b  i+ V7 l& Q$ n. c- ]7 g9 @
1 a4 {# @$ B' S3 F- A) {原理:* S* ]- C& g( k3 F3 e
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
( X4 c1 x  u0 \然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
& ^" G( \, i4 P( o- |4 @2 M: C
7 l/ p" v& t( Y) b# B5 g5 E' b
被启动的dll程序源代码,如下' m. _) ^& A! G3 c) ]" I

+ R- Z$ Q& h. [- F//  Include files8 S% p$ M3 L; g4 \6 M
#include <uf.h>- C$ u; V7 z' }) a& Q  X) R
#include <uf_exit.h>
4 U# j% e% G- m# z+ N! o" ^4 O5 ]8 m* }#include <uf_ui.h>
' f: z9 l" K9 f$ q  d( w5 z* j#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
* l4 ~" u% t5 d#        include <strstream>
/ _/ z9 q% p; L& J#   include <iostream>; j( Y7 U. }% @, |$ f% M" m5 d( P7 h
        using std:strstream;
% @9 Z6 y  F$ Q' c+ U1 n- `. ~        using std::endl;        / T3 [, c6 s5 Y5 Z
        using std::ends;
" n- o( T& \/ k1 C        using std::cerr;
: H9 B- f6 B8 N" c% D5 H1 E#else
' a& N# u) ]. F# C2 X0 m#        include <strstream.h>
3 l. k7 E6 ?/ P% f4 g) m#   include <iostream.h>
5 X$ }2 g9 L# f; r" N#endif  X4 m: x3 k* J4 w: V% Q
#include <string.h>( \+ P! W# y1 X. j' _% }# r& G& d8 f
#include <afx.h>
9 b1 B' ]. y8 @( Y* q#include <windows.h>7 q4 c6 ^0 p! L1 ]6 r4 d& _
#define MAXBLOCKSIZE 1024
$ E9 c  a6 l$ M9 v# M#include <wininet.h> //网络4 y9 v2 K3 G) ^
#pragma comment(lib, "wininet.lib")//网络6 ?, R% ~% z; m1 j: I
* j4 F, ?- F9 [& n/ k9 [7 w
char 外挂版本[132]="V2.8F";
$ z2 D* |, S- o7 F* N3 a& V& ]9 i: a

& ^9 x" U- }5 S, [# U, ]. s$ f9 vwchar_t* CharToWchar(const char* c)   //char*转wchar_t
+ V0 W# V* h# ^) H* r{  
  u- o0 |4 N* j( m. @. O8 P   wchar_t *m_wchar;
* Y: k5 ~9 y) `: Q, `9 u    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
' @- w" L  j/ ?- @    m_wchar=new wchar_t[len+1];  0 w$ d' y4 u$ l
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);    L3 d- \. u) i# d
    m_wchar[len]='\0';  
3 G! o$ c. ^/ T: z    return m_wchar;  2 `7 n; Z7 y* ?
}  
% f5 t  a! K: u2 V
2 O" \0 G. f1 p2 C( Y//TCHAR 转 char  D& [: E( E, Z! D
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  + ^" H- T7 I) T6 I
{  . g* m$ ~; I; _. I/ g
    LPSTR pszOut = NULL;  
, ?& w# Z! u1 @4 P6 g  C9 ]4 {6 f    if (lpwszStrIn != NULL)  
9 e+ \( t2 p) X0 e5 O; s    {  8 S2 m2 \4 P0 _
        int nInputStrLen = wcslen (lpwszStrIn);  9 A; }# _4 A) d! E% t# u
- r/ c8 f- F* u& g6 n
        // Double NULL Termination  
: T5 C& T; q  i        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  / ?; ~1 w2 y+ C, w1 {4 o8 ^
        pszOut = new char [nOutputStrLen];  
; w. h; A' T, A" Q8 J5 ~$ I: P: ]1 J! T+ [" R) q
        if (pszOut)  
! w+ J5 O% ^; L        {  2 N: _/ \6 Y, `( D" Z, v3 G
            memset (pszOut, 0x00, nOutputStrLen);  9 H( P4 x1 a, |, n1 ^% W
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
+ z8 ?' M7 X' x) s6 `        }  ) k. i1 }# k" C
    }    b( K4 G* L2 ?$ `
    return pszOut;    ~' {. P3 y$ i# @) A
}  0 X6 @( \3 p$ k2 p- }$ F3 i
8 Y3 V$ q+ D2 X( Y6 t, v- N; s

7 [5 D0 T8 w: h  a" U//CString转char
6 E& D. R3 X5 b3 V' N# V7 k0 Hvoid CString2Char(CString str, char ch[])
: q# I. a5 E# T; q" d( f{$ e# j' y  s: d2 z; X5 \' h1 w5 v
        int i;
4 S& D* K8 x3 P        char *tmpch;
% Y$ B0 T& U. c' s1 s        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
8 z0 e$ {  p) Z2 y. D0 g0 U        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
" o% C# p% E6 y  S/ d* B        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
3 b% G0 ?# H7 ~6 J# a4 Z# N: Y; v, x2 \% n
! N* k! q, V8 p, ?2 x+ W+ e        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
( p. Q9 V  |4 f  f        ch = '\0';; y, t$ D( H* w
}4 b/ G# m1 l, m0 P$ X+ K( d' l

  e5 T% N: U/ v* u
# G$ |2 a2 k0 I4 \+ J* {( d: gchar *去掉char首尾空格(const char *str)
8 W# o4 h7 _  g7 U* o% C, [7 S{
$ V+ P9 J- q( {( L+ j/ e4 \# Z        static char line[133];4 P7 J2 I+ k" J
        const char *pbegin;
1 s  g; A& X; ^: W/ [2 ]        char *p,*pend;. L, Z1 H1 ^* z6 y9 J- H
        int i;
" _4 t; E  d- t: ?/ p( C
& D4 S8 w! x& B/ F& i5 I        pbegin=str;( U1 y/ ~2 l  _2 K# X5 [2 h* Q
        while (*pbegin==' ')$ ]* Y: \+ z3 s9 e
                pbegin++;# p* a9 v: M. C: @+ b

7 w4 Q# g+ y" s        p=line;
; H7 X2 @- [" D5 H! S4 o* Y0 n        while (*p=*pbegin){6 q* Q' U) A2 Y; u) o
                if ((*p==' ')&&(*(p-1)!=' '))
9 e' |" i; z% d* X/ U& X! i2 ~                        pend=p;# h4 N( _9 ^6 W, e
                p++;pbegin++;        - E: W( N" \/ i- r
        }2 W+ Y" M% M1 v' v
        if (*(p-1)!=' ') pend=p;
6 E- \0 C( L4 W+ u( G3 y* D        *pend=0;1 P, f8 F% l" K9 G$ i
        return line;7 A& K- _7 u, _
}
! ]& L# c# g# @. R6 j. [$ x: O
4 u4 e4 O  O, ~  c" j2 z
//获得网页信息 - 网页信息是中文会乱码 用英文信息8 P# Z4 N" _0 u
void 获得网页内容判断外挂更新(const char *Url,char *html);& i( T; y* F) \* [1 @
void 获得网页内容判断外挂更新(const char *Url,char *html)
2 ?# L) l$ b: j' E4 k{
1 g3 Q( q  X- `2 B. F        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);. e1 N0 r4 r( Y; d/ y
        if (hSession != NULL)) ^4 t* T8 Q( S2 W5 U% y
        {
0 J! \! I+ D. g5 X                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
7 }4 h) H( b$ y+ q% Z+ p. W                if (hURL != NULL)3 s+ J- h4 ]8 V. `
                {5 w; A. e: K" n! M+ b0 h9 U
* H3 f1 L! B: c- ~) G' J7 m
                        char Temp[MAXBLOCKSIZE] = {0};
# }+ v5 K* b4 w" n- G3 N. h! o                        ULONG Number = 1;# ^2 F+ a2 W* b; z% v; Z
                                while (Number > 0)6 N3 l7 T; Y; v! f; k7 X+ [
                                {
4 z  ]- ~! I1 [                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
( j9 X1 S' G" d9 N. Y7 o+ V7 }4 X1 W                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
8 \! ~2 a; b  I2 B& }                                        int a=strlen(Temp);
+ p+ \( Y" k2 }4 s/ m                                        int b=strlen(判断版本);   
5 Y2 A6 U# [9 D  K+ L% M                                        if (a>b) / l' J: N" `) u/ I) X; i
                                        {
. h; H! N. E' F0 a' Y5 C8 X                                                char *p=strstr(Temp,判断版本);
$ \8 g9 ~+ {* j! ^. R9 L( p  V                                                if(NULL != p)$ U% }% \# S" l4 o9 ]% ~- {$ |
                                                {            i7 g1 H, I" s. D: q3 D
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
7 L$ p$ K7 U  u' ?# W" n                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;6 n0 q, T! ~1 b
                                          char s1[132]="";0 m& v8 f2 \* ]3 o) Q7 E7 n  m$ `
                                              strncpy(s1,Temp+wz,wz2);! O' C  [; A4 e+ D" x5 ~$ R
                                                  char *p2=strstr(s1,"MEILEI");: J8 {8 f! X/ f
                                                  if(NULL != p2)
% \2 W2 s+ s3 @                                                  {  + s; c0 L8 `) W7 I
                                                          wz2= strlen(s1)-strlen(p2);3 D+ C! {) X9 b) U" N$ F3 w1 C
                                              char 最新版本[132]="";
, @2 U( W/ [0 N7 h7 [  |" D" x                                                  strncpy(最新版本,Temp+wz,wz2);- {( Y! k6 w$ `
                                                      if (strcmp( 外挂版本,最新版本)==0)
9 }, X! ^" @; Z1 Q6 S. F/ ]2 E                                                      {
2 p* u4 K* n. t: Q                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );! ]' W" d# K) z( `$ _4 j+ W
                                                      }- x/ c4 c+ }% u8 y% M4 }% X
                                                      else
1 {* E! A5 m5 Q- _2 J* C                                                      {5 r' m2 x! G( w# E) w( N) k
                                                            char msg[256];
  w  K; m7 q4 x/ D- z' a% D                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);1 y/ B' W+ {. |: U- G) k6 Y' A
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );, K2 j% z/ A0 N! x5 W( J
                                                      }
0 ~. s8 t0 m$ R& O; P                                                   }" Y6 r/ ]3 p2 Q3 d4 e' D
                                                  goto LH;( `6 _+ F; Y; G3 a7 Q: q
                                                }" [8 S9 S7 y8 f- s" G6 t; C9 @
                                        }+ y  h2 t% e. e" m# X) v; k; Q

0 e; R. d5 i, u# Q3 z: d" s2 z+ |. A                                }6 ^# K, |' A2 E  s
                                LH:;
! ]! ?* x6 }8 @' ^' q! \3 A                        InternetCloseHandle(hURL);
1 J/ F) Y3 m% R5 x+ ~4 W& {' n. q" m                        hURL = NULL;
* A- q: W- b2 C& h/ g                }
0 N; ^, b- \8 e  U: M
2 a. d- ?( U9 m. s6 E$ ?/ f                InternetCloseHandle(hSession);
# _" T! R( A0 h: @% Q                hSession = NULL;
0 `. Y* W- _* V! B5 O  _' O) Q2 S! `        }( s1 {7 G9 v! x8 W9 E  {) N( I( b' s
}1 s. p8 c; {  w$ M) s$ R

* [# v& N+ J7 w& Q; F3 D2 l# _
+ G) F2 Y+ a" |4 k//----------------------------------------------------------------------------3 b; g/ ~$ l& X0 s) V7 |# z
//  Activation Methods4 K% V6 j) `( c2 o: E
//----------------------------------------------------------------------------. r+ ^' ^8 T4 P4 ?: s
" T  n! P( L9 L# ]( j% ]
//  Unigraphics Startup
$ U! V; p7 s! H//      This entry point activates the application at Unigraphics startup$ k3 j! n" p6 V
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )  c& `. ~' e9 K+ p: V0 |4 r- W
{
& w/ \. `5 w" q( l, E) X/ V/ A7 I    /* Initialize the API environment */
" ]2 ~5 W5 n: b3 t    int errorCode = UF_initialize();6 ~9 c. C1 l  d. R# e3 i

$ J$ K0 `5 a+ |" F  X& H/ u6 W    if ( 0 == errorCode )
3 s$ O# Z. ?. P, I    {0 ^7 n/ e! h3 g/ D- p& Q5 h6 V
        /* TODO: Add your application code here */1 Z( a. Y, k3 z& g
) E$ a  \6 o9 g7 z! T/ e9 ?

' a4 u2 A+ ]3 A$ Y                //百度云公开链接 通过修改txt文件标题! R+ a" y% d3 Z' K7 L+ S! K3 |
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
' z- K$ g* t  [1 ~" j7 N* G# p4 M, Q) T

( [  E2 l7 q' _' F. y1 W+ ~$ y                char 网页文件[256]="C:\\Windows\\版本.html.bat";  7 @; S7 Z, g/ ]* x* k2 Z- i6 q
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
+ S) J7 \4 f. w               
+ C( x4 @" z' B2 n; [+ W2 c        
, h& b8 M  q$ ?
9 t; U% O, I; e6 ^5 V- M, E, q  I. A3 {( y2 Q
: X# |, j  I0 E5 J; ?
        /* Terminate the API environment */) w( `9 @7 B9 c/ H
        errorCode = UF_terminate();
/ F9 V1 ^  P& }* A' k3 a3 d  D( b    }2 Y6 R+ M1 Q( `- l6 d

% g4 D# g! B" a. |' u, X    /* Print out any error messages */" I" C! P4 q& I# t
return;: J9 ^. @+ r- q4 S0 T
}& ?1 V) y- c! T% x9 ~
' q( R" Q' B  B4 r/ b+ I
//----------------------------------------------------------------------------
6 C; b7 B5 V5 E) T( |//  Utilities0 }9 w: V! S+ @2 U9 G! N# |, J
//----------------------------------------------------------------------------
; c" Q: p; i8 t2 q8 |6 p- R# p7 D1 `/ T0 [/ K' Z/ I+ r
// Unload Handler
' i; r& a: {1 @) g$ e9 s//     This function specifies when to unload your application from Unigraphics.; @: {4 \, P' U; h: u
//     If your application registers a callback (from a MenuScript item or a
7 R7 o( e% C9 J' h9 L6 B//     User Defined Object for example), this function MUST return3 V* ?8 p$ F6 w. H# n- r
//     "UF_UNLOAD_UG_TERMINATE".
2 {& P6 W, G% o3 xextern "C" int ufusr_ask_unload( void )
0 i: Z4 i$ Q0 n! G/ U3 h" L{
6 d6 j  b  t* v! r- V2 ~' c, @( ?) W& y    return( UF_UNLOAD_UG_TERMINATE );+ K3 x" a- `' w% I/ P- Y/ G8 E6 r/ e
}& _6 T: D( o+ k# h4 p" Y1 Q! w
( k( [+ r" ]/ x
4 B' r, {' E! [, N
启动UG就启动dll的方法
: I0 @$ `2 c' N/ D# j; l
: `/ o8 z( ^- F6 H7 A, R+ p方法1.添加环境变量( z% d, o0 H' E
USER_STARTUP=D:\MEILEI.DLL
/ b- a6 i2 g' j% [" \但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了5 d% E' l; }( b2 W7 d, S8 O  _- W

% W. M' ], J1 x) y& y' A方法2.在代码里添加(可以执行n个dll)/ o- b. W1 b& R  h4 u$ b
UG会自动加载 startup目录里入口点是ufsta的dll& J: F. A6 `, J* l

5 j; Z* S& `$ }- x" u& J; l所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
, a) `& X8 r/ p& p+ ^参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了$ m! D# x3 N: D0 H% W. ~

8 r$ I, |* B  J菜单参考  NXOpen_meilei.men.txt
' A# z' [/ L* p5 D6 U2 G! T0 f8 G' C. x+ h, C
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录0 _! b0 D/ C7 [+ b# S
启动UG就启动dll的方法源代码下载
7 ]9 V1 b- P& |/ T" Y 启动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.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

周钢 发表于 2016-12-23 19:47:22

周钢 沙发

2016-12-23 19:47:22

支持下梅大师!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了