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

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

  [复制链接]

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

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-11 15:45:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 ( S# P+ {% O, T, f* f! f
1 _0 \  L5 z( z3 S, l% v
如果你想每次运行UG 判断 ug外挂是否更新  M" C* }- m6 l' D% c+ q
7 q7 X& n( f* S; A7 ~( O# }' [5 R

6 k. p1 C" B1 x1 u; n% ^6 ~原理:
/ t: f6 K- S9 w& a4 A0 G8 O) B自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了# }, J. x+ h/ x' ~% P# W
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断+ s$ U8 q% l7 |) n. O( W; M* E2 w

9 `* z0 `( F9 T, K; M& @; b0 v! l% S# v2 F' t5 T
被启动的dll程序源代码,如下# r% [, n3 g& ?( j" t% _, F8 K" c
* @. s. Z6 B: C
//  Include files6 x# j1 y, M' i  C+ }% K
#include <uf.h>
6 Y; P# ^/ |& r, t9 B#include <uf_exit.h>% e  k6 J( I8 s! \1 }' d3 i* _
#include <uf_ui.h>! h" D8 p, z' N& `
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )5 q4 ]& @/ ]: f
#        include <strstream>
+ T( J$ O0 Y+ Z3 b" ?, i! z#   include <iostream>" Q7 v& ^5 P, C9 A+ r
        using std:strstream;
: U% o9 ^6 E) G- X8 h/ c        using std::endl;        
* F( [6 {4 F# t9 S- D        using std::ends;
9 m9 a6 j4 ~. R1 H) M* d        using std::cerr;
4 m8 a! Y" z/ ~5 a#else
/ c( {# z0 |2 D# f0 |% d1 w#        include <strstream.h>
+ N2 c6 {5 L! F" d#   include <iostream.h>' O7 l6 J0 D" L# V4 @
#endif  ]7 s$ j  Z3 F$ f" |  `
#include <string.h># L- p- k, k$ {- x1 I
#include <afx.h>) A1 R  k: U/ E3 W& b) Y( m$ X
#include <windows.h>9 x4 k( Z0 X. e, Y! [
#define MAXBLOCKSIZE 1024" n3 a; B5 K: p; ~2 a$ x
#include <wininet.h> //网络- s' |- I9 o& @3 b( s1 K9 u
#pragma comment(lib, "wininet.lib")//网络
/ ]/ ~& a7 W8 T7 }/ O: |% t9 i( q% P, B6 F4 W
char 外挂版本[132]="V2.8F";
  r3 m" D9 ^& g4 C
) t. U7 Y) N8 z  l6 t# g0 m3 J( B2 U! X6 y
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
4 k6 N/ r4 y  u9 p2 r& Q; J. I4 ^{  
. W% y& d5 }: G8 s" b- `; U   wchar_t *m_wchar;
+ i5 m" ~4 O! J7 S% K' a    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
# _* ]5 m  q+ K  c    m_wchar=new wchar_t[len+1];  
' R: r) D, e& R, u4 x) H/ n+ G$ c    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
8 M" M; r3 I7 p' w6 g    m_wchar[len]='\0';  
3 A% i- U8 a2 [& I8 C    return m_wchar;  
* ~8 I6 q7 T, _; w) L# U}  
1 o# }$ ^! x) x- r9 C+ L: B6 q2 J& r4 o3 j, b
//TCHAR 转 char
# |0 E3 L# ?2 Y6 Fchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  7 E( d) M- V2 M8 w
{  . t8 q: S" n1 A, [0 a1 z& v
    LPSTR pszOut = NULL;  
) K: n# A% u( U7 e9 z: K    if (lpwszStrIn != NULL)  
: F& c: @' @4 |  N- k    {  
, F- ]( @) C4 \& K1 ~: v5 J: v& t        int nInputStrLen = wcslen (lpwszStrIn);  3 B5 g6 F: G$ u  O1 w) A' X3 ~

! ?. Q! r; B" H* i, X        // Double NULL Termination  
$ `* c: U# H1 ]) y. M) ]/ d        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  2 d5 D6 h+ q. s/ r% E6 x) f7 U
        pszOut = new char [nOutputStrLen];  & ^  r3 u1 m1 `3 {& E
  b. Q  ], [  p& ~4 g2 F
        if (pszOut)  
% S3 F9 n' S9 l. T3 K, [        {  ( Y5 ~0 p6 `7 X/ q3 t# x- _4 c9 k0 W
            memset (pszOut, 0x00, nOutputStrLen);  
& n" {2 V( l' e8 l" _            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
/ x4 j" S3 ^6 A6 K+ i: K; F+ I: ^        }  / Y8 k; F/ [' E& W2 c
    }  
4 z+ H; J4 k" h; \2 o8 |9 V- s    return pszOut;  % ~& i- h) y) M, v8 @
}  9 |: R5 l! G. n" s' R

