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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 9 G! a2 D) ]1 u7 G5 `
! e& B; A9 S* U2 `6 ^1 q( o
如果你想每次运行UG 判断 ug外挂是否更新
$ `) m4 W) }0 D) u& n* t8 e* l6 U# |9 u% h% B# Q

8 ]' x' T( G* o, {0 q* N* y原理:
! q8 N7 `% r5 D自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了9 L7 q& e; V  S1 ^' S5 S4 _
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
/ r3 N5 L& Q) [5 s' t  Q1 [! J
9 f8 g0 l4 j( T1 Q
被启动的dll程序源代码,如下
, x9 [$ m$ R# `) u1 ~9 r# z( l$ |  B
//  Include files& Z6 I2 U$ _  s4 ?
#include <uf.h>8 K3 D& @6 s, H2 O' J
#include <uf_exit.h>+ `$ _! x1 @5 G8 [. u
#include <uf_ui.h>: p' f  p! S2 v' Y& o) H3 s0 \
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
  `5 q+ ^9 B2 m4 B#        include <strstream>7 i. h& v) n4 D6 h
#   include <iostream>, O5 \! }" g7 y  p! Z! h, [/ L# S
        using std:strstream;& G3 m( n/ J! E: D2 L
        using std::endl;        
4 ^* R7 K+ I  k- i+ {& Q        using std::ends;
6 o; O! u5 k/ I* ~9 Z        using std::cerr;
' `! s: b1 ^" d" O1 w/ Q# y#else
) M7 X2 T% D6 h/ b#        include <strstream.h>
. f9 C: k$ q% ~8 L7 u# z#   include <iostream.h>2 J$ D1 z% K9 E, Z# r* w" P
#endif
' P8 P8 G+ Z# s, h#include <string.h>
( _- `2 H- o2 o8 O( z6 }: M. N) U#include <afx.h>' h7 h0 {" e0 u+ a" h# B
#include <windows.h>2 q3 w4 s1 W+ i
#define MAXBLOCKSIZE 1024
- Q. Y" n8 R# g% a' j#include <wininet.h> //网络% z( \/ e# a* d/ u, w; G5 x. |7 ~% L
#pragma comment(lib, "wininet.lib")//网络" d, [5 o  e' M  @  Z- V$ s& s/ o" ~

+ M* H+ I$ b7 u" ^/ u$ Jchar 外挂版本[132]="V2.8F";
8 Y! q# ^8 L0 [8 Q
2 a/ O3 p- p1 g% ]- R4 ]0 q+ I
wchar_t* CharToWchar(const char* c)   //char*转wchar_t  U8 e/ K  ]( A
{  ! \) `) b1 T- o( C3 a1 @7 B$ D
   wchar_t *m_wchar;6 E6 }; ^" {! x
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
" q1 c/ b2 o7 g. D    m_wchar=new wchar_t[len+1];  
  |* A3 U5 {4 X& c' L    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  1 \, F7 b' C9 [9 e2 M7 m
    m_wchar[len]='\0';  
+ |4 ]0 {( I1 w) d/ {9 E- k7 G, E    return m_wchar;  + V# ]3 c! j$ y3 |; H  O1 w# y5 k8 B
}  
* ]5 g, W0 U: S3 s, D- T7 l, l
//TCHAR 转 char( D2 D+ Y; X9 s% C. s/ Y
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
* Z7 l( v3 {( N7 H" ~8 Y. a$ u{  7 k% g, D  @) z8 @
    LPSTR pszOut = NULL;  
$ }& w- G! d% Q2 {& h  n    if (lpwszStrIn != NULL)  , o, R' T- ?; h5 |# k& C7 W' [6 F( ?: R
    {  6 y; `1 w0 `3 q; z" @9 d' d
        int nInputStrLen = wcslen (lpwszStrIn);  
8 D/ N9 U9 J) |( `
3 s* @, Z! U% \, w        // Double NULL Termination  
. ]: J) D% h* k: U6 T        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  4 @2 P( T+ r$ H! {2 l8 s1 D
        pszOut = new char [nOutputStrLen];  
0 B5 C/ ]5 `- D) E2 j# V7 F" B
+ |$ \7 a$ u4 p! G        if (pszOut)  
  u! D4 \1 M" _; [0 r  \* `8 c# \        {    M+ u* r9 ~! z5 W$ K
            memset (pszOut, 0x00, nOutputStrLen);  / M4 L1 ~- M9 k7 K* x
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
7 |) x" p' E* N1 d        }  
* [: P% M+ U$ g% x    }  ! [8 |1 T& H! M: P
    return pszOut;  . u. Y) q% q2 ]  g& R) `. I
}  8 q# R" Q- m# }+ `; m: G# u( e
  S& r4 X3 I4 G3 b
8 @5 h2 A# o( g) d) A: J! L
//CString转char
& ^0 n% z" c! @  M9 P3 Zvoid CString2Char(CString str, char ch[])+ V8 K& N9 N! y
{  F( i' v2 [- e& s7 D$ T1 e" D7 ^" |
        int i;. S5 v& e* ]7 Y; t6 ]9 W6 o/ \
        char *tmpch;! a0 k) `* P1 D7 b- Y4 s
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
$ i0 |" p2 Y7 r1 F  h        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
6 l# @$ d% B' s- v        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
5 D9 |, G; D. h4 m
0 m/ f7 O0 @- X) y2 o6 H4 H$ K        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
) v: _9 P8 Q. e2 G: H8 \, J        ch = '\0';# p6 M% j; o/ R" ^  |1 F) f0 n
}) S! ^& N  V' Y: V7 Q: m% [3 Y
: X+ r  P$ k( y& i
( ~( g: L' J# j7 T
char *去掉char首尾空格(const char *str)
$ n) J& d+ s2 C; K5 B{
, V8 [6 P1 g4 G& ?" A! f  p        static char line[133];
/ I5 Z- ~: l( X; r9 ]7 |: _        const char *pbegin;" A  V$ e, ?% S
        char *p,*pend;+ c, `' M9 k4 C1 |4 `) m% ~9 N
        int i;2 D1 K% k" K4 V+ A+ g
7 X5 ^; S0 Y: F( }
        pbegin=str;
3 M# q9 z: P8 r& i, ?        while (*pbegin==' ')
6 L- I" r0 x% p* V                pbegin++;
! R2 U! G& S; ~, {  R1 l
% l) h  K, i1 `$ n) T        p=line;! r1 C; K) x5 T1 x8 A" k3 g9 y
        while (*p=*pbegin){9 H5 f# H5 o2 ?$ V7 h8 i9 R5 B1 c
                if ((*p==' ')&&(*(p-1)!=' '))$ b$ t6 f) U! K* b
                        pend=p;. w3 c/ e2 P$ i! `* G# u& p
                p++;pbegin++;        
1 K  M, D3 z7 X1 G+ p! V! x        }  S; I  ^$ B- i7 U
        if (*(p-1)!=' ') pend=p;" |2 Y8 J- U+ N0 C' R( e' R( n
        *pend=0;+ Q/ Q7 q% F/ M
        return line;& Z4 P; x. p) g6 E' h- i$ i$ O
}
; q; c& y2 F, _- N) {2 W) Y- T. k* h/ S6 L, `5 p0 R

& d, k; Q: X. X  }; s//获得网页信息 - 网页信息是中文会乱码 用英文信息
1 n3 p! Y) e5 P/ hvoid 获得网页内容判断外挂更新(const char *Url,char *html);
; ^( S" R; N8 x: t( w, l1 w2 B5 b4 Qvoid 获得网页内容判断外挂更新(const char *Url,char *html)7 O& J" s2 d( Z3 J2 w; m
{
" b) e/ p- c! f) O+ z& ]  x5 E" S5 \& o2 q        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
; E8 W% W' Q/ A# D, G* K: O! n        if (hSession != NULL)
# E/ D4 R6 {: d( n6 e$ ^6 U        {
. g3 W* U  j8 L- f, L1 _9 T                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
; [, M! X- L- U( t% ]7 ~# q8 L+ B                if (hURL != NULL)
% e# f" O( X9 w- s& P; r1 W' d+ e) l                {
9 m! S% L, Z  A8 D3 X8 ^  l; g/ c+ G" H% X6 ^7 z
                        char Temp[MAXBLOCKSIZE] = {0};" h/ o3 D! D$ y" g2 M
                        ULONG Number = 1;* V3 g, v6 x( t1 Q
                                while (Number > 0)& C8 _! t& ?% b0 h& n* Y  [9 X3 D
                                {# b) w5 t' |0 s. u5 |; p, t
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);, j0 @# ]6 N/ j8 b0 n. j
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";3 S8 S3 d2 a( ^. {, q
                                        int a=strlen(Temp);
- _5 ?) W6 ~, k. f6 w, z                                        int b=strlen(判断版本);   
# v( _4 r) Q) o# G6 C2 `8 f                                        if (a>b) ; w5 w1 t4 j7 t- o; m, J2 C$ }2 C; j; X
                                        {
7 K  C) X) ~# f% f8 ?: u2 g8 H                                                char *p=strstr(Temp,判断版本);" d1 }0 m0 w# V, V; l# I) H, Y
                                                if(NULL != p)
