PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
4 E$ L* G, w3 s9 ^; S9 v* I% ?8 a
如果你想每次运行UG 判断 ug外挂是否更新
4 D) c' N7 o) l- i3 t4 A0 ]/ K
! h+ B6 G8 U: V
# ?# i3 V3 J5 b! F* O: F6 M原理:+ n, I+ E8 Q7 Z5 G2 ?: P
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了  E& \& G" F+ P" B, j* ^
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
+ \% f, p) x1 s' }4 P" s
/ ?3 V$ @4 B( |: u
: Z, O+ S% c" p( ^3 Y被启动的dll程序源代码,如下! j  c) S% t. b$ Q( E! Y2 h
& r1 ?% T0 e$ Y, R, S7 ^
//  Include files
7 z7 c! u2 ~$ M4 `4 Z0 p#include <uf.h>! z8 r& F% Y1 ^
#include <uf_exit.h>
! {7 G" T" v) ]: N! R$ O6 c4 Z0 k- B#include <uf_ui.h>
! ~7 M4 k2 _4 M/ m  h8 r7 x4 G#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
* c' V. a& G0 V4 x& x; a0 m: I/ D* p8 q#        include <strstream>
7 R$ ~! i: U% K, m5 V8 E. N#   include <iostream>
2 Q! J/ G! u* i- D8 ]6 H        using std:strstream;
2 `/ V5 b4 n5 m) ]! {/ d        using std::endl;        + ~7 h% Z5 a! l: `5 M9 |! b
        using std::ends;
, Z' C- p0 K, [3 n        using std::cerr;9 m1 J$ @- j7 z, e: x
#else
4 y% b4 g8 y3 ^#        include <strstream.h>
+ U$ L: A9 ]5 R/ @( l  w#   include <iostream.h>
- _8 s; q! ~. w% {, y9 P: ^  Y#endif4 A2 k/ p+ a9 r3 d8 f$ R0 h
#include <string.h>
5 H; x/ ?4 ]; D5 \, V# u7 L#include <afx.h>* a8 f0 _: R! d6 P
#include <windows.h>% {3 S! Z5 F, i4 t0 _" W
#define MAXBLOCKSIZE 1024
" w# c1 F- A& m8 M) ?1 t#include <wininet.h> //网络, K6 s, j* F) T7 k& w2 P7 p9 [- N
#pragma comment(lib, "wininet.lib")//网络
& ?2 B8 a# U' T; H4 I  O/ q- C& z% p) w9 n
char 外挂版本[132]="V2.8F";
8 O- A3 b$ P! \6 X6 p  ?! a1 B3 I, ~
8 [" a# R! e1 a4 o9 f
$ g  s5 Y1 Z; L7 {8 d) kwchar_t* CharToWchar(const char* c)   //char*转wchar_t( i) u# i+ O- q" `- G2 m2 N" Z
{  
* Q2 e9 H% X- R0 J   wchar_t *m_wchar;# j2 q8 L) o; N2 l
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
) t  H, `  S4 h( A. K    m_wchar=new wchar_t[len+1];  
# h* ~" G! B9 R    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
% Y$ o/ M8 c0 R/ x. C! H    m_wchar[len]='\0';  $ S' W2 q  j! ?$ J" v! }: {, t% _+ M
    return m_wchar;    @7 @# u0 `& k2 C9 [2 w
}  " j/ k* O" j: J$ f4 b* a
8 D" q6 G" _9 ?: _7 U5 w
//TCHAR 转 char8 A( R* k" E. {; T" f) p
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  7 H( H0 `) `- p9 T) o. k- D
{  , K; s5 d" q( h# H' j( g
    LPSTR pszOut = NULL;  
& {6 m( X6 z. C( {8 R9 U6 q    if (lpwszStrIn != NULL)  
4 i- P+ [" }  f# r: Y- u. n    {  
  S7 z. g4 d2 G        int nInputStrLen = wcslen (lpwszStrIn);  * ~' v& B+ Q. r) Z4 g4 X  @; s

+ M: N' ~+ Z- G. ?( v0 P! K        // Double NULL Termination  
; g8 @+ z: u2 u7 O2 J5 t' c        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
% z- k. j. {5 {6 S        pszOut = new char [nOutputStrLen];  ( N3 u6 P: s: m  n( i- ]. P- q

3 T2 L2 ~4 e; h/ V        if (pszOut)  
* O. e( |5 S  `& z5 F        {  
" ^& ~/ h- f( l+ P. h  D            memset (pszOut, 0x00, nOutputStrLen);  ) u9 r1 G) |0 J7 i" Y5 Q
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
2 O+ f7 j# L, Y3 @3 R. Y! M' f        }  
( }! ~# N9 U7 r' u    }  
* X' i/ I6 u- H" {0 F/ M( B) M    return pszOut;  + [2 [( y' g, H  T5 _9 r
}  , w, E; v; q0 d# M4 h2 n' f

. y4 ~; g% B- W% V0 Z1 R6 G# A  ~5 g9 M4 S8 j" y/ T* G
//CString转char
4 L$ F, s, _+ I; z) Cvoid CString2Char(CString str, char ch[])
0 K% A6 p- g4 ^/ l2 g{3 U" @8 q% p+ \0 Q* O
        int i;
$ q  L$ K- L" L. n/ N# Y  z        char *tmpch;4 ~* ]3 R7 C/ Q2 q" @% k1 q3 c' t
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
: U" @! ^/ o1 |7 ]        tmpch = new char[wLen + 1];                                             //分配变量的地址大小$ j3 |' W# W8 B; h3 [
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*2 k7 w- ]- c) W9 Q
9 J; I5 k# }- \" d
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
! t. u# r( w6 y; |        ch = '\0';
* |6 x! d+ |4 A- l. e8 s}
8 a9 @, g: H- P% O9 T% W9 p/ j* O& U! z( y

7 e7 {1 v. s# jchar *去掉char首尾空格(const char *str)
6 ]$ S: @" \& J5 l{1 P9 y3 q/ e( c* n2 e
        static char line[133];
9 T" R4 r- `, w, f% F6 C        const char *pbegin;0 ?# F7 ?: \; p
        char *p,*pend;2 ~; m: j6 _1 _/ Y) [# n0 [
        int i;7 v( s4 B$ Y# _  O. P& d4 S
6 ^! X4 n! A; Q! N3 X8 z
        pbegin=str;
( v: Z/ T8 k4 @, `' ?0 d% j' B        while (*pbegin==' ')  A7 Z+ |% o# m4 A) |9 P: v3 s
                pbegin++;
2 S7 A9 S6 S& D2 h7 E1 B7 L
  A. b0 I  u; U' F. ]2 {* ]        p=line;
& z0 S! q2 Y8 D, e        while (*p=*pbegin){
1 }) b, E+ {; g. w  u" d/ Q                if ((*p==' ')&&(*(p-1)!=' '))
7 W1 H0 }9 ]* @: W                        pend=p;
: {0 \: @) ]. t7 y                p++;pbegin++;        ; P$ ^7 r( @% q+ P* y
        }. l& z8 u# q" c  m8 |
        if (*(p-1)!=' ') pend=p;
' H2 I- r4 D8 C& k0 I        *pend=0;1 M% M* k* S' q; E, g, Z
        return line;/ S4 n8 t6 b8 o- B% [
}
* j: T. {2 q# j+ L1 ~& j+ N3 F
6 @" w' F8 \8 X: u$ h# B
8 j- r6 c8 V/ R//获得网页信息 - 网页信息是中文会乱码 用英文信息
1 Z0 w3 g1 j# _3 Cvoid 获得网页内容判断外挂更新(const char *Url,char *html);% c1 u9 h& g0 m& v9 F$ x# O
void 获得网页内容判断外挂更新(const char *Url,char *html)8 d& F, W) {0 I+ w2 C0 ^% L
{4 F/ h' y- S" _& [9 w
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);1 D, Q3 d* x" C! w3 v# o5 K
        if (hSession != NULL)
9 y& K: Y3 }5 ~5 t2 C        {
2 C' E& ]0 y" K& u$ X1 a$ d# \                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
* A, p; s1 w5 U/ L- z                if (hURL != NULL)( t( r0 H. K5 J: C7 S5 {. y
                {
1 `' E. c9 R4 s; E  a  m
) y2 Z, c7 I9 m5 ?                        char Temp[MAXBLOCKSIZE] = {0};
, R" N, W4 m) h7 q. b/ E                        ULONG Number = 1;( w, n+ h' C, w1 v0 q0 c4 H; v
                                while (Number > 0)
& ^, }& s6 W4 ]% u, e& k                                {- Z1 j& C8 ]0 X0 M
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);8 e3 o1 x2 P$ H$ z8 |
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
' q7 E& P  {6 ^; v. c8 \                                        int a=strlen(Temp);8 K9 e( Y5 X% Q* v( x2 q& z
                                        int b=strlen(判断版本);   
& H4 c. Q& x. w, y$ L) S& m" [0 n                                        if (a>b)
) O% z3 [; j1 ~4 v                                        {
" W+ v0 a; ]# b  ~+ Y* K0 h                                                char *p=strstr(Temp,判断版本);
, z: b  X! P+ p2 M0 d                                                if(NULL != p)
: i+ T: w/ r8 J# M8 d                                                {          - s  v+ Y% w; N  s+ l2 k
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
/ T& [) t% O1 S2 |: h8 @% W5 F                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;: w% x' w5 J, Q( v) N  M/ ~2 [
                                          char s1[132]="";
% `+ v1 f" W3 R) W                                              strncpy(s1,Temp+wz,wz2);( \2 w" I& M7 v
                                                  char *p2=strstr(s1,"MEILEI");5 |- X# r9 l2 ?2 y. p
                                                  if(NULL != p2), l; B8 r8 k) o1 [0 W) v
                                                  {  
+ H$ ]8 `) c- O, v0 g1 q* H                                                          wz2= strlen(s1)-strlen(p2);0 {" e3 `! O: b
                                              char 最新版本[132]="";
1 s6 G% J; E4 y" P9 Z+ A                                                  strncpy(最新版本,Temp+wz,wz2);
' s7 A2 A' e7 d# D  s- H" J+ I                                                      if (strcmp( 外挂版本,最新版本)==0)  U" k% c7 B- X: v
                                                      { 6 R! }4 w2 D# _; o' }
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
3 E7 r: A, ]6 _                                                      }1 Q9 ~6 y1 m8 W# Q1 _8 }' c3 l
                                                      else/ b$ `% x5 X1 k
                                                      {* [% _+ T$ J1 \/ [" o0 ?
                                                            char msg[256];' |% [% c5 g7 l1 A) U7 l9 [
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);' z! H7 D3 a7 j& V( R
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
0 x/ d5 F$ F- [1 P6 G                                                      }
6 y$ y( R( [! G; F/ t* F9 o                                                   }$ M8 g$ G1 ^0 ^% f! `3 L( Z) k
                                                  goto LH;& R- ~# N/ E6 i) k. F# F6 }* E
                                                }( c1 i2 T. U, r4 }# m7 @, y
                                        }
6 }$ `5 i+ K% n/ u0 U9 d- x1 u
8 Q7 J/ [5 S* v7 P. b# x; h5 j                                }
6 v3 @; A8 _2 c- o# {# D                                LH:;
4 p  V4 r7 r; p( e                        InternetCloseHandle(hURL);
, F  M. M9 t; g                        hURL = NULL;
. Y% g' E9 ^, b+ H                }
- L& m# o3 I: m: @# m& p& v; F. n1 w- w/ i) W- S
                InternetCloseHandle(hSession);; P3 H* z* J! P- @1 p6 w7 e- `
                hSession = NULL;
7 |1 h) r8 U* e4 w* a        }+ O& I" Q0 R) d* t: q- _
}- ]4 U3 R; y3 W
- g. k* E2 b7 G* ~9 G! a5 I

