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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 % o% M& T' h" @

$ r3 |, h$ I3 J1 t如果你想每次运行UG 判断 ug外挂是否更新: ?6 \( ^/ P% U3 }) Q7 C

/ @& g: S9 `. {7 G+ s( @% R; m1 H3 g1 w+ \0 _; x2 w% p+ Y5 ?" D
原理:
8 k0 n( n5 t" L自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了+ r& A: m( ]3 \% L8 R% K
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
9 ]/ Y* n$ w* R& e9 K! B/ l. K& j) P- z: ~8 ]! j* k: ~$ b' b

0 g) a5 d) z" ?4 ]  r被启动的dll程序源代码,如下$ n8 R+ ]/ Y3 _; V$ p, G/ x
/ v; ?- }3 S4 D6 |) u" [- R
//  Include files
% `" y9 p3 U& ?2 X0 y  a- n#include <uf.h>
  x! J& ?! e% Z7 V  E' K. Q#include <uf_exit.h>7 R9 z$ `/ m% Z% g% ?' P% F' t% K: Z; D
#include <uf_ui.h>
5 H4 N# ]% e- L# x- ~- ^6 L#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )) P" j8 D% k5 N! ~/ s# j
#        include <strstream>4 ^! M$ B5 g$ y$ _2 y
#   include <iostream>
5 W! T7 _. m/ Z; I        using std:strstream;( M! |7 `  q) W7 I+ Z
        using std::endl;        # }- `$ S; _6 F6 I, J* s1 I& Z. y
        using std::ends;
" c1 I2 P' x8 y. S        using std::cerr;$ b  p7 ]6 b1 W7 `) _
#else
8 q7 p& I+ t, z7 S3 @#        include <strstream.h>0 z% N7 T# Z" K* Z7 K$ w% N
#   include <iostream.h>
  g6 F, N7 D* ?' h% P4 _#endif0 x# @1 c. O. B2 L1 z
#include <string.h>/ L- B2 F2 p, p7 U1 G
#include <afx.h>
9 c% m- B$ k' w3 }$ j#include <windows.h>6 x8 w0 h6 h% n6 e
#define MAXBLOCKSIZE 1024
5 M4 B' f2 [, w  Q#include <wininet.h> //网络) m& F) f0 v+ H: a
#pragma comment(lib, "wininet.lib")//网络1 r$ \7 V' C# ^' Q, a  O  v
: j) h; g( O7 s, D' h: L
char 外挂版本[132]="V2.8F";
/ M' O) j! `& D: g* c( Y4 ]' R* Y- U0 k' C
) S; y* K. }9 w- V
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
' A8 v- v2 h0 f3 E" P) B{  5 p( T: U4 C6 r- }, Q: \5 v
   wchar_t *m_wchar;( U3 m# w( a* X& h+ t
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  5 b) N2 Z" N5 Y) ^! E# u' ~% a, L; A
    m_wchar=new wchar_t[len+1];  
1 r; {0 P; V$ C7 X- s( o    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  ! g* i$ R3 D6 g- o  f& ~5 y& I
    m_wchar[len]='\0';  ) J5 R! N1 r% h" R( S/ {
    return m_wchar;  0 S5 w4 ^7 k9 R" f9 _5 D
}  ' l1 _# s1 Q9 w

5 B1 o. c; l' u% i4 F) l//TCHAR 转 char
4 R' C* n, A4 g8 hchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
0 M6 ^- t9 A* i{  
/ r0 R" e3 H8 P' g    LPSTR pszOut = NULL;  
* {8 F( P% z1 t$ Y) w5 M    if (lpwszStrIn != NULL)  
) h# q9 q8 ~, E2 ?* `9 j    {  / [) Y2 ^9 e# v3 X
        int nInputStrLen = wcslen (lpwszStrIn);  
& ~; P9 v' ~: w0 Y4 _/ v, S. p! z* _" O: n( v
        // Double NULL Termination  9 L. I# u+ {: C  p+ p' j
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  3 V, ?+ \+ f6 r6 J" g! Y0 g, ]) {$ s
        pszOut = new char [nOutputStrLen];  
0 b0 V# |. Z$ A+ g, E% q1 u) {
1 d( a% [( X/ g% @% P        if (pszOut)  " N# r2 X4 [  ^& U
        {  
5 T) E; J2 ~+ D- z; @            memset (pszOut, 0x00, nOutputStrLen);  : }- I" @, V# M' D4 \# a4 f
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  : c# z! C. h* e. {, `
        }  ) x1 w1 D& z8 D) k; U
    }  