% f  v: s  Y8 Z9 x3 N$ J1 O1 l8 w3 j& |, }
//CString转char, M( M- }2 p- c" ^  h2 l
void CString2Char(CString str, char ch[]); z" E6 ?0 S0 n  W5 q
{
$ N3 _; Z8 K) o+ p5 b8 ]7 T: u        int i;' v" g. E( a" Z
        char *tmpch;9 X2 r( h6 w# U
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度2 a9 R( I7 c' {9 C" x
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小# T) w' }3 Y1 c* ]8 t7 C
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
# D: ~% w7 l1 ~% v2 o4 E8 K: w; E
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;7 g8 ^5 B( U) p7 Q/ q3 q
        ch = '\0';  z& M6 a; c2 b& ^: j$ e; o7 ?
}7 o6 j. d' b. [; M2 W9 U9 n) h7 X

3 {+ Q3 O' s9 _& p
9 o) f3 A" u. K+ ^3 Q6 z) bchar *去掉char首尾空格(const char *str)
7 G. ~! d- n( i; J( M! B{1 I0 R: e$ @) v6 {7 a! L
        static char line[133];4 {* C" T) z/ z5 |8 D
        const char *pbegin;9 ?: c; O$ z# S$ G9 A6 F' W
        char *p,*pend;$ _. t1 v1 p% T& S2 x
        int i;
4 ]! g9 \+ j- @7 h) S; X" ~; b/ e" n& U6 |
        pbegin=str;
) u; \; p1 A% p& ^' i, R        while (*pbegin==' ')- h7 o* M, L  W( x( F2 P
                pbegin++;
3 G; p8 V3 ~2 H* V6 \; I: x1 z  W: _9 L  A
        p=line;
" U6 ^0 g3 a& R3 u        while (*p=*pbegin){
1 D# y  G. r" V) Q                if ((*p==' ')&&(*(p-1)!=' '))' x4 x6 B. Q& M# q1 I/ U- U; s% D
                        pend=p;5 m* U2 Z4 M9 y+ d
                p++;pbegin++;        
: }' x3 c% A8 G! a        }2 K7 @7 f+ Q' s! z0 d* {
        if (*(p-1)!=' ') pend=p;
" q. m7 w- D0 E1 O+ s: s* L        *pend=0;
. Q* Z* E* C* k3 Q6 T/ w        return line;3 c! V6 y) g2 V) `& m# {  N0 P5 H
} * u2 ~# x# W3 N! }) d, u& \9 U9 ]

* P' U# N( p9 ]
. t$ a& y& n0 v4 c7 ]: \+ a/ C//获得网页信息 - 网页信息是中文会乱码 用英文信息
8 m3 Z* Z& W8 [void 获得网页内容判断外挂更新(const char *Url,char *html);9 a4 I2 G% z  s7 B/ V
void 获得网页内容判断外挂更新(const char *Url,char *html)
, W2 N' l7 B8 Y4 l; v{, p" r. Y5 X* O% `$ q3 K4 m' [
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
! ?# T% |9 o1 E! O! l  s* C; y5 e        if (hSession != NULL)
( N3 a9 x' Y: ^" e        {
- n7 o2 J3 D3 R5 b, {+ V1 W                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
& Z. Z  ?. \% F. p8 u/ Y8 `7 ~                if (hURL != NULL)
4 F" F8 H1 L) M/ R8 Q                {" t! I, z! V3 t

2 o6 g; S% T6 J6 y3 t$ U9 H% I; }                        char Temp[MAXBLOCKSIZE] = {0};
9 x) {% P  Q5 m: P& E* ?* Q                        ULONG Number = 1;
/ s6 J2 R8 Y2 D6 [" _) s                                while (Number > 0)
" u# K; v" \& b2 S, f                                {0 h3 }, j- s2 q0 X, v) T7 D
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
4 q/ ~+ B0 k/ P* ?                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";/ ~  }9 h# o1 W1 T1 I
                                        int a=strlen(Temp);7 f4 K5 b5 A  J  \1 X
                                        int b=strlen(判断版本);   - b" B2 H% m. x3 _* c3 l  E: c
                                        if (a>b) $ T2 Z( W/ a2 n
                                        {: s5 O0 g1 d. X$ ?3 m
                                                char *p=strstr(Temp,判断版本);
4 e! \0 l) T* Z0 d4 f1 F: T                                                if(NULL != p)( l/ U  \, Z& L7 X: }
                                                {          4 v9 r! r4 S+ Y( o7 s  o
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置8 d' k. Q; B& g& x, {/ k1 p2 Q/ Y6 N
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
, I5 v5 U9 z, Z! P: B$ f                                          char s1[132]="";
# p5 t5 Z% |9 u4 V& r                                              strncpy(s1,Temp+wz,wz2);& f! {. C$ Y' z% B
                                                  char *p2=strstr(s1,"MEILEI");
4 H& d6 p  O- s! l3 U                                                  if(NULL != p2)# S* S) ?; m3 W
                                                  {  
* G4 M/ ?2 [& A3 E: u/ q8 k! `- P. ^                                                          wz2= strlen(s1)-strlen(p2);
+ {- Y6 D( _  v$ U, L                                              char 最新版本[132]="";
" W, S& P& @2 I! R6 h                                                  strncpy(最新版本,Temp+wz,wz2);6 c/ e$ G0 O$ S* I9 r
                                                      if (strcmp( 外挂版本,最新版本)==0); @& _( f; t/ `3 J
                                                      { 4 E- V) c; P8 l; t
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
$ {* `7 @: ^; Y$ g1 ?& s                                                      }
" |3 h( n; n- [( |                                                      else; e0 z3 r5 ]" [# U2 y
                                                      {
: t: W  _6 y- n' y                                                            char msg[256];
3 K3 X0 \) v5 c9 j& D                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);) H0 Z! S1 t) m) S! r
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );% e7 |% ?; `1 z( N. x4 M
                                                      }
$ x% c! O, o5 h4 c. V                                                   }, V9 ?$ L! `3 `: {- t/ Q
                                                  goto LH;
5 D1 e* z, _$ a' C2 e                                                }
: A# c" q$ l4 R' W, i+ T1 \/ V- l                                        }
0 P$ F. l4 T* y4 ]3 q2 _/ }% }4 N: A
                                }1 R9 H9 P+ s+ `
                                LH:;% `4 m3 ^, ?% X, c$ X
                        InternetCloseHandle(hURL);
, v, P, N* p3 P: Y2 e                        hURL = NULL;
; v3 ~8 |/ }: m0 k                }
% W7 Y4 g; G. H( D, q6 |' D4 k9 ~$ j1 ?# y) I
                InternetCloseHandle(hSession);/ ]. N+ c6 ^: l3 I, K
                hSession = NULL;; b8 D$ k) O) H6 w2 z
        }
1 ?2 I- h3 d! e) d0 I}
1 E3 }. ^  L# e: f" {. d( U3 K% |4 w0 E1 j( o5 C
8 q: j9 j* \- V! D, a: f' r
//----------------------------------------------------------------------------
4 f1 |0 |! @" h/ l% x//  Activation Methods
' F  o9 U+ l1 A& ?! D  \//----------------------------------------------------------------------------
$ q4 l. Z8 P0 p( `8 Y' t/ O
) Z0 x* }# r: ]0 j1 d//  Unigraphics Startup! D1 T1 U- P6 T; Z8 {
//      This entry point activates the application at Unigraphics startup
: ~- Z# w' a& Wextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )9 X0 {4 w" X. I+ s! z
{
# `) _, V0 i+ }, D    /* Initialize the API environment */
" v  K9 x2 f( U$ l4 P    int errorCode = UF_initialize();  D/ T# T: M7 `6 c0 @9 x' O- v

- M6 r2 M+ p4 H4 k8 F2 D/ Y    if ( 0 == errorCode )( z/ O& S6 j; K' y3 r6 S0 {- I
    {
9 |- [, a& `; e) f3 R        /* TODO: Add your application code here */
# u) L4 Z; ?9 ?+ E2 i- J
9 S0 Z. x) t+ ]3 o6 f0 i: `8 E: k
                //百度云公开链接 通过修改txt文件标题0 }- [; m3 v% P9 q  f
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt4 S. u  z* r; g

0 t) c: t2 \1 y+ b# R% ?8 q/ G
7 ^* X) Y- h+ r4 D: Z& L                char 网页文件[256]="C:\\Windows\\版本.html.bat";  ! T' k& C- ^. i" q  E' [
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 5 q% Q# u+ N$ B* Q
                ' E6 D$ {/ X! W7 \' n) M  ~( V
        
$ j# |3 l" G$ `1 q. V+ a7 r/ `0 [" E
1 v# _% i+ r' g/ ^+ K. m% @
5 e, p% F  e9 ~$ ?5 K1 p4 g3 d" l9 Q$ C* V( D6 C  H% z- L
        /* Terminate the API environment */
8 f/ n+ j5 \2 V: T        errorCode = UF_terminate();8 n- \. \+ \; ]0 \$ Z
    }
6 G2 i; ^& h. r6 f, @7 s
1 x! m& }" }* o8 u' e    /* Print out any error messages */! Q$ v# z6 I9 N6 r! w
return;; G! Q. H+ G' m$ K: s, P$ k
}4 b: V* Q1 q0 q: {! d

$ y- O9 h) C8 P8 H$ M7 W4 C//----------------------------------------------------------------------------
8 ~7 M( _: s. e# X) S( L/ h7 i, c  X6 p3 c//  Utilities. f3 i" d/ |/ ^2 m
//----------------------------------------------------------------------------
4 Q# C9 W9 ~$ ?! a0 Z0 b1 s
( i! H: J6 Y& l) }  \* K// Unload Handler
" g% U0 }' C0 O+ q! R+ P- q//     This function specifies when to unload your application from Unigraphics.) }, I/ r/ k, ^0 }. @& T
//     If your application registers a callback (from a MenuScript item or a
5 K6 W3 P+ w( k% W( ]( K//     User Defined Object for example), this function MUST return
4 `$ m  I* Q" B' ~1 d9 ~//     "UF_UNLOAD_UG_TERMINATE".
8 f, s0 L( D9 N' Mextern "C" int ufusr_ask_unload( void )# C0 S$ E. m* ]7 K
{, b' f0 ]: m3 }1 E$ e' }% t4 u5 u
    return( UF_UNLOAD_UG_TERMINATE );
' b. _; d( A% |7 j}1 b; }0 v! a+ x' e+ h. t: M
& e+ `# H( C/ V/ {" {

( N2 J6 G5 q2 @6 f启动UG就启动dll的方法3 X) c$ e4 l) S& o& j& Y# r
$ T; h. M5 l; E$ T) U
方法1.添加环境变量
) o) [7 b) Z) Q4 UUSER_STARTUP=D:\MEILEI.DLL
9 R$ Y2 N) G( \( D3 k' _5 x9 t2 k但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了' a2 L6 X4 b8 g* D4 _7 X

0 z$ H7 q- \8 g- e方法2.在代码里添加(可以执行n个dll)$ q7 R) r+ ^# p$ v) t# {8 G( {
UG会自动加载 startup目录里入口点是ufsta的dll
- o: e5 y3 w" w$ ]
  K" F, r. I( c0 c4 F; c) ~所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令; e" c( b  l7 b
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
; _: T2 z; w+ E$ {4 P8 s* p% O( j  P7 S+ c. v
菜单参考  NXOpen_meilei.men.txt
; W  {! a$ E  G. O# Y7 j! q$ ^: C3 ^8 E" }9 @) p
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录2 A! R: N- c3 t( r. J& @- {) Q
启动UG就启动dll的方法源代码下载
) K1 d5 M7 h  D+ v  t 启动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.doteam.tech
回复

使用道具 举报

全部回复1

0

主题

30

回帖

222

积分

PLM之家NX VIP

积分
222
发表于 2016-12-23 19:47:22 | 显示全部楼层
支持下梅大师!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了