# m! C0 g* d; Q7 Z( H//----------------------------------------------------------------------------; {  S3 w+ x! K+ I' j( Y5 _, t( `( M
//  Activation Methods
$ g6 X% W# s) `8 T: |. |8 ^$ n//----------------------------------------------------------------------------
6 p# |& [8 j" _5 P0 R+ A# w. [1 {! |  t6 i) N7 U
//  Unigraphics Startup. X& N# K3 T1 V/ k
//      This entry point activates the application at Unigraphics startup- _+ J0 L6 P+ b
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )+ w4 W' g: ?2 `
{' j! {, E) d0 d) T( h
    /* Initialize the API environment */
0 y! ]' O& _, x$ f    int errorCode = UF_initialize();
  ^( }' c  E6 n; O% j
* y8 o7 d7 o* a& o8 d    if ( 0 == errorCode )% G- o( S; F% v0 ]' g$ Z' W# _
    {
- l( x2 |5 B( U& B8 J6 T1 }        /* TODO: Add your application code here */
  Q5 L0 z- R/ X0 ?/ w( W* x4 P
/ D9 [. ^& y8 P5 W3 r3 e7 Y5 x# M; U% _- C& r6 _$ ]; x
                //百度云公开链接 通过修改txt文件标题) S! K1 M  h  f% Y" p( w& C
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
* ^7 F3 B5 K- j# D" g- p: g1 m  Q4 i9 N; n  V3 ]$ i& D. Z# R- ]( s( j3 A
. O9 S& ]( K. Y* m- S
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
6 F9 C6 \* A3 S- q                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 3 c# |+ S2 S7 _
                & M% x. v. }: g5 r3 o
        
* Y2 l6 Q; q( k5 r6 M+ ~( C; v9 A- c5 F0 Q

. U" {' ^+ f! Y! t' a. c) h6 ]5 g, \5 b2 Q2 H: L8 p) l: J
        /* Terminate the API environment */
6 P# u) B8 L0 i& l1 I1 C- D        errorCode = UF_terminate();
) l0 E# ?. y5 g" H! I    }/ G5 n0 y9 r  j6 p
  s9 ^2 z- ?; V) ~3 w
    /* Print out any error messages */
7 O, ~  X$ o& Zreturn;
0 C! p# |, h" P8 n) C- q) G5 c, ^}- b# m7 ^  f7 j( l  W7 X" P
1 b- k! }- ^3 i, k7 Y% n" K/ R
//----------------------------------------------------------------------------
. {% f! ]3 L8 S; A; K/ `//  Utilities% o/ X" J+ {% E. l
//----------------------------------------------------------------------------
. c. @* r0 ]; D9 M3 N! E( R! \8 @' U: G& H6 V3 P; O- E
// Unload Handler
& [6 q; b0 }$ k5 F% y  t//     This function specifies when to unload your application from Unigraphics.
6 n' L/ y) w1 U# ~: I3 i- ~//     If your application registers a callback (from a MenuScript item or a
' `0 m) u9 U$ M. d2 W//     User Defined Object for example), this function MUST return/ k2 J6 U  ?9 G! \) W+ ]
//     "UF_UNLOAD_UG_TERMINATE".
0 S" l9 D6 b( R5 g5 oextern "C" int ufusr_ask_unload( void )2 _% r. i( N7 v
{
. y/ \$ y0 R/ H, a' c    return( UF_UNLOAD_UG_TERMINATE );
3 n0 g& ^9 `* |' }0 c9 |}
5 D9 J7 K0 U; ]9 }2 Q, @# {; ?( ~) V& Y0 l( O

; W- {. ^# C$ i7 z" \* q" k启动UG就启动dll的方法
0 w) G) ~1 _' l. M7 _% Y- X
; ^; X, b) o7 o. q; j5 r; k方法1.添加环境变量
- B1 j; ?0 {3 H. G7 w9 a# JUSER_STARTUP=D:\MEILEI.DLL
+ f; s$ x& s# V; M- ^: }; R4 ~3 h但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
* K# ?+ x2 x" O4 t; M! D5 y+ @2 ^$ G6 b/ Z" c5 S9 v( W
方法2.在代码里添加(可以执行n个dll); L5 T: x9 j7 l6 ^1 T
UG会自动加载 startup目录里入口点是ufsta的dll) x$ B% X/ g& f
* U  q# H6 a( a- {
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令' x+ n: [4 Z6 F  l1 V3 N
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
% o0 w5 v* g  p( Y5 v  \5 C2 t, G( q2 k7 k' A8 ~- g  ^6 L5 B; j; w3 G9 }
菜单参考  NXOpen_meilei.men.txt
5 m* m2 g2 h: |5 j; F
+ B! D) }- V& oDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录6 r, ^' m1 r  l
启动UG就启动dll的方法源代码下载
! p6 O9 H2 b4 G! r$ s' G 启动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二次开发专题模块培训报名开始啦

    我知道了