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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 $ y$ }0 ?3 T6 a- |' n8 n

7 v2 z, |: O' A6 n如果你想每次运行UG 判断 ug外挂是否更新
. ]# `7 q9 R5 z  R" C. V. ~0 A) \: E" ^9 |6 A
* G9 b* Y9 Z1 o( G1 X
原理:
! I; {( k1 I' ?  I- Q9 F自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
3 x" Z' ~& b, _1 M然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
, {6 R' b% M+ g' u! X+ F: Q3 z# U% E' \* K4 U# @, x
& V, Y" s# q- O: w
被启动的dll程序源代码,如下6 C* h# t  e5 D+ O* k! H& x

/ ~! ?9 ]" D6 B" ?) j3 M//  Include files
" }+ [5 h" I8 S2 C" s5 F#include <uf.h>
, O# y, ^- [% @; _6 f3 A+ b#include <uf_exit.h>
( n0 U6 G- F' P#include <uf_ui.h>6 \) j2 d4 U3 `2 m
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
/ ?# w& v4 Q) ~& L1 Q#        include <strstream>
/ m9 s9 [1 B0 K& m#   include <iostream>
8 A9 _2 U; a" K- p  P        using std:strstream;
, u: x  L  h) R2 F7 ?! k        using std::endl;        3 u, L4 N# P$ x# \8 a: [6 ]: W
        using std::ends;
1 x% P2 q% a1 @        using std::cerr;, }6 J- p0 R4 T3 I) P! O
#else
. I9 i* u  v+ z5 G) g#        include <strstream.h>. @. C$ ]3 j+ _) ^* T) C5 r
#   include <iostream.h>+ I8 Z% F. z) p; x! y
#endif! s% c+ \9 B( M
#include <string.h>2 }3 R0 W9 [2 e/ f7 s! L
#include <afx.h>$ \, d4 d& I! b2 E
#include <windows.h>6 |5 `1 K" {( x6 \9 q' [
#define MAXBLOCKSIZE 1024; i. H5 a$ r3 v! s
#include <wininet.h> //网络
& l; g; P' @* Z2 m- S' r) l. Q1 D#pragma comment(lib, "wininet.lib")//网络
. z( }' }9 G; O/ f" m" T, {, \9 M2 S9 P5 c# E& u# O3 e9 k, p
char 外挂版本[132]="V2.8F";* l% \2 |( k7 z4 q& D% }3 i1 D/ C5 O
0 l0 }$ i! H8 X2 y2 W/ ]* [9 z

$ Y% P; v  k. W6 |& [% P6 twchar_t* CharToWchar(const char* c)   //char*转wchar_t
: J7 @; `: Y$ o8 ]3 m{  
: L& c% b# l" V7 l+ B( B/ m   wchar_t *m_wchar;# R( A: b5 {% S$ s. J
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  ( v' r$ u( v- O& E' |4 K8 u
    m_wchar=new wchar_t[len+1];  
( K1 h' y, ~$ F    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  5 J9 [0 h$ H5 |
    m_wchar[len]='\0';  - a9 K/ u) S+ r$ r: F4 ~" ^
    return m_wchar;  
/ d4 w* T; E/ \+ r4 _! o}  0 q8 U( N  p/ H" v; [4 e
/ c& E3 [( y1 _0 s2 v) J: e
//TCHAR 转 char4 h  A% `: {4 F% K
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
! y( ?/ Z6 k9 P9 W! w, i{  
5 b7 j" J+ N- I. d7 u+ F( M9 g    LPSTR pszOut = NULL;  - H  E6 I! F% T" J3 w" U
    if (lpwszStrIn != NULL)  
6 C& }- x+ r! w0 M$ Z    {  
$ a; C; g" ?: {  g* q% B. f7 t- A        int nInputStrLen = wcslen (lpwszStrIn);  9 T" O0 ^6 U0 W; E

  P5 ^( E$ n7 C- L  W% h" H+ Z$ w        // Double NULL Termination  
- c" f# F( _$ r# i) n6 R3 k: Y# h        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  ; B+ p8 E  Y' r$ i) B
        pszOut = new char [nOutputStrLen];  5 C5 Q4 \4 Q/ H
1 S; }: O) Y/ u. Z; |9 o" `1 v
        if (pszOut)  8 n/ e( F6 z; \0 g) a, j
        {  * V+ }3 S8 p  a. v* \( z1 S! @, M  @
            memset (pszOut, 0x00, nOutputStrLen);  
8 `" }, U! i8 |# l            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  4 T2 S6 j' f9 L1 r7 L
        }  4 ^" d8 h; }" Q7 x' @1 J
    }  ( f& j: |. w. q0 `/ V; z
    return pszOut;  / p1 B. I" S& P9 _+ V% b
}  
5 ^: \3 m1 ]! j* U" j9 j2 O
! D; [/ x4 ~9 a! Q9 {1 l
- j- ?! Q/ a4 X" c/ q( K//CString转char0 d, K3 D. T5 ?$ p
void CString2Char(CString str, char ch[])0 {( u2 b" r" _1 o6 y1 r8 Q* w0 p
{
1 I4 y. K: j. i) s8 ]; v6 z        int i;
+ e' J4 V: U. ?# J8 f        char *tmpch;
7 R  B; N& o3 o, {) V  P        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
! F( X7 e; B! v& _& {5 z  j( P2 ^        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
* e. ]! b: `: {% \7 ^  Z! t$ x. Q3 I        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*4 T+ l8 G$ G' r2 k: y7 P8 `+ W' w

8 l4 K8 k2 J0 ]; \0 V5 G3 i        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
2 z3 c" v" n6 e& \2 G        ch = '\0';  R8 B4 C" f- y5 R2 Q. X7 T
}
! k$ d# ]( h. E, m9 v6 W+ C& Y) V: l$ R

; k& k- _' ~# F/ A2 |  Tchar *去掉char首尾空格(const char *str)
8 C! `5 Z3 q2 h  I3 N{. Y$ K5 l3 k9 f" }5 ^7 d' r
        static char line[133];' [0 H2 q# R8 F
        const char *pbegin;
6 o% h/ C+ l+ p2 Y7 u) k        char *p,*pend;
# @4 q0 m9 u; d3 L        int i;' y# d( D* n0 H. t
* k4 k, P- ?, N- d, {0 w& p
        pbegin=str;
3 H0 D, O2 j  x        while (*pbegin==' ')7 l+ G+ ]3 J9 P2 e# Q& K
                pbegin++;
# e, O$ T+ L6 b0 r. [6 J3 B$ G
* Y% N9 v9 b6 q/ N- W* ?9 v        p=line;
. t' M( N0 u* X1 z6 \/ T        while (*p=*pbegin){
. {, x3 p5 M, D: R! k" Y+ o                if ((*p==' ')&&(*(p-1)!=' '))
$ A! U$ s# J1 x3 B9 j! Z                        pend=p;
: Q7 q* q: ]# B  G7 z/ F& z- T                p++;pbegin++;        4 y  K; l1 r1 c7 C3 N( L* h
        }
3 E8 g+ d5 o& `6 P        if (*(p-1)!=' ') pend=p;
7 C+ O) w+ ?; [' Y        *pend=0;) @* g1 E2 R2 `, t5 _. z
        return line;
0 K, U2 ^6 T9 T$ C} 2 `  v# q! q8 M; h3 r

2 U( [, y" i8 a1 B7 [) Z. |+ T/ B+ h+ ]; w, W
//获得网页信息 - 网页信息是中文会乱码 用英文信息5 r' b- ~% x' s3 j* y  k4 V/ d+ z
void 获得网页内容判断外挂更新(const char *Url,char *html);
1 e  ^1 N2 g! |# v! p, Lvoid 获得网页内容判断外挂更新(const char *Url,char *html)0 T2 a  A+ `/ L
{
% t: J! f) A  |" X6 T        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
8 o. M8 W3 R0 ~( a- a        if (hSession != NULL)
, U3 ^3 I! A1 C. g& s" {        {
* \/ e2 [7 o% H# a/ ~1 ]                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
4 i4 ?0 C  \: b) V3 _+ w( I+ p& q- o                if (hURL != NULL)  v, w2 [3 y4 I7 v) {( ?* u7 M
                {  |* X# U: o# Z- C7 z' [% i* U& @: I

- [/ E4 _9 V- O4 H% ^0 q8 W3 q8 K' y  r                        char Temp[MAXBLOCKSIZE] = {0};1 V' z" z7 h. @3 i: G! ^+ d
                        ULONG Number = 1;1 w, Y" g. F9 }/ ~9 B+ o' W$ p
                                while (Number > 0)
8 G+ h: Z% O% k2 Q: w2 {4 r1 |                                {
( e/ ~1 Y& v- f                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);1 s4 P1 i! x( }' {( `7 R
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
. C6 K+ _. A5 V, [" G                                        int a=strlen(Temp);3 W; o% C, ^# }5 H) b+ t7 X% a! U
                                        int b=strlen(判断版本);   7 h' b  A* i1 B' F/ p
                                        if (a>b)
4 J, @6 m) B, ?                                        {
. `& Y" ^. `1 R8 M( ^8 D9 g0 {                                                char *p=strstr(Temp,判断版本);
6 h7 |7 a3 l" b( ^6 T  U7 k" J% Z                                                if(NULL != p); p: q+ k# c0 d0 W; }% y$ @
                                                {         
( W5 B" n: E$ x, y: J8 n3 T$ x                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
# n9 d' c  H- ?2 U  H1 p7 Y                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
; V! t+ a; O( a8 m. t                                          char s1[132]="";9 o- n4 S7 K) ?* \& ?* W0 h
                                              strncpy(s1,Temp+wz,wz2);& @, j' o0 ^6 a* O" F1 B
                                                  char *p2=strstr(s1,"MEILEI");
1 v6 u1 Z: ?0 \                                                  if(NULL != p2)" ]2 P# d1 I- v; u/ c+ }; ^1 {
                                                  {  ' ?8 M% L) m; U* P1 V
                                                          wz2= strlen(s1)-strlen(p2);
  Z% K/ J8 B0 H  m9 {                                              char 最新版本[132]="";
; @" T: Z  f, p3 N+ V                                                  strncpy(最新版本,Temp+wz,wz2);
% c9 F! J' G& I! ]4 p                                                      if (strcmp( 外挂版本,最新版本)==0)
- F7 ^4 @) N6 q- U0 t/ c                                                      { ! z2 S1 l, }) U$ c8 c! ^, @
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );/ u: v5 @' x! |# U" v& C9 n$ h2 O
                                                      }
& H7 [6 F( B1 b' C                                                      else% P# {; B' F+ o( z) ~  O3 [
                                                      {
% B! D, v+ R& z* @% k                                                            char msg[256];3 u7 c( l2 a4 n; t7 b
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
+ j# `- U  U) x/ n$ U                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
8 r3 H; M# ]- W3 C                                                      }& h% P0 F: r# R; e" c8 u
                                                   }
$ l  \! \; q, u; Z, K$ I2 y1 ^                                                  goto LH;
! B  j3 t5 N( E" f                                                }
% @1 Z' d( `$ F( X& e                                        }6 ]4 g6 e/ q; d' a! I) t

) c: l( Z( P. M5 j                                }
2 m1 I! d" n8 f! e- L                                LH:;8 ~5 B/ ]2 Y1 V$ B6 q% D
                        InternetCloseHandle(hURL);
1 }" F5 s% z) v- y                        hURL = NULL;' M( p* v8 \1 D8 T: n
                }, K# m4 D4 D( B7 @, F6 ?

. B- @- N, U1 \; H                InternetCloseHandle(hSession);
9 O+ F8 M% y# `; q/ O                hSession = NULL;
/ S+ `2 p% o8 q! k& j        }
# f- z3 v! H" {}
) T/ j9 z# h% H. V" t
3 R& `7 l, {% }  r* [# G5 x3 C4 n1 W1 k) q, N9 v: b3 X- h8 |
//----------------------------------------------------------------------------! u) ~& ]/ v: m, C7 y
//  Activation Methods
# C7 E/ ^# ]$ g& L' d& M//----------------------------------------------------------------------------" S9 w5 T; S5 {! W, ]# P3 o4 u0 y& C; W

" \4 ?4 F: ~( J. ^; j: S- J, [1 @( r//  Unigraphics Startup
1 H. w, L4 b! U( L//      This entry point activates the application at Unigraphics startup8 T5 l  w# j7 ^" z
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )  k; }; F/ A5 |, H/ Z1 @/ R% [/ \
{8 X: I+ N2 a6 @$ {3 V( x' ~( M
    /* Initialize the API environment */9 y2 {. V3 `1 u9 w; q
    int errorCode = UF_initialize();- U6 g3 f6 C9 f, {/ }- I% Q2 o

' ~$ P* p  d+ Z; H    if ( 0 == errorCode )
. L5 x$ l# z" |; ?! a' S0 }$ @    {
" v# A; D% a8 s9 d& z" `" U5 d% N- a        /* TODO: Add your application code here */
. V0 J& M! }4 ]. P+ n, s5 X: e2 F9 Z

  h( }4 ~: E! \9 m: h                //百度云公开链接 通过修改txt文件标题
" a- w6 }7 P/ i% i                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt$ o8 I  q9 D. {0 }3 l
) f8 i5 l$ `' D+ z
9 _' l/ p3 M2 v
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  # w. K( v+ C& K0 H5 Y
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); " F% G# ~9 }# F0 a9 Y3 h1 Z
                + q/ K7 c9 g9 h0 Y; n5 A- _
        & |; L* }$ o: T+ H. ]- F  L

$ [/ w1 `+ ?2 x
: I, ]; Q% _  {
/ k1 A# \' b- q# @        /* Terminate the API environment */
! q& M! g% e5 W( k! w        errorCode = UF_terminate();! N9 s* h+ ~: ~2 m
    }( P/ f, R/ H& `, k; U, \

0 ?4 l" D; `/ \" F2 A: w    /* Print out any error messages */  k. d& w& M& l0 O% e  m! _: u
return;
: d$ r' \' J2 e8 G4 p; q}0 c5 s. J0 T* l% w9 g

4 P( d. o* [, L( I' F//----------------------------------------------------------------------------
7 l1 w, \  ?2 s0 h; f8 P- ?0 [//  Utilities2 y+ ^  C. p0 C, b+ T5 h! C0 X) R
//----------------------------------------------------------------------------& U( K; E  s9 ?. V

( A$ v4 ?7 S2 `6 s' O0 {' }" ]// Unload Handler" O( ^# e: R1 ]. h  A7 |- p& M
//     This function specifies when to unload your application from Unigraphics.6 \, u, L' {5 G: [
//     If your application registers a callback (from a MenuScript item or a
9 p% p4 c3 X8 O; K+ s5 V' C//     User Defined Object for example), this function MUST return
9 O+ c' k5 N  x! m0 H' v( d//     "UF_UNLOAD_UG_TERMINATE".
! a& w3 X& ?8 g/ ?% lextern "C" int ufusr_ask_unload( void )
9 w4 [% ?  z% }0 j7 w* s{
- k7 p0 r! H* T* E/ \3 f- _    return( UF_UNLOAD_UG_TERMINATE );
# u$ ^! Q  `" S/ E7 [; e3 |}
: a. Y% A/ d7 F; P$ a- D6 ~* n# N0 a/ D- \7 _+ c( y' r( s; q* P( j

3 u2 U  M6 W' M) G1 |启动UG就启动dll的方法
& P5 Q: ?  [1 s% b! w, a: R
; Y5 X) o# x8 @, L9 a! V方法1.添加环境变量4 B0 F  U, J" q* s. }
USER_STARTUP=D:\MEILEI.DLL
- p/ o: y- J: f但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了0 Y% G; d/ s' Q- q

. _. O. i) r3 ^1 G; z7 z" W方法2.在代码里添加(可以执行n个dll)
2 n7 `& g2 e" e* K9 U# G& l( LUG会自动加载 startup目录里入口点是ufsta的dll7 T: b0 U" h- B5 Y( ~2 w& G4 ]
5 Z1 O( M+ a0 e8 K
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令9 l* P6 q# [4 Z' y/ D. q
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
, G" S3 R6 L4 j0 u, f) [5 l* o
菜单参考  NXOpen_meilei.men.txt( P) ?8 X' A0 u' G" h* @

" t" {% f6 c4 g0 A) jDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
9 E; h1 G1 i1 P  t( R启动UG就启动dll的方法源代码下载- J: w3 \8 ^" K8 B/ [3 `
启动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二次开发专题模块培训报名开始啦

    我知道了