0 V& r3 y! r' L  n( I* e                                                {         
% f+ ^/ h' `- V7 v& d$ V" f8 @                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
3 `/ v% H6 D: y$ v                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
: [8 `. @# i0 P  M                                          char s1[132]="";
0 j9 g4 Q' b! @8 j                                              strncpy(s1,Temp+wz,wz2);1 s* I& ^+ g/ P
                                                  char *p2=strstr(s1,"MEILEI");
; [' D$ j4 Q' _                                                  if(NULL != p2)! D4 L+ |* |( |
                                                  {  
/ B  ]$ K4 [2 d# {                                                          wz2= strlen(s1)-strlen(p2);
7 C% a$ f# C4 n6 x5 h8 a# V4 L1 L. b                                              char 最新版本[132]="";5 c1 Z- M) k' w) E6 O% i% {
                                                  strncpy(最新版本,Temp+wz,wz2);
4 ]  e4 \4 J1 {) ?; T                                                      if (strcmp( 外挂版本,最新版本)==0)  p# f) j( c( C& J1 W+ I
                                                      {
: p  Z: p. b4 e$ D, S- H) q                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );8 ~% c5 l% ^4 w- G2 ]8 N
                                                      }
5 t6 ~) Z$ J! R                                                      else1 C% k1 @  e: g3 `# n1 r% ^
                                                      {
7 E: f! b! i6 q1 ]% B- p/ A                                                            char msg[256];: }; s4 e; x  H! k9 a, I# E0 B
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
* U4 p" B* ]& \# x8 V( B                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );, \; p" Q! E; p; y# Z- }
                                                      }6 I9 q: K& }+ w8 p  z
                                                   }
! s: D. o7 p/ |& M                                                  goto LH;; |3 L0 {+ s" l8 Y9 p$ l. f. K
                                                }: d! G) `' R. q4 B$ k2 x" T
                                        }! Q! D; P/ m0 }) S
