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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 - ?" {) b  `2 n! r
  h" x6 @: Y8 G) Y
如果你想每次运行UG 判断 ug外挂是否更新
3 v; q4 k+ v0 r2 H3 N/ S0 q
/ f6 l1 y" r" V* y* b5 Q# F, t0 J/ N
原理:) w2 M  n! b7 V
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了& ~4 k8 m# p9 G3 _7 N
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
9 ~8 R4 v  r; p4 m$ c
+ W! Z  {- q3 a+ @
) \/ ^% }2 O3 Y被启动的dll程序源代码,如下
0 O. W5 ]% p9 S, |7 p$ \2 d
# O! d" E0 f# }//  Include files. H4 K3 y; j$ U8 ^$ N0 o: D4 S# O
#include <uf.h>  R7 d6 w' T- _3 t# d2 a
#include <uf_exit.h>
5 J3 I4 l+ ~7 V$ `4 X2 d#include <uf_ui.h>3 ]1 e7 b! G; W7 E
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )+ v" s' b9 B5 c' D" V
#        include <strstream>
6 y, R2 t( Y) E1 {7 ^, ~#   include <iostream>1 l3 n1 U+ B8 Q8 d
        using std:strstream;/ u8 l7 e! \: V7 k. L7 C5 l; [
        using std::endl;        ! ?2 Y3 q& s3 j, R+ W1 y
        using std::ends;
( c) c  b# S" j. O# ~        using std::cerr;2 V! \, M# v: G& {2 }  \- z2 Q
#else
- j5 L5 q& P5 [6 ]0 h4 B( X#        include <strstream.h>! Z/ d$ t- u% y0 X# |
#   include <iostream.h>
% h6 ]! |. ]* V7 k1 W. P3 t#endif' I- }6 I" E; s, G
#include <string.h>, W& ~3 g' v; a; P3 v0 A  d
#include <afx.h>
/ u, S, `9 Z. Z+ `8 V. o, G% n0 D#include <windows.h>1 y) x+ [# q$ u0 u
#define MAXBLOCKSIZE 1024+ }6 Q' o% B8 a& b* `
#include <wininet.h> //网络% M& e/ P7 x# A/ w! e. c8 }: B$ Q. @
#pragma comment(lib, "wininet.lib")//网络
$ U. {+ h& v1 Y! z! H# q6 }( X; q/ @4 v# @4 L* n
char 外挂版本[132]="V2.8F";
2 ^$ \# r6 f( W0 m
3 b9 z" j# ?) n4 D. N+ p4 `0 C5 ?( y
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
( R) z+ D9 i1 ?/ F{  - l) s, Y2 U* w+ p% t0 t
   wchar_t *m_wchar;
9 U3 w8 Y5 Y5 C5 e7 {    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
' ]8 i" j* @! a0 n( h3 O# Y% s    m_wchar=new wchar_t[len+1];  
# K  J! _6 |& H' f0 }    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
/ z, }2 Y% [2 i- r6 c    m_wchar[len]='\0';  9 Z3 L5 `+ L: T. Y; u+ Q
    return m_wchar;  / T- W& d% i) c. y; l. k# F- `
}  
. l2 \7 |7 M  y0 ?- @6 j( _& Z( D- B# m+ F0 w
//TCHAR 转 char
5 m2 T+ T8 S: a2 b1 wchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  2 `4 M" h' g1 y  ?, c: Q6 {! L
{  
) ?) S  Z" K$ ?    LPSTR pszOut = NULL;  
- v3 @# M7 j$ f- h6 _- y    if (lpwszStrIn != NULL)  8 h! q& ?2 r+ C$ M6 k- y
    {  + h( E7 [3 C# w2 q! J
        int nInputStrLen = wcslen (lpwszStrIn);  
7 X" H8 {) c- C% Q/ _. }  N
# ]' ^' T* o+ D) ~        // Double NULL Termination  
; M* ]* J4 r0 Z: W# e8 L2 g/ Y. g        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
. G0 O0 ?! u  T        pszOut = new char [nOutputStrLen];  
, A) R  o, m, N( ]! I( B) L) _: D5 t: [9 Y  H! K, g5 n& q
        if (pszOut)  
  y& S0 m' A6 j2 j) f        {  
1 p4 K" _. C( f9 D- O            memset (pszOut, 0x00, nOutputStrLen);  8 R. o  U! A! L
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  8 e' @8 L9 T7 ]$ O$ i& F1 @' a6 k
        }  $ E1 u& T/ J" J) ]" h
    }  3 H# u& ]4 l) [
    return pszOut;  / V5 T5 K/ U$ J. N2 F
}  
# L* z7 l3 ?! y( R6 l2 d7 f
9 r. ^5 G3 o/ k8 n8 \: N' q
2 e4 w+ w0 a$ v- Y+ s% F//CString转char
, u7 E+ b& X& avoid CString2Char(CString str, char ch[])
* x  o  R0 x1 e1 t& f8 H% v* c! _{
$ x5 S4 j3 j1 |# K        int i;' S" f% K+ E. i4 i8 B  `3 l
        char *tmpch;
: _! r4 f8 b$ z        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度4 L$ ?$ R4 O. l5 e& E/ q' a
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小# k6 c- s& O; L0 Y( @) L
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*: X; q6 i' ?6 r0 @3 l% K9 s

5 L" v* s% \; K1 ^# Q3 ]        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
/ Y1 o( H! h2 |        ch = '\0';
0 j, Z7 V( N8 {" {# a  M' \* o}
2 v+ c. s  T4 `  K/ o- ~8 M! ^

1 l$ }  o5 t/ Y* S2 ?char *去掉char首尾空格(const char *str)
" M9 {# D: h( |3 v/ I% m! H1 b5 E{
& g6 F# V# y1 [        static char line[133];: b, a4 }: a7 d4 q* l4 o# h0 D3 L- }
        const char *pbegin;
) R1 N. i% y% p* V        char *p,*pend;
( V' N; T/ w! z0 Y        int i;
! n. G9 f7 F( N$ T+ T- S9 @* c3 U' ?- Y# d
        pbegin=str;
' {  l8 u- K& J        while (*pbegin==' ')
$ l- v6 F9 v2 a' v                pbegin++;
( ~1 U" {: v- x3 }0 }1 n
( C: ?6 ~; _: y        p=line;
" J* T; o( r0 x& z7 Q* V- J        while (*p=*pbegin){5 N$ u2 g. b: d3 L, M0 V1 d
                if ((*p==' ')&&(*(p-1)!=' '))
9 T4 i5 `" O% u3 S+ C% ^                        pend=p;
4 u) \- q: N' |! y6 p, U. y                p++;pbegin++;        
: I7 ?5 [6 C) f8 ?# l% s& V. g$ a        }
; L0 V5 @8 d' L5 @$ M: ?% P        if (*(p-1)!=' ') pend=p;
2 D# u+ c5 R8 j0 m9 G4 `        *pend=0;
$ P: U" k0 i  g( A! F2 O        return line;
) N, R  U  H; N6 I* T! B8 y} 1 K* N+ r* t: h! ]. L2 T
& C9 b+ a0 n9 B" x- L# T; E' l
8 p& _9 R; z/ V6 e. A
//获得网页信息 - 网页信息是中文会乱码 用英文信息
4 l' h2 A& b1 k4 C3 uvoid 获得网页内容判断外挂更新(const char *Url,char *html);( B6 y1 _  Q7 z: V3 X% H
void 获得网页内容判断外挂更新(const char *Url,char *html): D  o# e0 |/ L& H) d
{
3 M; J# g$ o& o" c$ F7 Z& C        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);; j+ |# H% E, A/ d/ s
        if (hSession != NULL)
4 \/ s! B" {" b7 U( S        {( R7 }; \7 [9 |9 Y. B/ p9 U
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);- l9 T8 D1 \5 h! v/ {, t
                if (hURL != NULL)& N7 x- i4 a1 E; B+ m
                {! ^8 K. b& l, N- X
' K, t0 Q  F3 s. \( N
                        char Temp[MAXBLOCKSIZE] = {0};8 H2 y5 N9 O! E% M. i- J* m
                        ULONG Number = 1;
6 h2 O: j) X0 Z) b1 d: O: {7 a                                while (Number > 0)
% m& R$ S! e6 f                                {, Y; `* G1 j" R9 F; B- R
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
; |+ g# R3 M3 @  q4 g5 K) r4 A                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
6 {: s3 `  Y1 |/ Y                                        int a=strlen(Temp);
  z/ ~+ o1 }' N$ }  Q, D& a                                        int b=strlen(判断版本);   
7 ?) R, W* P& C6 t+ [                                        if (a>b) 5 z* c% w4 I. c( ]! T+ M) C5 H
                                        {$ i9 ]5 q, _0 N  |7 J+ `
                                                char *p=strstr(Temp,判断版本);
7 D! P7 E0 x2 Z5 ~3 m                                                if(NULL != p)
5 Q; W8 l' \9 T! Q  N% B                                                {          9 q& ]# v) A7 n0 `9 i
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置! p6 @* [0 \1 E  [, M( C' H6 Y
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
3 v9 ^' G$ K% R$ I8 `7 q                                          char s1[132]="";5 \) L; p$ M, H( R
                                              strncpy(s1,Temp+wz,wz2);3 n3 c3 }% [0 H, _- Q+ P, X
                                                  char *p2=strstr(s1,"MEILEI");2 P! ?  D4 ~0 u1 G# T! _% s) \
                                                  if(NULL != p2)4 f9 ~& I6 Y, B8 g1 F
                                                  {  
7 ]3 r3 |& ]) u2 U* t2 W3 W                                                          wz2= strlen(s1)-strlen(p2);
9 w6 [0 Q: h7 c                                              char 最新版本[132]="";
3 ]. m/ z# ?0 r% ^) E' z                                                  strncpy(最新版本,Temp+wz,wz2);. \/ v" e+ O) Q% W% f/ D% `/ {! W
                                                      if (strcmp( 外挂版本,最新版本)==0)9 q5 K. d  y; g, g$ T7 f
                                                      {
, u2 P( ~1 P" r  ^* ^  D, X" ?                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );8 e; ~4 S  H" R9 U) @+ l# d
                                                      }6 l/ M- V" M2 f9 x4 P8 N. R
                                                      else5 E  G" {, L9 b5 v' i$ X
                                                      {8 J2 y$ \& r1 I, u+ v0 ]
                                                            char msg[256];
5 c, U6 q  `, B8 W                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
6 e" i% a% e) {0 x- X1 ^4 y, j; I                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );: d! Q1 G- s$ B8 I7 u4 e
                                                      }
. I2 D) ?8 @9 f  J4 `+ v0 G/ a                                                   }
) M" N! T# d5 U' [- ]                                                  goto LH;! `1 N& z( s( a
                                                }* J4 B6 S: l0 c! k9 _6 h
                                        }5 T" Y8 ]4 A& f/ ~
% h" T9 M6 d- _2 f' B5 O- a; k
                                }
. T/ `& B2 E. X2 r4 N# u" ]                                LH:;
9 E. I3 e1 e! C0 Q; T& Z  d5 {                        InternetCloseHandle(hURL);6 G$ I; c. X8 A8 ]
                        hURL = NULL;& w1 M# J% Y! |7 j& @' ?" _) X! r
                }
- N! J- ]7 E. t7 t; s9 `/ O- a1 ~0 ?$ {5 S
                InternetCloseHandle(hSession);
/ T/ P6 {0 ?7 t/ s  [# h                hSession = NULL;& B2 V7 Q: R) g! R+ Q; G3 f8 Y
        }
% H, T( J0 I  j; R0 k: m}8 x6 R0 d$ g- _5 T  Y: z

4 _5 |- r+ B/ j& _" y0 k6 X0 p6 F- X( z0 v5 P8 b9 F+ T% ?
//----------------------------------------------------------------------------0 m$ I+ p3 Q( K* M. \
//  Activation Methods8 v' H. t- D" t
//----------------------------------------------------------------------------
: h; o- l' w+ U0 A, |1 ~& }* k1 {* _7 t- d+ h6 i
//  Unigraphics Startup' M; \+ ^3 D' ^' S: L& B% c! y% y
//      This entry point activates the application at Unigraphics startup
: ]* u% H4 c2 ^' k0 Zextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
  b. ~2 q& ^: Z  F0 s/ o7 ~  U8 w{( S' j( i. L# S5 M. r
    /* Initialize the API environment */
$ _9 u* V: k0 B    int errorCode = UF_initialize();8 L$ y1 @* V) ~

9 T  q. Y1 Q8 G6 \2 M' ?! q* p    if ( 0 == errorCode )
, O+ [0 J. h: g. y" M  M4 d: {    {8 L. \0 {" n' H* W6 w
        /* TODO: Add your application code here */) i$ Q! @2 j8 `' M& C* v2 Z; M" [

! m0 K* p5 M( v! f- @) b% A% m, Q, `6 P& m5 z% M0 n
                //百度云公开链接 通过修改txt文件标题
8 f+ l' h% U: o, ?) C2 c                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt9 @: b6 p- {' t

, }% O9 n$ f8 r* t" t3 W3 t: C2 V6 K, m+ Z8 ~; O
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  8 M& m* X; {. ]3 q( _
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); ! U% i: n% x0 {& Z, m* a
                & \6 A- r. Q8 C- F! p& ?' W. j
        
' h3 w! |+ p; ~0 C) b; t6 F9 Y- n
6 _% T( o5 h& [& r
/ e$ W( Y( G1 x' r: L- P- ]  d) g& v* I7 {! e+ p" Y
        /* Terminate the API environment */
7 c" H/ s) A  Z: B+ Q* c        errorCode = UF_terminate();5 I) w: j& w& _# I! O
    }& ]$ S( P: U: _. A7 p$ f

1 D8 e0 E5 F( J% A% j1 ?    /* Print out any error messages */
, @" V/ q) h% G1 u5 F1 `" jreturn;
0 }* p8 ^! B1 M' u( K8 ^! n}
9 M9 {: ?9 Q: k  b) H
& H3 w4 M( [8 x+ y$ _//----------------------------------------------------------------------------
* J$ W$ j* a$ y4 b//  Utilities- @' I0 M/ G0 m2 O
//----------------------------------------------------------------------------
# r8 ^7 Y5 K2 L. J$ `
: n* H4 L, g- B% y, N" v# \. w// Unload Handler
1 l, m( O- A& h) F/ Q//     This function specifies when to unload your application from Unigraphics.
: s& `. l: k8 y  R) ~6 L+ l7 m//     If your application registers a callback (from a MenuScript item or a  B% ]6 p: z0 C& S9 L0 i9 D8 S
//     User Defined Object for example), this function MUST return
) ?' P$ t5 }, v4 ]) n* N//     "UF_UNLOAD_UG_TERMINATE".( `' S* J; q% i+ b; W/ t0 m4 A
extern "C" int ufusr_ask_unload( void )
: r, }! I9 U4 @# V! ?4 V{* S* R; u0 R) [, v. m) a
    return( UF_UNLOAD_UG_TERMINATE );3 c: g/ K/ i( _% P$ i1 l1 @
}
9 D0 m- V2 l. p7 f. V- Y  `& c5 R7 K6 t
( u  [3 e$ o2 p6 b" K
启动UG就启动dll的方法' K1 Q# y3 q( @
" h2 n% ^1 w  I  y
方法1.添加环境变量
! ?/ u% d" P) Q9 F7 L2 ?" L9 Z! E$ mUSER_STARTUP=D:\MEILEI.DLL- C( }+ K- f. H0 i  ~/ w2 y" E
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
# o  s: m/ Q$ z$ @7 |( J9 ?* r7 [. C6 f  B! I# X
方法2.在代码里添加(可以执行n个dll)
$ q) k% Q. e6 k5 lUG会自动加载 startup目录里入口点是ufsta的dll
! j0 B9 g2 M+ S4 O% o  v% b% N  i" x) }" p+ L8 ~* f8 l* ?- z, X
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
/ G  l5 b# C8 R0 Y参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了$ J& Q0 ^) `( \% q3 y

5 c# J, T4 d7 R8 k# D0 _" e. Q) I菜单参考  NXOpen_meilei.men.txt
& I: ~& v- s7 ~: \) u) n1 l4 B9 y  t! Z
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
2 O7 T1 N9 O9 M启动UG就启动dll的方法源代码下载& P8 A& I9 r8 }& a
启动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二次开发专题模块培训报名开始啦

    我知道了