PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 ' ^! }: u5 @* v2 S( W" m# ~

( \1 K# {' k. v$ Z9 _# k如果你想每次运行UG 判断 ug外挂是否更新
: _; I) \+ I2 O5 @4 B
/ @0 S) c" ^* Q7 o4 A' \$ O' e
2 o+ @9 E1 h7 e/ |2 V原理:
, R' F3 t# S0 \- T自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
/ d$ E! `+ A6 V) u) Q( N' G然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断5 @9 Y8 X4 y& r) G8 X; f2 A8 E
* O( E" g$ H5 m- |  w( h
6 ~( |: T; [; V2 n2 \! Y. `9 Z3 F
被启动的dll程序源代码,如下
- |+ n" U# y, {2 O  G" u
" [' q  M' @- |9 B5 L2 g# Y//  Include files' _3 e2 q7 U" v! D4 l2 O
#include <uf.h>; ~+ T- j7 P" \
#include <uf_exit.h>
1 Y; b; o' {5 \/ F( J4 `#include <uf_ui.h>3 r  ]2 F8 b3 m$ ]
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
0 X- ~& Q4 p' r% q* U4 z9 V( X#        include <strstream>
2 \) U; s2 t9 |% R+ J6 V#   include <iostream>
1 ?9 ?3 J- ^3 C' h2 Z6 {! H        using std:strstream;
3 A- C- T% [. K' l        using std::endl;        
# u4 A# y2 ]1 i& ?* ]        using std::ends;7 P# J& I( I5 \0 E. M8 j% c
        using std::cerr;2 f- ^- e5 o9 ~
#else) N( r% r4 T7 p3 o4 I
#        include <strstream.h>% H0 @9 u) |- _6 u% S0 h. X
#   include <iostream.h>+ ]+ i1 l& a9 y& y- S4 g* C. @
#endif8 Q, V4 h' o) u6 r  a& e" q
#include <string.h>. Y2 Q! o( C6 Y- W) {2 Z3 q
#include <afx.h>! r7 U! M" o; z6 s
#include <windows.h>
+ u( F* X. x* x- |* N3 K& E) e#define MAXBLOCKSIZE 1024- T1 v' \$ V' U$ S" W, u
#include <wininet.h> //网络1 U4 u3 v9 u4 S! W' q* ~# l
#pragma comment(lib, "wininet.lib")//网络
) r+ X4 ?3 z' i, T) D% g6 K6 ]! D3 M! i6 a0 U5 b
char 外挂版本[132]="V2.8F";
7 u5 P- F. @3 B! g: ?& K
& P* v, B* a  T6 F
, l# X4 q6 V' A- b: cwchar_t* CharToWchar(const char* c)   //char*转wchar_t) P6 j. N. {; N
{  
5 h! R) l2 ?" @- X3 l& ~3 j  k7 u* T   wchar_t *m_wchar;
/ k! h" s. o/ H( b; ?5 `. B    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  9 I( O; P/ O5 m, t( W7 x$ R4 l
    m_wchar=new wchar_t[len+1];  