3 @! Y4 Q" R' Z1 K, m' l) H- V    return pszOut;  $ B9 h4 X* L$ m3 v
}  
& {$ O# ]9 x4 k) C7 u9 ^5 D- W$ Y' X2 Q. x

4 t5 F4 `' e; s* y# _//CString转char
& M/ i. t: E9 V* uvoid CString2Char(CString str, char ch[])
; s: ?9 \/ l2 B% E9 X" ?7 l{
9 J* N0 f6 N' f        int i;
. b" r* O+ \: w" S/ ]3 w        char *tmpch;
- D1 b7 _1 \, h, p2 j4 w  j1 v        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度. H  ~; a0 W; j* u
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小  G/ c3 s/ z  C& ~
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
" G2 q( |; f) Q: N3 F; @4 ~
! X+ y# y+ \# P  j9 F/ _        for(i = 0; tmpch != '\0'; i++) ch = tmpch;. Q. r7 F8 N1 S6 R& S) r% M6 M
        ch = '\0';
: U9 `5 n. _) p8 m1 [}
# Z0 w1 {3 S+ \7 o
( A5 P. U8 V1 R: T
3 V8 U9 ]0 f+ r/ n# _char *去掉char首尾空格(const char *str)( [6 `% B7 Z4 @, B
{
4 C6 w7 k0 d9 p1 Q3 T' U# K# s        static char line[133];2 O$ g  b, D5 i8 ]/ _! @! A
        const char *pbegin;
( {, Z" u9 B' C& ^" {4 F        char *p,*pend;/ g* }+ Y4 J% b0 K  z3 K
        int i;, a% W: q6 y7 w2 K

( X, {; d( \, X        pbegin=str;
' U: r4 j* [# [* ]0 |3 }, Y* n5 V% p        while (*pbegin==' ')5 r0 B* B2 h! @9 a4 Y% S
                pbegin++;
1 Q9 ]+ ^# d9 ~/ d# B; e) O+ {) P; i" y3 K$ c3 i; m# J
        p=line;" d' @- K4 u3 ]) k) q
        while (*p=*pbegin){
9 W3 x3 g8 \& L0 a! x3 D0 z; C                if ((*p==' ')&&(*(p-1)!=' '))/ j1 K% C" n  ]! S  N$ n  O- N! s
                        pend=p;
0 N  y  X% i; h  W% b                p++;pbegin++;        
- X8 K/ [. E6 c& i, G4 \' i        }  M' @1 `- J. P7 t9 `5 l
        if (*(p-1)!=' ') pend=p;1 [& a+ @! A5 y
        *pend=0;
& _. j3 I- D. t3 ]& e! s" O        return line;3 z! T1 E/ _4 S4 l0 ^
}
7 d6 X5 S1 L! m- \( ~2 z3 ?6 Y+ x& O) |3 n& N+ x1 j% ?" C

: C2 L0 l- p0 Q. M+ x//获得网页信息 - 网页信息是中文会乱码 用英文信息$ l7 f  T6 W: _- ?$ S
void 获得网页内容判断外挂更新(const char *Url,char *html);
, d& k4 |: k1 c! _/ k; T7 dvoid 获得网页内容判断外挂更新(const char *Url,char *html)
6 ^! b( K% J% r9 K3 d# G{
1 t8 ?' G$ c9 K) d& X1 r% X' s        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
% q: g; V7 [0 j; T& G) {& K+ s        if (hSession != NULL); W' e# Y4 {- S2 L. I  e& [
        {
$ V6 o9 |3 F: ?: d4 t( M( I                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
! i1 j( h3 R0 x, W" r+ J  V; I  d                if (hURL != NULL)
7 G/ C) Q2 |# o4 Q; v' m2 @: T                {  O" h& E) i, Z& W; c( J

1 L; U3 u+ e6 ]% v& L                        char Temp[MAXBLOCKSIZE] = {0};
  A; o, s$ o. }- S  p                        ULONG Number = 1;
7 U: P5 |* \5 S: h                                while (Number > 0)
. P$ X% a1 ?8 J+ N, e; p" A" [                                {
& Z' @0 A8 `; l! `                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);  n/ ~* h* h$ `7 C, B- V' P6 S
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
% V5 ~& c( \& e$ z                                        int a=strlen(Temp);
" _/ K$ X: h2 j                                        int b=strlen(判断版本);   
8 I/ Z  u; X& ]                                        if (a>b) 3 w/ ]; t" Q/ j8 G: S
                                        {
% _( k. l; }5 R4 X9 o                                                char *p=strstr(Temp,判断版本);
( {) v/ q6 T: a1 O: [, q: E                                                if(NULL != p)4 r- R0 c- G* @5 S8 ~. Y. Y
                                                {          5 T1 L6 H/ T" y3 h9 F
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置# K; s+ _" K" ^% S  A$ e
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;; b7 j8 M$ h. \2 N
                                          char s1[132]="";" R; V" S5 |* R
                                              strncpy(s1,Temp+wz,wz2);
: e  M! L2 G* l2 K8 O2 X  A/ E                                                  char *p2=strstr(s1,"MEILEI");
$ A- u1 s. _  V6 A4 _                                                  if(NULL != p2)
' n& S/ k! ?8 H' F  x$ {                                                  {  . p9 M% S( a  m$ S. U/ F3 j
                                                          wz2= strlen(s1)-strlen(p2);4 }2 r1 k, |4 _3 l
                                              char 最新版本[132]="";
1 }+ m( ~4 Z- Z0 K" I                                                  strncpy(最新版本,Temp+wz,wz2);
' ]! k  v6 M9 {2 T+ p3 x# j/ D3 a                                                      if (strcmp( 外挂版本,最新版本)==0)$ l& m# D; o9 G& {
                                                      { , }& f5 Z7 U7 U) [) h
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );+ b' b: y3 f3 Z+ S5 J. }$ V
                                                      }* M5 |% g, g9 B2 d1 _6 y
                                                      else6 ]. ~4 v4 ^& ?. C3 `
                                                      {$ D, J' E, N  _( d, _
                                                            char msg[256];& d$ F( m% ]  m7 r2 `6 ^
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);, `. N; _( S6 q% m8 z
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );& g# X$ h" z% m5 M4 G" ~
                                                      }
2 N& h7 \* S8 I  L                                                   }
2 A1 q+ g! \: Q) D& N" N: t4 Y/ b                                                  goto LH;
1 G$ B4 o' `$ m$ k& t( \% g3 P; ?# W                                                }
5 a  V& n& Y. [( Y. s  ~                                        }
$ L+ K, |1 Y* N9 I; H' v; b% S: {, _/ a; C% O
                                }
/ ^9 C1 _, Q: h9 `2 s                                LH:;3 B  C7 [! j/ L3 O$ P
                        InternetCloseHandle(hURL);( J+ k( H7 ]& T
                        hURL = NULL;
) h% W- E/ R: ^3 t& r                }5 {' S- v0 A1 b; @, l
' R1 K( s9 T- j% |
                InternetCloseHandle(hSession);
6 @8 p: x1 {7 q8 m1 s" `; n. c% E                hSession = NULL;: z, y* R. \/ A# a( v0 r' q  B7 i$ y
        }& t# e0 F% r9 y
}
1 N0 X: h; M& ^; F
2 L3 @) F3 w, j$ @- o$ m7 N  p( Y; D- K* l/ U+ p
//----------------------------------------------------------------------------9 t$ H. \' t/ c$ ~8 J
//  Activation Methods
. w- C& L8 c0 ?8 K: u1 ~//----------------------------------------------------------------------------& g5 ~- _9 |/ X
: o) e2 [& J$ h0 E$ `
//  Unigraphics Startup8 y' j6 j: ^. ]" ~: {7 I0 f3 ?
//      This entry point activates the application at Unigraphics startup) ~. X/ A% }. f5 n* |
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )4 A2 Z+ }1 X3 i/ |, Q4 I9 K8 h
{5 g! N% l3 M5 Y, Y8 R+ Z% h& m7 C
    /* Initialize the API environment */. ^, Z; i' M+ P' w! i( E" I  W
    int errorCode = UF_initialize();8 q  v  M' `, ?8 |

. V7 B- R( J/ {, I/ a    if ( 0 == errorCode )  f) y9 z0 P" s6 }9 y! y
    {
5 {) e+ t- T$ M3 ?5 p+ c        /* TODO: Add your application code here */* D% H2 ]/ }7 W7 l/ ^. z4 d+ n5 D+ l
0 v( Y+ u/ I- {. I4 q3 A

( h" ]7 @9 y, c& W. ^                //百度云公开链接 通过修改txt文件标题
& t  c6 e, c, [' _                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
1 n! ]1 `) @- v0 {2 a  ?7 x/ S2 m: M$ ~. f2 w
$ d, u: Y! r* i5 ~( A) I
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  8 K4 q& e/ a2 t0 r2 c
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
  P6 B- a- N; J+ q  V1 b                , \6 R2 U3 p, \) z- S0 m
        
1 O7 {: L1 {$ L# J, ]7 Y
7 Q, R$ d2 X- X" M" N; ~" L( K, U1 ?2 ]3 q
: _  ?5 v0 l( n6 O) x( t
        /* Terminate the API environment */
  \7 C4 q4 A% N! G  O. C" G) b        errorCode = UF_terminate();" t, A4 O, m4 A! w) o# [
    }
5 A( d6 Y7 {* l; h0 w/ Z8 B1 K( H2 T5 i9 {5 ~& h8 E' o
    /* Print out any error messages */
. }4 t. t" v8 I$ Z& Nreturn;3 `9 O& d4 h. W- h$ b6 j( F' F  i
}
' \4 N% F1 s$ t
+ j% N" c% D0 R$ [" B//----------------------------------------------------------------------------
! _7 S4 k; h' A//  Utilities5 x; ]/ u+ M3 h/ H
//----------------------------------------------------------------------------
) k" R# B! e/ |9 c- y
. I6 D  d/ k. X& P9 V7 j- E0 {3 _5 b! d// Unload Handler  ?6 O9 Z/ O/ b; q
//     This function specifies when to unload your application from Unigraphics.( d5 X* t% I) L% A; o
//     If your application registers a callback (from a MenuScript item or a7 C2 z) m1 s6 Y! R' e
//     User Defined Object for example), this function MUST return3 {' i7 H! x1 @7 E
//     "UF_UNLOAD_UG_TERMINATE".
8 u- s+ `) L; D# a2 Jextern "C" int ufusr_ask_unload( void )
# M' O2 j- o3 n7 R{
. a/ l  Z+ Y3 j! `; @) z4 f    return( UF_UNLOAD_UG_TERMINATE );
" ^' ~  [. {/ m8 K}/ E+ L# H9 {0 b7 l4 k

: |/ p( H% Y' N# u+ I3 i# X4 k8 ?) P! S: F: X! \4 u2 z  \# i
启动UG就启动dll的方法) y" q$ o4 W' N! F) @
5 E5 B7 I* v2 I# ?  H
方法1.添加环境变量
: ~; w. R& K- L. M7 l/ P7 wUSER_STARTUP=D:\MEILEI.DLL, `% p/ r# D- M9 y# ~  ~) z
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了9 k& l" U8 M, G* c% Q5 k1 i

) G: N* ]. n0 j1 j方法2.在代码里添加(可以执行n个dll)9 z& [4 P5 i9 H0 H1 D8 x
UG会自动加载 startup目录里入口点是ufsta的dll
4 S. h; T7 n5 ?6 _: R9 e) R# ]( [5 h5 w+ R4 N1 ~3 `0 G0 [
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
- g8 R, P: |: P0 i参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
5 Q% G4 H. p/ |" f
$ |: T* U1 s, g5 o) u; Z菜单参考  NXOpen_meilei.men.txt% x4 O  N" L) d4 D

8 f3 P0 r, {9 R( D9 y* A. g% A* ODDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
6 s4 m  x2 s; g启动UG就启动dll的方法源代码下载
, \4 L7 J8 h4 |" Z) B& k7 a# x 启动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二次开发专题模块培训报名开始啦

    我知道了