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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
6 g3 l! j  o. O" C" @7 e
$ o: Q6 Z8 ^) O5 U8 o( T  v! x如果你想每次运行UG 判断 ug外挂是否更新
" d- |( q  c3 q  c" V/ \* ]# ~1 E% z0 B: k( |
% \) N4 N: ^) n4 |2 p9 ^* b
原理:
$ f5 r6 q0 O4 F自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了  n5 v1 t! p  x  h) h# W( {. N9 }& I1 b
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
5 _  F* p  x% E* [7 v5 t4 W2 @& Z5 S* {% K" n3 n: x  A
  u9 }( N& N9 {3 |( Z' }
被启动的dll程序源代码,如下
# m3 q7 E1 u1 K2 M( J- H9 V1 i* j+ A- W
- a, }# v5 w7 U6 Q( _4 s//  Include files; c+ y% E* c8 x. m
#include <uf.h>: S' T; L2 S( J. `% [# l
#include <uf_exit.h>  r* A+ z; l# Q$ _- b8 x
#include <uf_ui.h>* K9 T+ ?: J" v4 g1 ^
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )% A2 k- @" e! ^( y3 }& j+ R
#        include <strstream>
3 ~: K, p, A1 J# x# y6 ?#   include <iostream>
* _2 S% S  m, u" c9 D; `        using std:strstream;" C% n( o5 X0 b, v9 j
        using std::endl;        
2 M. D* A6 `  b) s7 E1 S7 N% `        using std::ends;
- M, L3 Y4 H% l) k7 p% Y# Q5 a5 n        using std::cerr;6 }2 G- p1 c1 e) O' D2 R( d
#else
/ D5 |, h# g4 A8 ]( `& D) H2 {% ~#        include <strstream.h>, x  L$ w. b/ @& k' J
#   include <iostream.h>8 C7 M" C) E( F) x% ~, L5 B* ^. s
#endif! @: F( J! ?) R# D
#include <string.h>2 z. h* C$ q6 a- z$ I  r
#include <afx.h># O. H/ S3 h4 x6 A0 J
#include <windows.h>
* T# M' ?: B* J#define MAXBLOCKSIZE 1024
* ?1 D7 L* x8 b. t& [6 D#include <wininet.h> //网络
1 @3 R6 X7 r) X' v1 g/ j1 D, G0 `$ P#pragma comment(lib, "wininet.lib")//网络5 j. ~5 V' ~& A6 x0 z

' ^2 R* z/ `: n$ a/ H/ X! ychar 外挂版本[132]="V2.8F";
7 l/ |  Q, a% f$ D1 Z7 h9 P3 i, w; D8 b2 n6 ?2 V
4 N" B7 F8 Q+ t8 h! V! Q
wchar_t* CharToWchar(const char* c)   //char*转wchar_t) i$ H9 E# C; X# q$ y+ u. x, H* \
{  
( e, F  H6 t0 `: }   wchar_t *m_wchar;
% q/ o: S" n- R; F    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
- ?: ]' U! R6 \0 V7 C+ G' L    m_wchar=new wchar_t[len+1];  
2 e# q. H2 h  X3 |    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  + S" @5 B2 d9 r7 v8 e) q8 P3 y
    m_wchar[len]='\0';  
  S" U# O2 O! b; u    return m_wchar;  , t5 d1 ~" l  s$ L! V
}  ; B, ?  n1 l/ ^2 f0 ^. G

. ^) N$ X4 E  `0 w8 v//TCHAR 转 char
* X6 T# @* k+ z- m9 }% G% U' A, [char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
& k- q% Y7 n. V( {{  
; X4 E9 l$ w$ j" g    LPSTR pszOut = NULL;  - ]+ Z! I/ }, Y. I4 g# i
    if (lpwszStrIn != NULL)  4 |2 M* H5 j& R9 }
    {  : g1 A6 r8 V  ~9 C
        int nInputStrLen = wcslen (lpwszStrIn);  . _" T9 N% x* W4 E, j4 t
. `, C) H" `* n5 p4 ~: J
        // Double NULL Termination  
9 ?& `" O! i9 l. T; \6 i        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
* M3 F& w  D. l6 f        pszOut = new char [nOutputStrLen];  
# W( D: ]% _# i) N6 [2 ^
( z* H: W; \" U7 O* q        if (pszOut)  
3 ]3 ~# n2 j' D. [0 `        {  
, W& r9 T* W, S1 g1 q9 |9 w" l            memset (pszOut, 0x00, nOutputStrLen);  " X  R# o. ^2 g; a, Q
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  % U0 \5 _  S1 M8 r! Y
        }  & l$ u( M" @6 J( H
    }  
# `" i: _6 I- b2 t) E1 C    return pszOut;  
2 _, q2 z% _8 l' k# a}  
5 Q1 Y; x+ H! `" c2 n- p
8 h8 L/ {$ p( P+ ?" W7 I: f
, j" S! J# |, D. m( w5 k, `//CString转char
8 h7 K: V) E" ?5 G( @void CString2Char(CString str, char ch[])
2 {8 T& c# \, X2 Q2 d{% @7 m5 g& h$ M$ s; O* A3 I5 S5 q  A
        int i;; R% ]: p- q0 ~' F6 e. s4 S
        char *tmpch;
  I( z) Z* k: ?1 j3 b2 z        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度: k3 c" R' g& t/ b/ L
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小! U" _% L* [" v( ]0 R
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
0 P$ U6 I1 A& o! n$ B0 k  c) `0 k) [7 S9 I% [
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;5 R7 |  i' f1 Q0 k2 Q( {* q; v
        ch = '\0';
5 `7 T. i0 a2 V7 m3 o: R% s}
, A, E$ W( @( Y. @% |2 y, X
  |6 k) d- s0 g, |  m3 V3 s8 j7 N) w0 H5 p7 D
char *去掉char首尾空格(const char *str)
" S9 @& e6 c0 A7 z{
' @3 d  ^- Q4 L; S1 E        static char line[133];
0 q8 Z7 x8 x9 W. J+ q        const char *pbegin;
. X. \6 i/ G  Y% O- B& e        char *p,*pend;1 X: T% H, P4 J( J! v
        int i;: T4 h5 i5 N# k9 ?: k3 B$ U9 h

' T1 s+ P4 A" v3 }        pbegin=str;" W+ @5 o4 i9 ]9 t& ?4 B1 q1 r
        while (*pbegin==' ')- M3 @; V) R. d; l: c$ E
                pbegin++;
  i" t+ U8 H2 I2 n' z# W' n4 q7 q$ y* W, f
        p=line;
& I' t/ z( E/ u9 t  m# U! f& ?        while (*p=*pbegin){' |2 l+ _% `: q! r) {
                if ((*p==' ')&&(*(p-1)!=' '))
" {! G8 O8 ~! o5 ]& S                        pend=p;
; h( G+ b% a& t" l% \# J7 z                p++;pbegin++;        & {) g$ F& n/ ]( d3 F
        }, l- t8 S* l( n' x# ~* o3 t
        if (*(p-1)!=' ') pend=p;" P+ `$ g& U* {! X' z
        *pend=0;
, r( e- [- O: m6 z        return line;. m  x) g! |1 _6 P- V% |
}
+ O: T' o7 O/ x& o5 P/ ?# k4 @, S) g
# q/ T) a4 {* A" r+ r1 @  L1 e3 j- e% C8 ^( k3 ]3 h
//获得网页信息 - 网页信息是中文会乱码 用英文信息
; _8 }- z+ e( \$ g+ Hvoid 获得网页内容判断外挂更新(const char *Url,char *html);
0 {4 U- O0 r) z& `9 h2 vvoid 获得网页内容判断外挂更新(const char *Url,char *html)
* N$ _! C" b  n0 {' C4 [/ A{+ ^+ Y1 r( S# o" S8 b
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
; k! g1 m) u8 i7 f! h$ W7 F        if (hSession != NULL)/ s1 H1 s8 n  {& ^) r3 k' O0 N2 C
        {
3 M2 P8 z# c! a5 [                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
& L" u& e) \  b8 \                if (hURL != NULL)
& ?$ R! h2 K& a! ]7 K, t2 t                {% X/ l& ^4 a! _
# j+ |6 x6 r2 `1 D- i% x* @
                        char Temp[MAXBLOCKSIZE] = {0};- D9 X9 i+ h5 S  x" x3 t' a( l
                        ULONG Number = 1;
7 @5 }( Q. L" D& H& U! e2 O9 m. a                                while (Number > 0)
; L/ B8 P1 z" Y. h7 a9 c                                {6 g3 ?5 V+ f3 [
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);  R. A; a2 ^8 e0 l3 d! F
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";$ o# s* @( I$ R" Z2 `6 v. }# R. e
                                        int a=strlen(Temp);
& j7 Z( [9 A: n' f7 K6 t  _- g; _# H% Z                                        int b=strlen(判断版本);   
7 ?5 M& A* K! D/ D                                        if (a>b) - {7 S% K6 J* [! a2 i7 \6 f
                                        {
$ V% r+ [$ [8 H' H                                                char *p=strstr(Temp,判断版本);
3 j6 o5 N& x2 i% c) `) O$ j0 z7 k                                                if(NULL != p). O" G1 l" g: |$ L
                                                {          * ?. x4 R( N- t. t% C  V: J
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置) q9 a6 [5 \0 n* N1 u4 K" u
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
, S/ D& A/ M& e6 O4 C3 e# {                                          char s1[132]="";8 w6 `0 t% t* O! q/ b5 Z
                                              strncpy(s1,Temp+wz,wz2);3 Z* O/ g1 h4 I2 D
                                                  char *p2=strstr(s1,"MEILEI");& H' O7 R9 t! b% B7 J# t; {
                                                  if(NULL != p2)1 x- m  R# Z' o% n. B+ N
                                                  {  
# d9 f8 o1 _% \3 v( ?$ d                                                          wz2= strlen(s1)-strlen(p2);
& S  k. ^1 r3 H. Z2 x4 b& b                                              char 最新版本[132]="";" u8 j( L+ }, h6 G9 z2 y7 P
                                                  strncpy(最新版本,Temp+wz,wz2);
( [3 Z5 e( k3 G# t( d) x7 o$ X) ^                                                      if (strcmp( 外挂版本,最新版本)==0)
- [! q: g+ W" k/ D3 F) u                                                      { " V5 m" ~8 y9 O- p# H
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
9 e) {% u7 W6 B* E: U                                                      }; @) l3 l; V2 ^. u$ s5 S' h7 F- d# c
                                                      else
/ B) g" F/ b! d                                                      {
6 Z( v% L8 l7 i8 z                                                            char msg[256];
3 T8 K  E2 }+ |2 K5 Z( R$ t& W# m                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
9 _- X. O0 W" w4 g                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );. |% S' {: O# b' ~  s1 L7 \
                                                      }
* ?2 E+ x+ N5 q1 m  z, Y: X9 v                                                   }- X" n3 R  t4 D! R: K! }% x: Z5 f
                                                  goto LH;$ j& q8 U- e( C
                                                }
4 v: M3 z8 P7 H                                        }
& s' |/ ~5 A' b- l
. y; s6 w! d6 V) u# \3 p- x                                }: k) Y3 R  B, `
                                LH:;
  ~1 }2 c$ q2 D& q% s$ ]                        InternetCloseHandle(hURL);0 r) v/ O  J- X  i/ }3 ?* u
                        hURL = NULL;2 G+ ?4 n+ q8 K& k  Z0 Q2 m5 l* t
                }