2 x4 y* m3 E5 z' C9 K5 D$ n. J1 d    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
/ G8 I+ Q. L/ C* r    m_wchar[len]='\0';  , d4 p9 n# B' n
    return m_wchar;  , b+ I: ^- \' A5 \: h' y; F
}  
( B6 u- _: y8 s0 p( z. B  S6 D0 w3 p
//TCHAR 转 char' @% V2 I: H/ ~' F9 _
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
6 K$ u% s0 u) ?8 l! I{  
# q1 b  r+ E( Q: h    LPSTR pszOut = NULL;  / e& O& n! }' W2 A, {
    if (lpwszStrIn != NULL)  8 F7 |' c6 E4 n" U
    {  
% _0 T. |! U* j5 w3 J        int nInputStrLen = wcslen (lpwszStrIn);  
4 B- ^( W8 `. D% c( q8 Y4 F
# l7 R1 q4 R! a& S        // Double NULL Termination  
9 s; s6 g" i# N) R) l6 U        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
9 K; T! w: F! W        pszOut = new char [nOutputStrLen];  + h7 U0 Q( h  L( o" i2 C
; G% O: A6 l& R1 R
        if (pszOut)  $ _% B7 x/ h/ C- `0 s$ {
        {  $ h2 Q" R4 O% [# h/ f+ y6 n
            memset (pszOut, 0x00, nOutputStrLen);  7 p7 e" a" Q2 f0 k
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  $ t/ o, k$ L3 V8 R- U
        }  
" q: R$ e# D+ k" t9 I& W! A    }  2 r! u0 i1 T& W' U& e4 X, t
    return pszOut;  : h( }% C7 o% t; L
}  2 T9 Q; ~  I  ~$ X

2 E+ g$ N8 w" C/ s# j& b
$ x- y8 Z  @2 F9 ]! f//CString转char5 }* F5 w9 N* I* ^6 M  N: D& ^
void CString2Char(CString str, char ch[])
5 p9 q, E" y( a# m$ S. O1 S  W" G: K{
: P( ^: i1 `% x2 T6 H2 h* e        int i;
: W/ _- o) U6 V2 t( M        char *tmpch;& O3 r0 q* r0 N5 @. B# c
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度2 X( ]: ]! B8 a; a+ r# N4 r
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
$ K- i% O2 M3 b, v' O4 v. u        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
' l4 q4 T1 b+ H9 k; f" _$ V% r3 m. R' t8 k# [7 P
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;: J/ J+ X4 W( g$ w* f
        ch = '\0';
. h6 C+ p9 {  k1 Y}
' y  R; ~7 A  M+ X6 m
, }) L% f1 V' ^: {; v$ E, E; O+ E# e6 M" ^
char *去掉char首尾空格(const char *str)
8 y% g% z- K- K, i$ X% f/ Z7 i{$ G/ t1 R& Z# i. A$ L: s6 a; a, H$ Q
        static char line[133];9 W5 j3 j8 ~$ W0 Y
        const char *pbegin;- X" N! p1 S8 I3 ^9 p+ ~4 h' j
        char *p,*pend;
4 u; w3 G1 J3 @% `+ w        int i;% Q- v) K, K) o
7 B/ P8 ]: u( Y" O3 F' W) E3 T
        pbegin=str;/ u$ R) u, l8 a+ c% [7 h
        while (*pbegin==' ')
! o5 W* F) c/ e. _/ V: y                pbegin++;8 K# W; z, q/ i8 D4 g
) C7 k4 b% \( s+ Z
        p=line;, G" @& E. I/ q0 o% X& ?0 i( t1 Y
        while (*p=*pbegin){
  p( t" m! A" N: k9 y9 k6 U                if ((*p==' ')&&(*(p-1)!=' '))' z3 Q6 g0 f8 O6 D
                        pend=p;
4 u5 C0 q1 U0 `6 n& p& ?                p++;pbegin++;        
7 R0 @) S- ^8 b9 Z$ l        }! x4 b* }1 t+ I+ ]0 R
        if (*(p-1)!=' ') pend=p;# `4 }2 b, o! R  l( f* i7 v
        *pend=0;
# ?6 [9 f+ I5 ~6 |  t        return line;' J1 R' y$ w5 K
}
4 T; W* V* _  v2 ~6 p: Q2 |+ K8 ]# B% D) J- e

, ]5 w% ^1 D) v" o: |4 p. j//获得网页信息 - 网页信息是中文会乱码 用英文信息
# F# d' b0 d% C: gvoid 获得网页内容判断外挂更新(const char *Url,char *html);. V; H3 y' i4 Z! R/ t7 A4 l
void 获得网页内容判断外挂更新(const char *Url,char *html)/ X( \5 h# r7 U0 R
{' k9 H, O$ O' a, [, ~  [$ X7 `( F% s. Z1 @
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);, F  n8 m) q5 U6 ?1 @, o5 n: \
        if (hSession != NULL)' {# D* D7 N! v( e7 f
        {
' e: ]3 L5 K7 j) ^                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);; K8 A- _9 g7 P1 ], J
                if (hURL != NULL)
$ `% O( [5 r( j! L: W' d( d/ Q                {  O6 A, V1 ~. Z# I4 x
% Y! J) E+ X7 r- b: ]2 h
                        char Temp[MAXBLOCKSIZE] = {0};
- J) H% {; _% E: P0 v% o# ]                        ULONG Number = 1;
& u2 z* l8 N# k! x                                while (Number > 0); m! y. g* Z  m2 _, V& ~
                                {
# a+ v' \7 x! u2 z+ l                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);: ?8 U' q. b/ |: P
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";% K$ G# s  \* n! L
                                        int a=strlen(Temp);
8 z2 m. A: A5 W8 @                                        int b=strlen(判断版本);   % ?8 ]: c. z0 z8 @
                                        if (a>b)
" G- w; p( A) E* T  w                                        {9 F& Y& Z( r. `
                                                char *p=strstr(Temp,判断版本);
! {% t! c3 ?* f! B; P                                                if(NULL != p)
" j7 @1 E$ J7 K: ~, L                                                {         
) O6 h3 B9 D0 U4 u3 L: W                                                  int wz=a-strlen(p)+1+b;//版本号起始位置" T2 `' h: I% ~& \5 w" n  A
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
$ s4 E2 q: l- P  `                                          char s1[132]="";
0 f+ r; x5 Y0 X                                              strncpy(s1,Temp+wz,wz2);! n7 v2 C% \5 q" r8 T
                                                  char *p2=strstr(s1,"MEILEI");6 V; \( k: \1 a  A! k9 o- `3 }7 {
                                                  if(NULL != p2)4 j; I5 u' Z1 i5 F, M& ]
                                                  {  + \0 [- ?5 J3 o; ]7 E- p- c
                                                          wz2= strlen(s1)-strlen(p2);
& X- o& f9 w8 m7 m                                              char 最新版本[132]="";
( g! [/ h% }- W$ d! B" ^                                                  strncpy(最新版本,Temp+wz,wz2);5 T% V. L9 n# T) e2 _
                                                      if (strcmp( 外挂版本,最新版本)==0)' x( K6 A9 I0 U: o
                                                      {
* M! p" L. v# K3 X                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );& ~8 o) R( t0 q" I
                                                      }/ n( ^9 i2 X# a. V4 B- Z4 p
                                                      else
0 J6 {$ M9 N7 T, m                                                      {
; D# o# R1 I8 S& |                                                            char msg[256];
2 L0 _0 g6 Q3 f: `% P) w                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);9 m) l# d. t8 n" X0 r5 Y8 l
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
" O* j6 L& s. s3 o' j3 j( }                                                      }3 J, F  E3 i. D7 K
                                                   }) }& c  l5 Q4 f- m! i5 V2 [! f
                                                  goto LH;3 \# D: T8 L" W- y
                                                }. O) m& s+ \1 `" s' f# g8 i
                                        }
9 l1 v' t& g0 @
9 j2 X: f' W; ?                                }
4 X1 b; i# }6 f0 |& y; v" F1 g                                LH:;
% d4 s0 P8 ?- x! ^7 M                        InternetCloseHandle(hURL);* [# \( @7 k5 ^( G: y" {/ {8 \
                        hURL = NULL;
' B* E3 e- |' j! D3 c4 K7 N1 J                }' y8 `  o1 U2 j
3 ^1 Q/ l8 N6 I+ [0 L
                InternetCloseHandle(hSession);
: p# w1 O, v; ?; o                hSession = NULL;
7 ~! A& O+ U4 b3 Q$ G! G        }
5 |) Z9 k/ f& R0 C+ P}
& ~# I- C& D- x7 Y' G0 g) V& H# T- r
+ k/ t+ F8 @, {& B& V3 \
$ |- i5 c9 u+ X//----------------------------------------------------------------------------
( W! d" U7 k8 {4 H" N# w//  Activation Methods
, @5 y5 S$ f) h' t' u' F. f//----------------------------------------------------------------------------
+ P' r6 [5 L( G: Q8 _- J/ Q' P3 I& Q
//  Unigraphics Startup
+ T% ~3 {6 q3 J( p: p( {4 o9 q# o. w* `//      This entry point activates the application at Unigraphics startup* \4 r* Z" C1 E' t" U
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
7 ], G& l% Z. _$ `6 ~5 h  f{( ]: T+ o( M: Q3 C+ |, [
    /* Initialize the API environment */
' m# k; a. ~  `8 |+ Q3 p8 q    int errorCode = UF_initialize();. s& V& ~, P7 s" S$ j4 A
  p$ a/ Y, p# C4 V
    if ( 0 == errorCode )
4 J6 r9 [. l% B) @' Y% h4 \$ N& l1 `: j    {: E: L  e! c, S
        /* TODO: Add your application code here */
$ F" G& K) v+ w' R
  r* V  O3 X- z) o# [6 W9 h# \+ {$ H# X( y5 Q* @' X4 W2 p' y  l
                //百度云公开链接 通过修改txt文件标题
7 w5 z3 o8 e% @  |) q- E3 y                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt9 Y- ]( a8 T% C7 R4 y8 i  c( i% y) D

1 T! `! M& b: D" V! O3 X* V% K* J5 Y9 S* ^# U4 e2 ?
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
/ M; e/ _& v# \  P. ~                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); ( X1 ~" }& q  S7 n7 @; k' U# A
                0 h/ l$ N( i" D3 t
        0 n  F' p$ h. G4 B5 I
: O* J, x9 [( q. ?( J  j( E$ z

/ Y3 U2 a7 o. X3 ?( ~# L, K; ~
1 M# F" d( M1 y! G; ^# b/ ^        /* Terminate the API environment */( X5 c2 m7 M2 ~% C' b
        errorCode = UF_terminate();# m& p( Y* L7 S
    }8 A$ T; ]8 n9 i& _! A

. I5 @9 J2 w$ L. z9 p    /* Print out any error messages */
8 B) t9 B& k$ r% t; ^7 Kreturn;! U* e. l7 g8 b. Q' M
}* M  Y0 @: _  N: O

9 ?. X7 {, N) ]) h' ]# r//----------------------------------------------------------------------------
* `8 u0 ^& t/ `& M. }& `' Q//  Utilities
1 Y3 i4 T; ~: s; m//----------------------------------------------------------------------------
+ J; Y2 U# _4 u/ p/ k
. U& F) r: k: S" G  O8 V* o  m// Unload Handler" ~: r0 K0 l4 H8 F
//     This function specifies when to unload your application from Unigraphics.
5 Q$ A6 `0 \* {& F//     If your application registers a callback (from a MenuScript item or a
2 [% I% e; W, [4 |/ w1 P//     User Defined Object for example), this function MUST return
) c, |5 }$ d  b+ U8 I0 ~( O//     "UF_UNLOAD_UG_TERMINATE".
5 Q6 K6 i. c6 vextern "C" int ufusr_ask_unload( void )
+ P6 ^* q7 T# K) v2 S7 ~{6 |% Q) O' V; ?
    return( UF_UNLOAD_UG_TERMINATE );
5 W7 q5 p5 M  X( x: G/ x$ T1 `6 t* W}& \9 s6 Z; J' u+ G

6 W# s4 ?' {' f; J- ~: L2 [  G- j1 t+ x- u( X+ V7 t
启动UG就启动dll的方法* Y' @# b/ @9 K4 O# \" D3 G3 ]" _9 |
# d6 w% h% M: C- V
方法1.添加环境变量9 F  ^/ G2 Y9 o2 \' l* w% D
USER_STARTUP=D:\MEILEI.DLL' f  D, V- d" T+ l
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
' j& H( ^2 R& s6 e0 Y* _' }; M8 |7 J% ]  U/ v; ~3 S; F
方法2.在代码里添加(可以执行n个dll)
9 a5 N& _9 A1 Q2 N! s! t9 TUG会自动加载 startup目录里入口点是ufsta的dll' @4 a" c+ c/ I! `9 n- O0 |

% @' O( V% M8 ]7 C6 E所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
. J( Q: @( W$ K1 M参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
# d  \+ E1 t# ]. s- J5 e6 s+ o0 B7 S
菜单参考  NXOpen_meilei.men.txt4 I( Y/ g8 {. P. I- n2 g
3 B  g6 J% d$ x
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
) `! J0 W" c/ c# ?/ g3 m5 u启动UG就启动dll的方法源代码下载
' l! E9 u: t4 E 启动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二次开发专题模块培训报名开始啦

    我知道了