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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
" }8 s# i- m9 {8 m0 r8 q& W' y+ g0 e# q* Q4 R% g' h. g5 F4 U
如果你想每次运行UG 判断 ug外挂是否更新
8 z4 y! P% T* f2 U% z+ N1 [4 d' v0 r
5 b& A& F( J9 b8 x5 q- r
原理:
0 n* M( r0 }) g9 A自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
/ J' y1 L- e: f然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
& [' T. Z6 A) P
- D4 z% e% f; s8 W2 X* s; F+ B  Z8 _& b( ?+ Z
被启动的dll程序源代码,如下
# H' j2 u$ b+ K% C( G' v! \) E! P9 ~: s7 K
//  Include files
0 ~' t5 k9 z$ ~7 f& Z#include <uf.h>9 m: G3 }$ z6 A! E) _
#include <uf_exit.h>
8 s$ y6 m# s0 y5 j* |6 T#include <uf_ui.h>
+ M4 k1 f4 j" K- n$ z  U6 n! M#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )6 S: ?; I! E3 a4 P
#        include <strstream>
) V  F( [5 ?$ Q7 R' L, |#   include <iostream>
- i  v/ ]/ U+ ?8 o5 X% E        using std:strstream;
  y- y6 c2 w& Z5 P  _* I        using std::endl;        6 }1 G9 O5 J3 F) `' D( C" w
        using std::ends;
$ ?( y) j  r" W% |  f! A+ T        using std::cerr;
- y* {  z/ Y9 e#else
8 K9 T, N; e: c. T3 ~$ X, t#        include <strstream.h>5 r6 n  i8 J) B/ F7 y- ^) a* q
#   include <iostream.h>
- d4 I% Z) U. c( q( u7 ]# F#endif2 w8 b, ^7 o' G! J4 _
#include <string.h>0 g, a- W7 c2 H9 }. s6 k8 j
#include <afx.h>* P! _  U( n# A7 K( K( x0 N' n9 i
#include <windows.h>( {! q. ]9 }/ x* E1 Z& B$ A
#define MAXBLOCKSIZE 1024$ {% w! f7 |8 N+ l2 D/ [/ Y
#include <wininet.h> //网络! h: [! W/ N2 i' j- C
#pragma comment(lib, "wininet.lib")//网络
& T5 C* ]0 P' w3 \/ Y4 a8 b6 F  ?# b$ B
char 外挂版本[132]="V2.8F";$ O2 o, }9 U  W5 y3 l$ N, Z8 E/ w
+ W' x. D+ p' A/ Z0 U6 W

/ l8 u6 n2 g" y' x$ |wchar_t* CharToWchar(const char* c)   //char*转wchar_t' T0 g5 Y/ j( f4 X7 l# J
{  1 z. c$ ?  [3 g9 ?1 B/ j! S
   wchar_t *m_wchar;
+ M( v% ]2 @6 `, O* W    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  : Q$ c* q- ^% L; [
    m_wchar=new wchar_t[len+1];  - C* a, v8 H6 _6 y7 p# A
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
) g5 r! L" i4 Z* f. Z0 I    m_wchar[len]='\0';  
! _) h6 F2 r7 p$ Z7 M$ H    return m_wchar;  * B- f: I" ^% U1 Y) o2 _$ L
}  / z, @7 v3 x- l" ~7 y% p& l

% c4 h  U* A5 O3 q8 `//TCHAR 转 char# y8 z0 L$ V# w" V. d
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  . |; G  F) ^/ ~# i
{  9 N3 n) z* R" A/ @: F
    LPSTR pszOut = NULL;  
: ]- E! z" i; z! F1 Y/ w: C    if (lpwszStrIn != NULL)  
* R: r: h* k. C; f9 t. `    {    c" ]4 c& C# Q9 l6 X3 Y, P. @
        int nInputStrLen = wcslen (lpwszStrIn);  - d. x: Y; b* u5 T! ^

- D/ x/ l6 c+ V1 _        // Double NULL Termination  
* A+ D: G7 n6 m! S        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
' `& `& \, \+ b( A& g& W8 s7 K        pszOut = new char [nOutputStrLen];  
5 b) O" m: H% \' {" J% u- u
( j1 S) @5 C7 W/ _' H6 c        if (pszOut)  
6 R& h% P; e" K& J        {  
9 Y! q  G- Q( n# ?2 M/ \1 ?, f  Z            memset (pszOut, 0x00, nOutputStrLen);  
! a6 C6 t+ T: a- ~# w1 X            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
2 C1 }; _2 B6 Y1 U+ g8 v        }  
1 g: s0 a8 ?" N. x- G    }  , m0 K/ i1 n: N0 T) l, M- Y$ `
    return pszOut;  