, i* L/ r5 {  E5 d5 h
                                }1 B9 X5 J( _: q9 e3 k2 u! X' M
                                LH:;2 [* k: y- ?/ f- s/ \* x+ k' k3 n
                        InternetCloseHandle(hURL);
. {* U% o% S# L3 }' i: C6 |- a" _                        hURL = NULL;
7 D5 T  }# [$ f                }- }- x1 r3 O7 |! ^! L$ x
2 b# y2 p/ b) n5 i0 ?( h
                InternetCloseHandle(hSession);
# P- W0 G% U( A1 g+ G( I                hSession = NULL;+ ~# U4 t# |0 }2 z
        }
2 J7 v* P7 h9 l4 A( W4 x& x. g}1 q) R# Y- H  Q1 ]% D- ^
1 p, D" ^  ]. c3 v& C
& z, j$ ~: M% ?3 P" A
//----------------------------------------------------------------------------2 t- t/ m: l. y& u: ]  f  a% v
//  Activation Methods
4 S3 O; O$ P) n0 Y: w7 [//----------------------------------------------------------------------------- K, [' B( ?. L3 j% v

4 t) L, B- b4 L: _' V+ W7 J//  Unigraphics Startup! E. I3 k, L7 c. R2 f
//      This entry point activates the application at Unigraphics startup2 L% A  ^# O) Z0 T) R
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )) b( w' \4 K6 D7 i+ F
{
; D$ |+ `& D" h* ^    /* Initialize the API environment */
8 u: e& j' q, W8 ?    int errorCode = UF_initialize();) p' Z' Z- h7 V. ?+ e4 x

& u8 Q3 \+ {6 F3 z" ]7 q% e, L* N" c    if ( 0 == errorCode )
* B+ C$ d4 a/ `3 e    {
$ x7 H6 Q9 \  E, C6 ]1 A7 {        /* TODO: Add your application code here */
# H* G( n9 b! ?! s: c/ n! ~& l3 ~9 D4 ?: z  z

2 f3 s: t2 g5 U# ]0 _; I, u& A                //百度云公开链接 通过修改txt文件标题
- e: G  T$ c0 [+ {6 k$ U                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt3 ?( z- F' V! [0 ?, V; d
  r" G4 V" j! {7 N" k: P* J7 z/ K

6 |& a# |. c; y8 q/ q7 Z                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
8 b- z4 u: l/ i% g8 p. o7 K                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
! A9 ~& \' p3 g8 l               
3 O. Q7 N% F1 X. l9 f% s        5 I; @' ~1 e0 S- Z
- ?- N  c7 l+ f5 x- M, t

/ n+ M# d! S, J8 l, u+ u& q9 m) D) D' _1 s
        /* Terminate the API environment */
3 c7 Z3 z; R( G1 D        errorCode = UF_terminate();
( B" F* l' A' N* b! l    }
* ~, i* @. o2 x* ~4 j' W
% \4 z) }  }; f' ]    /* Print out any error messages */8 R  m+ s+ F; r9 q8 k
return;  g) n$ r/ B( O" |
}$ I* B8 S- a1 z2 Z4 g. U0 [
$ q+ f# e" G, @; S2 E0 c- m
//----------------------------------------------------------------------------/ ?0 |7 m1 \4 y9 T  @8 e
//  Utilities  J) m9 F% T3 G/ _7 f
//----------------------------------------------------------------------------
  @& C1 r; D' @0 e. c: `. b4 u$ x+ o; P8 Q& Z
// Unload Handler' k2 l7 t. _7 c6 [! e
//     This function specifies when to unload your application from Unigraphics.
( ^7 \/ l0 }9 I- S! T//     If your application registers a callback (from a MenuScript item or a% V6 i* u: o6 t
//     User Defined Object for example), this function MUST return8 k: h" a( h; y; u; S) U! j/ [
//     "UF_UNLOAD_UG_TERMINATE".8 e! c0 r2 `! N; a  Q. \
extern "C" int ufusr_ask_unload( void )$ v4 c& C' F7 n" x
{
& ~( y: J. z3 ]- z/ j- n0 ?4 l3 N& T/ q    return( UF_UNLOAD_UG_TERMINATE );7 L7 o4 q0 s* ~5 P
}2 m9 K9 @6 I; D3 [7 P& J+ @
8 J9 _. [" f/ w# W/ o
; @* h/ A) e3 U, c
启动UG就启动dll的方法
& m. d2 l! d1 T; z$ {+ P
$ Z+ o/ O* u6 _( c方法1.添加环境变量: }- \, L! m! Z8 L& }
USER_STARTUP=D:\MEILEI.DLL) i( P4 h6 r& c! C0 N5 W3 \0 R
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
' ]& `6 h0 \! r, U
  W7 O9 u' Q. I" k3 L方法2.在代码里添加(可以执行n个dll)
7 [/ r9 S: L2 {* g3 O8 oUG会自动加载 startup目录里入口点是ufsta的dll
$ V1 i8 |# q5 y1 V
9 [5 \6 _6 R) k- R所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
- l2 p& [* C3 a. b, Q" R参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了# z4 s7 x% X, z' ~
" v& y8 m* u" |0 g
菜单参考  NXOpen_meilei.men.txt/ }5 R: N8 N. J2 f% b- w
1 C! U$ r& ?5 x" r
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录; n9 W' F/ L) F- F- }
启动UG就启动dll的方法源代码下载
4 l) Y6 v( Z3 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二次开发专题模块培训报名开始啦

    我知道了