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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 $ V, _+ [9 I4 p5 ~9 e  \) Y

$ z' g9 B* U1 Y( }; A如果你想每次运行UG 判断 ug外挂是否更新5 ~8 @6 l" X" K2 q1 C/ I
( M/ c7 l4 H/ R

( v  M) z' v- a原理:
5 V! W# F: W- u) ~* }7 x6 a8 [4 e自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
( x$ V* P1 _. i然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断* J- z9 B9 r; R+ F/ b6 N

5 e8 \0 D$ j, B
6 p" i) V. F1 \  T/ w- `3 K! ]# E被启动的dll程序源代码,如下" w, y, h+ {) e0 J% k- _

* G7 _. \4 K: n//  Include files
2 o# B6 j" ^; D: F. }" \) U#include <uf.h>
9 ?0 J4 S7 Z* Q3 ]6 M) I: a1 O0 l#include <uf_exit.h>
+ p% w% Z8 V2 o8 m% ~#include <uf_ui.h>* ]% ]) U: K+ q4 L7 P( M$ Q  v$ F
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
+ m: P8 V9 c! ]* @' R% s7 \#        include <strstream>/ a* ~+ W! W8 J# T, l* K: M8 Q
#   include <iostream>
1 y/ s. ]5 U% d4 M0 Z        using std:strstream;) E1 V$ `# ^3 A  Z+ ~; Q
        using std::endl;        
' I; q5 X2 ]5 Q- E" H        using std::ends;
1 z  m/ C, a  R$ m, i        using std::cerr;
+ r) L+ e7 W6 u4 w$ `9 T#else
6 C/ |# ^8 A% M1 w  \#        include <strstream.h>( n, g' x* k  j' r0 \; _
#   include <iostream.h>$ q2 {& T- c" s* Q
#endif( j5 H7 x4 A* D8 s9 O7 j  \
#include <string.h>$ ^! s9 l9 _/ ]/ U$ H* Z4 d$ n  @
#include <afx.h>! q* c  \; D8 |  t; k- T
#include <windows.h>& v' S  y- W! j, i, M
#define MAXBLOCKSIZE 1024
& b7 \' ^* h% D7 S' |% r8 R#include <wininet.h> //网络1 u! g; m& O, q: X  b6 ?
#pragma comment(lib, "wininet.lib")//网络
' b. @0 S' ]5 h8 [! L( ~. V: C- w. s
3 d7 Z: K7 L! T9 J! s- [- `0 Schar 外挂版本[132]="V2.8F";
3 r$ F( c- @# M2 _/ m% J+ v7 d+ z! Y9 W; Q6 j' F
2 |- g- n6 j1 j! h/ q
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
7 T# {! p& Q+ |{  
1 `4 \! ~6 M8 G; k   wchar_t *m_wchar;
# s. Q5 H  {, z8 s% {( o    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  + x6 E( W# P# D
    m_wchar=new wchar_t[len+1];  9 C8 g; ?$ b% q
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  . v+ U; c# G& q3 T( D5 \# U
    m_wchar[len]='\0';  
. @. p, Z" J, |! p5 t: I1 C    return m_wchar;  & ?! j# m0 Y3 L  V
}  ' t3 V- E/ |8 b# [

" u: [6 M& ~4 r/ ]/ F//TCHAR 转 char  r" W9 [- j* {. I/ L
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
" B: P% G! H+ G{  1 N9 V$ D) Z" P# c
    LPSTR pszOut = NULL;  
+ g9 ]: D$ |! ]/ X. |! f  A* s    if (lpwszStrIn != NULL)  
" ]* y: H2 M7 L4 u" y    {  ! C* V* q$ Q) C) `
        int nInputStrLen = wcslen (lpwszStrIn);  8 d$ p  h3 r( D& l: X2 L+ M6 g6 `

( ~; h6 t) s1 K' [: r- e& a% i        // Double NULL Termination  " l. q2 c2 E* o6 R2 O/ }
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
3 B6 C1 O' k$ m* D. y1 n+ ^        pszOut = new char [nOutputStrLen];  ; L8 V3 L7 w0 o3 K8 C4 I

6 I" J4 _  ^) B) T        if (pszOut)  , y( ?7 o) N% h- ]6 b
        {  
$ }' {. k4 L# A$ r! i4 G/ F            memset (pszOut, 0x00, nOutputStrLen);  $ q" k& R# a. K3 ~0 d
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  % \1 @* }" r; i5 W8 q+ R
        }  0 S7 t, T3 P# x* z9 \
    }  + w% R8 h+ B# d! I/ I% d
    return pszOut;  
  Q8 _2 _3 Y. a}  7 T) r: E5 h3 |* Q' Q/ U# v