. Z2 ?1 _& m" `' }+ |}  
$ L+ J6 Z! T% s0 O$ d" l
/ z0 w  q# U8 l8 S5 E
+ x/ _) s) r8 ?) R" r' j, k//CString转char% d6 z% Q* r5 J. m
void CString2Char(CString str, char ch[])
. z' q% Q% N0 ^( q1 I- y; q{$ g0 y5 F1 @0 _* I  ]
        int i;% r" [4 j9 b8 M
        char *tmpch;  ]0 j3 E6 s& Y2 s+ j
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
" y3 |8 M% y0 V, N        tmpch = new char[wLen + 1];                                             //分配变量的地址大小  Z4 t+ o% H# q$ }6 R
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
# D) M% t5 ?. A* w& d. S. P  ?( [  e' E9 d
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;4 m% |" _6 G6 K' u# h; \) Y9 p
        ch = '\0';! Y( h) Z. m7 v
}0 E7 p8 j  g' [$ }/ l  g; |5 T
2 ?6 h: I& F* G" @' [. w
* R9 V' ]5 g0 B( {: ]; H
char *去掉char首尾空格(const char *str)
1 W- f# d" ~& W  ~, ?; _7 O3 T{* c3 j9 U$ M* [' |# W2 v
        static char line[133];) C+ y% S6 O& z
        const char *pbegin;
* T" v; M6 G$ H/ \+ s$ _& C        char *p,*pend;
+ X; j/ v5 S/ ^! L: k6 q        int i;! F2 O. t# ]. c+ I