, d0 G1 c5 Q. y2 k5 F
! H6 X8 B$ p. w/ T9 `5 h; U                InternetCloseHandle(hSession);
( z$ ~' M9 i9 w/ l8 X; j9 q$ v                hSession = NULL;/ q. Q. N3 A/ f
        }+ W7 `. i* h! @% [
}
( L8 L* |' ^/ e$ i; S+ j1 j% Z& a* g

% ]8 `" X- ^+ Z- j& O- a//----------------------------------------------------------------------------
! X; R4 b# a3 n+ S( n- \- y1 B9 j0 u//  Activation Methods! y; k3 w4 T# p+ C
//----------------------------------------------------------------------------/ d0 T- A8 H2 x( ^8 U

- R# o( @! f5 d' x2 ]% @//  Unigraphics Startup
6 k+ ^; [% r4 t: c$ i( P7 t//      This entry point activates the application at Unigraphics startup# F* u# J$ ?+ k' X6 c; }
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
; L! y, s% V3 B% Q6 ?7 O( V/ }{
- O5 }9 y. Y5 {) U! k# p6 L1 q# K' [    /* Initialize the API environment */
+ v' R3 c, I7 U    int errorCode = UF_initialize();
, ?- r1 K1 v) _3 O" f7 t9 m, m% R# Y, {, h+ T- n: {7 u, G' _& g/ K
    if ( 0 == errorCode )
' I" m. s$ @/ |8 @, N& g7 F    {3 B, g+ h" x/ M, h) N- E6 i( F5 o, f0 f
        /* TODO: Add your application code here */$ e8 C0 w. F! [2 z5 w0 N

: Y5 E) H2 o- [8 ]$ |' g2 j9 e7 P* z) ^5 ?2 v
                //百度云公开链接 通过修改txt文件标题
5 T4 i" d" [! |1 t1 F& S9 x) p% g                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
2 W" Y$ o9 W/ o/ [9 b
8 @. U; ]& U/ c; o; i! y
& `1 a1 I$ q# T, u                char 网页文件[256]="C:\\Windows\\版本.html.bat";  : u, D% i4 r$ n
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
1 }: Q, s% S+ Z0 @5 n+ P                . o0 E7 Q; F& H8 c5 _3 H' g
        0 G1 a' s$ V7 J4 m2 ~$ T