" ~. c4 V* {! M/ Q& ^8 [* h# R$ S

: G, X* Q& \5 e+ v' T0 W& w//CString转char
, f3 u+ v0 i' L0 Z" q! X: Pvoid CString2Char(CString str, char ch[])
8 b' e1 W5 C" J+ E2 F0 Q# K{/ K4 H+ C* V$ {) |$ h. [* n+ x1 `
        int i;
2 e" O' X3 r0 C# B        char *tmpch;
* ]$ t) f' m7 \2 M9 G" ]) A7 }        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
6 f2 u- C# @8 W4 q, R* m7 w$ H" [        tmpch = new char[wLen + 1];                                             //分配变量的地址大小& z! p' Z3 N' L4 B) T
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char** ?" k( X, D, B5 g% @$ R
! s8 \+ ~/ w) k$ H4 E8 `  C
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
: i9 D. L) t$ [; p/ c        ch = '\0';
4 H+ o! ?4 z2 S4 a1 q- @}! l" y; Y% n6 |
5 R" J  Z& P9 f4 u

) N  }3 u6 w6 o( }( K3 t' `1 Rchar *去掉char首尾空格(const char *str)( _$ |3 r" R3 {5 ?4 D( o; L! I
{
* j9 f& f2 |; w. J3 M, j4 C5 G        static char line[133];* s2 s8 L, J; k
        const char *pbegin;
* W% Q" h9 T2 V8 ?7 p        char *p,*pend;$ K0 \& T2 ~( M' ~' `# i
        int i;# ?8 x; r# h5 `5 q
: z& S* D: L' Q! x" X
        pbegin=str;1 R/ d* t" o! W- V# A- ^
        while (*pbegin==' ')
1 |& W8 E& O6 x8 A  S                pbegin++;
" s3 S- M$ s) L/ Z' M$ F) _
" x, O  ?1 N& e' e2 G; U        p=line;
; R( B' y4 C5 w2 R6 g* I2 M        while (*p=*pbegin){
/ g+ I; t  ?9 ~# ]                if ((*p==' ')&&(*(p-1)!=' '))5 g- ~( q) y% H4 Q4 R
                        pend=p;
# ~& M1 P0 ]5 m8 h                p++;pbegin++;        
3 T8 ?* \3 l$ \0 @: ?) D+ X        }
* q1 k3 _8 K2 y; c4 j; d        if (*(p-1)!=' ') pend=p;5 r/ I9 ^1 u' C$ p
        *pend=0;
3 w0 g7 ^% q7 \8 M! f1 X5 L        return line;
7 F8 s( Y: G9 B( Q1 M4 O& P+ O! t. k8 J} ! F0 i, B. y# e/ n

+ |) b. K& D3 ~+ b" e5 z7 D
8 p, M* S0 q& C" `( T$ V//获得网页信息 - 网页信息是中文会乱码 用英文信息
4 F% e& M/ ]6 G. \) y1 F2 Cvoid 获得网页内容判断外挂更新(const char *Url,char *html);( \: ^" K. l5 h- @( A
void 获得网页内容判断外挂更新(const char *Url,char *html)" `# l1 s/ W2 v7 r; y: }0 Z/ p( ]
{* e" W4 R" j' R: b1 G, C
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
* x1 [3 |/ |+ a. @        if (hSession != NULL)9 @: _& ~( d# R
        {/ V" @3 {3 \5 G
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
/ {& e3 \9 M% C% x" k9 a                if (hURL != NULL)' }3 Y1 E, K3 C6 @: Y8 G
                {
" W: A9 w$ Q$ H' V' `! @; @
( V. F& @/ q+ k: f  @- ?                        char Temp[MAXBLOCKSIZE] = {0};
4 |, _- F/ `( E( |. `9 h" T                        ULONG Number = 1;# W0 |' ]( [# @# M  a, R
                                while (Number > 0)
2 ]) S3 i; u7 e' y                                {2 t1 w1 ?0 V1 c  e
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
/ Z& H3 {! }; R                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";( H4 z9 ~4 b- i
                                        int a=strlen(Temp);; j  h9 E7 L# }& X8 p
                                        int b=strlen(判断版本);   4 `/ W& K# g* P& J8 I$ B
                                        if (a>b) ; L( {1 }9 w, d, F( T2 ~
                                        {
) J+ D' x0 j4 O; H2 z: g4 K                                                char *p=strstr(Temp,判断版本);
1 h6 y+ r5 P( f" M                                                if(NULL != p)- ?$ d6 `1 B' e) [* t
                                                {         
. i) w& Q2 l- v# U& `& ?( W                                                  int wz=a-strlen(p)+1+b;//版本号起始位置' B  d+ f' {' Y5 S
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
  N. U& ]8 n2 C) h/ p6 y                                          char s1[132]="";' U/ }: c! ~& @
                                              strncpy(s1,Temp+wz,wz2);) K# t; k. h/ n8 L5 U" k
                                                  char *p2=strstr(s1,"MEILEI");
# T3 \/ q1 W+ Y: o/ \7 b8 \                                                  if(NULL != p2)+ F& F) H% W6 D! d; z$ d. k/ l
                                                  {  
0 ^' l( E9 A$ S! V" i                                                          wz2= strlen(s1)-strlen(p2);) D. X) d7 Z3 M
                                              char 最新版本[132]="";
- z* F2 b/ @& @/ s/ X                                                  strncpy(最新版本,Temp+wz,wz2);
5 L- U; p: @8 y( U                                                      if (strcmp( 外挂版本,最新版本)==0)
& i1 U' d  K3 [0 O" [  M                                                      { * s! O* B. }2 P% c
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );; s0 [2 c& W4 I* L2 H/ f3 _$ Z* a" Y& A
                                                      }
+ j5 w" ?+ y) ^% j+ h' w. @                                                      else
$ V) B" ~' \9 [- n- z1 `                                                      {) w, y, V% }+ R
                                                            char msg[256];3 h7 G: U4 U- X. A$ p: U) Z1 e
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);: `0 S( _! d. t0 p2 [! m8 l
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
/ j) p; ~% J& Z                                                      }4 g$ V7 C* L3 E  h" R5 ?
                                                   }
+ u3 h; P4 }) J+ A# r3 t                                                  goto LH;2 t, a* H% }8 n
                                                }
, q/ e/ x" I0 @' c2 O( A                                        }7 S: v. N4 y/ I, s" Q

& `. S  S- J5 c, h  B5 W                                }, I6 g$ ?5 |& F4 e5 H
                                LH:;