' _, c2 O* L1 T/ ~. ^        pbegin=str;& \; u0 g4 ]/ ~" \1 T! m
        while (*pbegin==' ')- [; X3 ~$ L$ J- j
                pbegin++;
  z/ F, P+ s1 y# A0 x3 K6 H( w* J* j& F8 j
        p=line;+ L" i8 L7 p. K4 h. n
        while (*p=*pbegin){
* U0 q. \9 V4 o8 q5 D7 S/ D                if ((*p==' ')&&(*(p-1)!=' '))
% K! c3 y5 o6 W                        pend=p;; Z; N0 u8 P4 g6 H7 J9 `
                p++;pbegin++;        
6 C3 `6 ]$ K& V1 i5 f1 I" J8 O        }6 j( d. n) j3 l5 m4 r% D% |$ a
        if (*(p-1)!=' ') pend=p;
0 _: }: u" V1 U4 p        *pend=0;5 j- a# D. o, y+ `5 m: x
        return line;& Z  v8 W$ {; [1 O# S& S1 q
}
1 e) _  }$ p) Y6 I8 B
9 ?. t- `+ F- ^0 F. o/ y- z% @) t3 \" C# H* B9 {
//获得网页信息 - 网页信息是中文会乱码 用英文信息, `: M1 R8 I& j, {/ c0 W, L0 a
void 获得网页内容判断外挂更新(const char *Url,char *html);3 J- Q$ d. o7 f) D% B$ J
void 获得网页内容判断外挂更新(const char *Url,char *html)
/ L' h. [! S' r; J) v! A: w{
5 s: k! b0 U. H5 t7 W9 Z/ t        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);' l- c" M+ i& I3 G, j
        if (hSession != NULL)
  q% E& g# a$ |. ]! s        {0 e6 r/ |2 y7 C, b
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
( P& Y" ^$ L9 B                if (hURL != NULL)
5 }# ~# _1 p3 j: S" J9 m2 e                {* r/ V2 }/ C) r' ]* v0 a
" w+ S) Q7 }) F" v7 f, D
                        char Temp[MAXBLOCKSIZE] = {0};7 `0 l( B5 f/ `. j/ R
                        ULONG Number = 1;7 B* n$ {( M: Y2 [
                                while (Number > 0)
7 k# I: K! G( F8 d4 G% k                                {: \$ M/ z- R* c/ F$ M; _
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);, h; j" E+ f# x/ x6 ^
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";+ p3 T2 t6 ^! o8 w
                                        int a=strlen(Temp);0 g2 K$ B6 g5 S/ H8 h, @9 D
                                        int b=strlen(判断版本);   1 Y9 _- o" s6 [
                                        if (a>b)
/ t2 R+ d7 v4 r$ o+ p1 J                                        {+ W! p; Z" u+ ]- _% f
                                                char *p=strstr(Temp,判断版本);
  D  H. s9 @( b- c  o; E                                                if(NULL != p)$ f  h- H& z1 z$ ?' G8 Q9 Q/ `7 I
                                                {         
: g1 _6 {! `  o. Y                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
* A6 L4 ?0 _8 ^$ \# f0 e- a                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
9 o2 F. e' P( Y! s                                          char s1[132]="";
5 r" T/ T$ O4 i  Z9 O8 q                                              strncpy(s1,Temp+wz,wz2);
9 ?7 o; l% g" W# p% ?  ?, N                                                  char *p2=strstr(s1,"MEILEI");! v7 M# g" _! ~  z4 R* }
                                                  if(NULL != p2)) H  D8 y( J4 i: e& m1 q
                                                  {    Y/ ^9 H- y4 N
                                                          wz2= strlen(s1)-strlen(p2);
9 b' G, g- G6 v                                              char 最新版本[132]="";
6 G2 ~7 d+ k" ~                                                  strncpy(最新版本,Temp+wz,wz2);
+ q  }6 `) |! @* M/ L                                                      if (strcmp( 外挂版本,最新版本)==0)( ^" r, @5 y: e. k  u8 M4 V
                                                      {
$ `0 V% A4 _0 z) h: F" ~0 F                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
. |" Y, k- @5 V0 L3 k5 p5 {                                                      }
  I: R- V5 h( o( G                                                      else* ^  ?. ]# q# |+ u6 n: M
                                                      {3 T* \. W+ c% E- G  S
                                                            char msg[256];% C" w; I5 q* `/ {
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
' d3 I; x& E. X4 b* C6 f! S                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
2 @3 y. @. D2 f0 a$ d8 Z                                                      }. |9 P/ @5 ]% Y. E; v
                                                   }
( L6 j, q  M1 p) g* G* d! n0 Q                                                  goto LH;: s5 p# M4 o# H0 V' D9 H0 p( G
                                                }2 f) h) ~8 ?; P0 ?2 `( z
                                        }* g8 P. ~2 E, n" _/ e4 G6 V! p
6 ^" b' o  {7 A2 j) y6 ]1 Z& P
                                }3 I; K8 Z, f+ s) _7 P3 v& }
                                LH:;
& c+ d2 D5 r! s! V) l                        InternetCloseHandle(hURL);
3 F3 O9 d) u" u! k2 \: P                        hURL = NULL;  G0 G5 a+ S" a  @
                }
6 ~! N9 Z6 I& i( h3 I
) G* _8 g3 Z- u                InternetCloseHandle(hSession);
7 |5 U2 t# X2 O% }                hSession = NULL;; z+ F1 N6 M' N
        }# i# c" L2 y) K9 x: R3 D/ a
}
+ J: u+ T% e8 [8 G! _. S
, t6 P' i4 n! {7 N, B1 |  b( o+ q3 Y. N# |' q
//----------------------------------------------------------------------------4 U5 b9 z6 A- f3 Q: l3 Z! F
//  Activation Methods
( ?' h$ x5 @( D7 M+ ?  ~" C% V//----------------------------------------------------------------------------
/ x+ N, g$ y; Q5 x. {. [% ]# x  i1 r% O
//  Unigraphics Startup
; U8 W( H# G( N8 S6 X/ p//      This entry point activates the application at Unigraphics startup$ h7 v5 e! C4 U
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )6 j9 t2 m5 `$ o0 m4 d
{9 B, x: W0 ~5 _+ S* Q% e
    /* Initialize the API environment */* g+ d# ~' ]1 x* j+ h; g
    int errorCode = UF_initialize();
9 s* s$ |8 p7 A/ E5 N8 Y9 Z7 v9 ^4 I  i3 d8 A# l
    if ( 0 == errorCode )% n! c) U5 q( M& U9 n
    {, j3 {+ [; ^6 ]* ]- _
        /* TODO: Add your application code here */& [% N1 f. l$ l4 ^$ i3 I$ J
( M5 f5 q0 m& n$ y

3 `! M+ h+ ~6 w1 @% b                //百度云公开链接 通过修改txt文件标题9 K! C( E0 [0 q- {2 @) H) A' b
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt6 U1 b4 [2 z* q3 R. Y

( Q9 [1 T1 u6 Y9 [: z
0 w/ f* k$ i8 J8 X' e                char 网页文件[256]="C:\\Windows\\版本.html.bat";  : q# e! Y  n/ P7 A! A6 v
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 7 b" D( S+ I# ]/ u8 u7 E& E! w" i
                ' Y" x5 d7 o; t+ I
        
$ h6 o, X6 t6 L: b( ]# u( n7 ?
3 m, C3 Y" X3 M  f3 y/ \+ \1 P. y5 P3 @

: h) G' @1 M  S$ n: k        /* Terminate the API environment */
/ n8 J0 |' F4 i- x$ ]        errorCode = UF_terminate();
3 @( n6 W- ?+ m  k+ U    }
" H% S. w% m; w, r
/ a  f! J: E( h4 r    /* Print out any error messages */- M0 c- u( y, e- E9 C
return;
5 A" q2 c2 g7 h+ G& u# t}
+ a5 z" ~2 e+ J& f6 ~. L+ w% c8 }
//----------------------------------------------------------------------------( p9 Z, V$ _0 }: @# f- n/ W
//  Utilities
8 l6 U6 g$ G" I$ e, p, E: l, Q//----------------------------------------------------------------------------5 w% Q- v  K2 u5 g5 P+ A  W

  D* p/ H0 ]9 Y: n// Unload Handler0 r8 \7 x6 n+ \* O' I' ]9 M
//     This function specifies when to unload your application from Unigraphics.
$ w4 N! V9 t( `# S8 `, M% C//     If your application registers a callback (from a MenuScript item or a
' ]8 s* Z" `0 a. O//     User Defined Object for example), this function MUST return$ Z# x8 d* g& I! d/ g2 H
//     "UF_UNLOAD_UG_TERMINATE".' n! d* R$ o) ]3 s! `1 u
extern "C" int ufusr_ask_unload( void )
% F  O' e! {7 x  c; \- X6 T{
' I- z3 f1 I# M. U( G    return( UF_UNLOAD_UG_TERMINATE );
& v9 b  N  D: }  R/ o: P}
" Y9 h4 x! {1 x6 r  \% R, I5 h* _5 J# l* v) d/ W4 p
8 U5 |; _1 V+ A6 e# s8 A
启动UG就启动dll的方法
& m% n. ^0 H; ?/ L/ A9 q) O( X
' t0 M; L3 \: [; ], S& w5 o, V方法1.添加环境变量+ ^1 [+ T% M& \% E$ Z' ]9 m/ E
USER_STARTUP=D:\MEILEI.DLL
* ?& o: k! b) [但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
; N% L/ A4 m" d8 N1 e, e, T: e+ v3 p* X  E5 Q8 g4 o
方法2.在代码里添加(可以执行n个dll)6 V' d3 ?& H1 t
UG会自动加载 startup目录里入口点是ufsta的dll7 T/ K$ [: G, \; s/ r+ ]/ t) U
% K2 a  J+ G$ s9 n/ O. e: C
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令* n. l" s% x! |. C9 P
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了  |. v& T9 F" K- s$ a( C
! Y: s0 u; k# f
菜单参考  NXOpen_meilei.men.txt
) J9 q  ^# u; w5 V$ o5 e# _- D8 {" Y1 ]7 T# |3 k1 n
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录" O7 a. C, S  ^9 o( U- @* N/ w( C
启动UG就启动dll的方法源代码下载
2 \+ t0 }/ [; r" L1 b+ 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二次开发专题模块培训报名开始啦

    我知道了