2 L( g' k) x) y
1 U& @/ C# n  \+ K

, L6 m: Y# ^+ I& `" t8 e" F8 {8 {        /* Terminate the API environment */
7 Q- G1 ~9 V+ i+ A8 q& E        errorCode = UF_terminate();, ?4 Z( d9 ~" z2 Y: d7 `
    }3 V; _0 j8 W4 J5 }/ |/ Q% q1 ^

: y1 _; @9 \& R3 W* g    /* Print out any error messages */- b1 C) ?/ ^: ^! e: K* y
return;
, _: G3 r* w; i2 C, \# |) K}7 x3 d* k4 @* ]+ q* `% a) P- E

! h% W  A5 W" Z6 a& M3 S" Q* a& P//----------------------------------------------------------------------------& @# j5 ]5 ~7 \8 k9 J# }* l3 x8 R( [
//  Utilities% s+ x: Z) e, Z/ W7 T3 x
//----------------------------------------------------------------------------
; C. k. ~+ W! k5 e
1 M  U8 E) e1 t" G) A// Unload Handler1 Z2 p& V7 l  r9 S. K8 C3 v: F! W
//     This function specifies when to unload your application from Unigraphics.
2 J- {4 ^: d- g5 r' s( r4 U; S//     If your application registers a callback (from a MenuScript item or a
  j6 L# @& }0 a6 @5 O//     User Defined Object for example), this function MUST return& H) ]6 b8 P! W! P
//     "UF_UNLOAD_UG_TERMINATE".7 r+ @5 h& C0 w7 u8 b& m# M
extern "C" int ufusr_ask_unload( void )& }4 l0 W1 u7 K9 k4 ~+ O* U* {
{& u4 P9 U4 g  L$ [- ~$ N
    return( UF_UNLOAD_UG_TERMINATE );- F$ r0 G6 F: \
}% [4 w3 U" D4 B* D) T% i

2 J' z/ |4 p6 i+ b; y$ y# H$ D6 e% T! e9 G+ e. ?
启动UG就启动dll的方法
: ]) b8 d* u* x# y4 U+ I' J
% u! O7 j+ b: F" u/ p" N9 T7 ~方法1.添加环境变量5 O: R+ {  ]1 h* l' l7 D7 L
USER_STARTUP=D:\MEILEI.DLL4 h) [; Z* V, \$ q  w9 r
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了/ C7 P' G2 N9 ]$ z6 B1 L

2 T- s: o5 y- D" ^  R& E. |( l方法2.在代码里添加(可以执行n个dll)
4 S' p; D; Y4 z" Y- FUG会自动加载 startup目录里入口点是ufsta的dll! H, z) ^% j: r! e0 V9 P+ }9 u
, I& I. Y8 @- Q3 L1 a, {  s2 o
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令. V; v- F' I8 U9 i4 O# ]' m$ H* E8 p' y
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
  c: h( {7 x8 ~7 F( \
7 A* W! v# G, S- i& i5 d! `9 ]& J菜单参考  NXOpen_meilei.men.txt
- R3 k* m# l: J* ?  f& y" h1 b$ Q) i1 O& X8 B, h
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
/ A% N2 i. y" l+ v# q8 x! o) ]启动UG就启动dll的方法源代码下载
# H5 U! {& R& k. m$ w& F0 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二次开发专题模块培训报名开始啦

    我知道了