6 R# `( b3 G; j5 S) P' S/ W                        InternetCloseHandle(hURL);2 g9 r3 Q( a2 w: Y
                        hURL = NULL;
2 _& s3 J6 ?# V$ m& {                }
& H0 R8 r8 o! P% l% I1 i! _
8 B9 E, H* j9 Z/ l4 U$ Z                InternetCloseHandle(hSession);7 z) R0 c$ f/ ^$ ~
                hSession = NULL;' t& i! x7 h' C; j
        }
& e3 _0 q" n3 \: G}7 o) o' x4 s* `
  K0 G1 |- S, Z2 t( A

% F3 K" J: F' J! E//----------------------------------------------------------------------------
5 K) U8 }# ]- g) \) R3 K//  Activation Methods5 `# V+ h* n0 Z2 w3 b7 V& t
//----------------------------------------------------------------------------
- ?9 F$ z; F; E, _5 n9 v' ]. ~8 g- g5 L' _# y; e
//  Unigraphics Startup/ `5 s, R, h: V& h/ W* @
//      This entry point activates the application at Unigraphics startup
& P; E0 ~8 [0 H$ Q7 Gextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )8 _) Y$ ?) z3 [- I7 \6 B2 t7 Z
{
- O0 q: X7 u8 Q# ?    /* Initialize the API environment */) I* ]' o4 Y* s  D
    int errorCode = UF_initialize();
( d" B8 k$ }( {. s9 i$ n1 ?2 B7 T$ j* s! a' X' N# N
    if ( 0 == errorCode )' L- c. G5 S% C  b  @5 Y7 l, m
    {
/ k+ K+ C0 {+ T$ i! Z! z1 x' p        /* TODO: Add your application code here */
6 k4 n* t, E7 N2 I9 w1 G* l0 ]# v7 c, P
( q- k. I3 x% f, w
                //百度云公开链接 通过修改txt文件标题$ d& w/ Q% V5 Q- [7 {
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt! L! w! v6 l6 _# p4 z

$ ]. R3 T) n" s6 S, |6 K2 w' ]: F. ^
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
+ o! I8 @' \5 _& \: j9 J7 r                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); & W8 T3 L3 d$ r. J- D
                # q( H$ Y7 G- B6 O# x
        
+ g! S, O- P* }  u( E4 X0 R" [* r1 C: r4 |5 o; u

' g1 X8 u) j% M! |* w9 p! f+ j; j
        /* Terminate the API environment */+ X  h& i2 }, K  {! {
        errorCode = UF_terminate();: ?5 @$ B# A: v
    }
) k4 U/ n) Z" M% ~$ s
3 v* f& R' \' W9 u' G3 p. W' `* H    /* Print out any error messages */
" s8 `* U2 p; \, Q1 U5 xreturn;: i. m. Y* _' k
}- I4 W- Y& r+ y' F( R

! {+ a2 _- R% Q$ i//----------------------------------------------------------------------------
2 i0 `+ @. X7 H" ]4 V- F5 t: O//  Utilities8 h" O  e3 O) y4 r" e! Q( }
//----------------------------------------------------------------------------  ?6 L* u2 d( |0 S2 m
% P( b+ s" e  v
// Unload Handler
2 f3 [; \8 F# b7 T, ?//     This function specifies when to unload your application from Unigraphics.
* e) F3 @9 w! m, S; ~/ j1 D//     If your application registers a callback (from a MenuScript item or a
( c+ |+ \& m: z//     User Defined Object for example), this function MUST return4 [( @! }" T* {9 r. A; d' p
//     "UF_UNLOAD_UG_TERMINATE".6 K/ t8 V& f) ?5 b
extern "C" int ufusr_ask_unload( void )* h( K: }, a! K5 y+ r
{+ p- P3 m& X, k1 I/ t
    return( UF_UNLOAD_UG_TERMINATE );
" |) ?, z& G  l5 ]4 M, |2 l; [}
5 [7 j0 t; w) j$ K1 h" u% W' o1 q3 O+ Q6 p4 {

0 [0 {% E2 D" r% ^4 t/ y" k- r7 U启动UG就启动dll的方法
6 M9 p$ C/ I1 X8 m0 x+ K% G
) k4 a" w9 J0 X方法1.添加环境变量; h0 h+ U4 Q6 u' ?5 K0 D' i3 |
USER_STARTUP=D:\MEILEI.DLL6 H3 N5 y4 ?% ?, W  `
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
( f! F$ ^8 V1 h# }$ S( H0 B" }( U8 ^: C8 p6 E( x7 H+ `& }
方法2.在代码里添加(可以执行n个dll)/ R) r9 S- m! M2 F
UG会自动加载 startup目录里入口点是ufsta的dll
! r1 F6 z/ f. d6 g- A$ Z1 Z- a  _. @/ n. Q9 z1 C
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令  {4 m9 `" Y1 O1 d- k
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
: j2 ^# R' u3 S; D
7 A* O$ y  s  t菜单参考  NXOpen_meilei.men.txt2 [7 ^3 Y* H2 y8 Y/ V

2 o4 l) ]8 x, T# w0 G' Z% qDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
. f$ z1 p$ ?4 B启动UG就启动dll的方法源代码下载$ K) l% I5 l9 F
启动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二次开发专题模块培训报名开始啦

    我知道了