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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 & j( J* f9 M; x# |
1 t* E: y. q# y
如果你想每次运行UG 判断 ug外挂是否更新0 n/ I9 I8 q: p$ n2 B9 l
2 n" s6 `9 h% w  {9 M
2 b- v; K" F0 m$ U! F
原理:
6 s7 a' v' R) @$ w0 l; I: p; R2 P( G自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
6 [/ r9 r% @4 v2 G( A) q+ X$ J9 \然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
- u- h! ^1 s5 S* v  l+ J5 ~; T) b; j6 q# N

; D6 H( G1 H% a% `. m. o+ v被启动的dll程序源代码,如下4 v+ F; [, g1 g% R5 F0 W6 O
  d* U2 i0 y  S
//  Include files
1 ^) e4 T! ^8 k0 \& o6 x4 w- |#include <uf.h>" S" o* E- G# Q- w7 L
#include <uf_exit.h>  o) p& `5 k; w$ [1 ]1 @6 J
#include <uf_ui.h>: k1 p" H5 p2 g+ o1 X7 o1 o6 r2 G
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
0 g/ v6 n& ~" g. f#        include <strstream>
# c% Q  ^6 h4 {, s6 ]#   include <iostream>
# j0 x: d8 Z2 L9 M; t        using std:strstream;
0 Y8 X) T; Y* M7 _1 b" D' u        using std::endl;        
7 ]) ~/ k( W9 A2 e        using std::ends;
9 U8 w. t* N5 t% C        using std::cerr;- W3 o$ o: \* ]3 C) {6 R, B
#else
! V+ \  P: f( o#        include <strstream.h>
; S! M9 ^9 `1 c#   include <iostream.h>
. h6 ^" p; P, a; F$ x# D* q2 G#endif
3 |7 A; _0 L* i9 O) b% t#include <string.h>
! a7 ?  Y! ~/ s# i! V/ u  w& u#include <afx.h>0 x3 e0 o2 g$ j6 p$ m
#include <windows.h>! X4 L  m$ d' a# i/ k' p. O
#define MAXBLOCKSIZE 10241 f5 Y" L. J- C! ~' ~1 p
#include <wininet.h> //网络: A# \, [; Z4 m( H9 Z! f7 o
#pragma comment(lib, "wininet.lib")//网络
' S9 n4 |$ Z' t  P. M. v& E/ k1 P# c% n9 e
char 外挂版本[132]="V2.8F";  |- k# M$ Q: {3 x5 K
; A6 W" N( E* F3 Z" v. [; w' @

4 w% C. a. B; l6 t; S* }wchar_t* CharToWchar(const char* c)   //char*转wchar_t
9 {$ k! l9 Q1 L8 X* U{  / i- ]1 z4 P! t3 n
   wchar_t *m_wchar;
5 e2 f( X0 e9 \& F+ C0 F    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  " {" f5 Y' s$ M' x
    m_wchar=new wchar_t[len+1];  5 O) q7 b6 y8 Y. r! m: g
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  # G- L7 w* B+ `* N' Q0 X
    m_wchar[len]='\0';  # B; }' b; m3 R/ q3 j
    return m_wchar;  
6 x8 m3 P1 T0 K# u}  
5 ?6 k: ~& C; |1 b& v
0 M. L+ L: N' E3 f" X/ q//TCHAR 转 char5 o+ `; Y$ Y) L* V9 U
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  " [$ i7 f* ]" t( @- r( T4 [
{  6 n% _% ]- ^: A2 u2 k. M
    LPSTR pszOut = NULL;  
) G7 L$ S$ N1 T/ n& D$ J    if (lpwszStrIn != NULL)  : ~- e1 i, k1 L( Y4 v
    {  
( n0 k) l& ~6 |. T. _+ |5 M        int nInputStrLen = wcslen (lpwszStrIn);  # J. ~% w% u4 B
) Q9 K3 U7 m% l7 x/ ?$ o* \
        // Double NULL Termination  0 \) M' v' E1 y9 b* A4 i9 R; R
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
1 T. S5 I  ?; _5 G        pszOut = new char [nOutputStrLen];  5 ~' H2 Y1 q2 p  J$ J+ i
/ E6 x; M7 f7 q$ m: y3 K
        if (pszOut)  
, R" P9 l$ A3 _* c- _8 r        {  6 `% X3 c; L; y. P( \7 A* _
            memset (pszOut, 0x00, nOutputStrLen);  ( z: L" }8 Y7 }$ F& o: A
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
1 z9 h6 B" S: h        }  
+ w! Y- z0 \" [# g' _    }  
* }9 a/ M5 V- [( Z8 j% P/ Y    return pszOut;  3 I% m/ B! M* Q0 e% C3 U) \; `% i  y% A
}  
  i( r* I8 t4 V) i- k  r1 M1 H, |/ _" D5 P- I
' b& i& T2 \9 i, ^* g0 D  k
//CString转char* E1 S5 q6 F% D6 {0 T! \2 C
void CString2Char(CString str, char ch[])/ V. `) d) r. g) r& K
{
  Y+ {  e- T: \        int i;
& [! N" m& O$ |        char *tmpch;1 t- f6 K8 I% O6 B  q
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
6 M' b6 N/ U) I. x, k        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
" z7 @/ G8 H# ]6 K: V6 W0 y1 Q        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*7 ^! x7 Y6 S- D4 ]4 s
8 s: b" n* [" o7 e
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;3 f* T3 I( u" h6 Q) I* {
        ch = '\0';
6 s6 b/ Y7 _: P4 a1 W}" `/ C# [: `* B' H' D
" T9 }' j: u  Y" C# l
$ z: [/ j( f/ ^- h
char *去掉char首尾空格(const char *str)
" Y8 k; C& @1 ?$ t{+ ]: o$ W) C: x  f) b
        static char line[133];! Y) ~4 u/ k4 |8 I! f
        const char *pbegin;
, W$ |$ C7 g" Z0 ^' R        char *p,*pend;* t5 G$ B0 S" U" f( Y& G9 Y/ ?
        int i;
, Y! p- d) O+ I/ A% l  @  S7 @& S' O: i  C9 E" }
        pbegin=str;
7 x4 {' ?, r& n& d+ `        while (*pbegin==' '), E/ ^0 `1 L6 P) u
                pbegin++;7 ^& G" Z& t: w$ ^/ y( `

* w$ A$ x& g9 o  W        p=line;
6 ^8 r9 c8 [/ w. }        while (*p=*pbegin){
2 j9 D1 [# P) }: Q. w/ {                if ((*p==' ')&&(*(p-1)!=' '))
, d, M" u) P3 b9 I9 Y9 @+ x                        pend=p;
' P1 g, q) f+ U6 |" e  A                p++;pbegin++;        
: `- M7 I; p0 @; K        }( A7 O4 I. e) d: `% R
        if (*(p-1)!=' ') pend=p;7 J' o" C" C5 L1 y1 A
        *pend=0;- B) g1 r2 D9 A, ]1 Z
        return line;2 ^; C( `1 Y+ M$ _
}
+ }+ {' Q4 I$ T: E$ l9 ?) Y( f2 t9 b# |* Y
  V# P# h  V1 ?/ T3 T& [  ^8 i3 o
//获得网页信息 - 网页信息是中文会乱码 用英文信息
; Y/ {9 @- E: k, p4 E/ m6 a: S4 uvoid 获得网页内容判断外挂更新(const char *Url,char *html);6 A. j5 T: w( D* {& D5 l
void 获得网页内容判断外挂更新(const char *Url,char *html). o% k1 T$ A1 o* \( v) r
{$ `* m* \" c: Z+ v/ E
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
& v4 B4 {+ ]) i; |7 _        if (hSession != NULL)
1 V! d* H9 s- s0 {# |        {
( e/ s, D% W& R. T5 S- z& ^                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);( R6 A  b" c3 {. y3 s6 @+ P: N
                if (hURL != NULL)
2 I' q/ L# {: I1 ?& k                {
% {$ y% f! u+ Z+ W' P. c7 y
/ }& x8 r+ Y' ^0 H- d                        char Temp[MAXBLOCKSIZE] = {0};- S1 I: [' x1 |. u# `+ F5 Z# w3 k
                        ULONG Number = 1;7 }/ g0 i$ U. u' w6 c' ?
                                while (Number > 0)
& {5 \3 j& F, [- {                                {
5 C$ C) `& Y4 K8 i, y7 j1 X                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
1 A+ k% o6 J$ z' V% f+ R( L                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
* {, o9 t- W/ t. a  j                                        int a=strlen(Temp);8 U: A9 p9 U% b% N* Z
                                        int b=strlen(判断版本);   
- ?7 E5 S* f9 X                                        if (a>b) + P& O: A( R3 J
                                        {
+ y, n. r+ r' B3 V6 _                                                char *p=strstr(Temp,判断版本);' Z. X9 z/ M" F! T7 O; G
                                                if(NULL != p)* }) k4 w; ^( }; g& u
                                                {          8 Y* `9 G& S7 W! X0 P2 W
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
& `% i; _% o. @9 b, W* y                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;# w4 J+ m. q  \
                                          char s1[132]="";! X  h+ \, \2 I( f
                                              strncpy(s1,Temp+wz,wz2);  W% d$ r* Y9 |# m# F) P4 Y2 h" d
                                                  char *p2=strstr(s1,"MEILEI");; f* o" \1 W- |9 D: r
                                                  if(NULL != p2)
9 b+ M- v, l+ B' b" Q8 q& q* G- R" b                                                  {  
$ @% c$ ^& U- N! {" n                                                          wz2= strlen(s1)-strlen(p2);3 g# \* x7 P1 U/ E) Y; [- W
                                              char 最新版本[132]="";
( N8 X' X& t+ ~. n& u; Z                                                  strncpy(最新版本,Temp+wz,wz2);" D5 }* r5 }, Q3 k& F6 c
                                                      if (strcmp( 外挂版本,最新版本)==0)& r; L: F" m0 ]6 m/ Q% Y, i
                                                      { 3 F: J  d" o. ]+ K$ ~7 Y0 u
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );( V, d1 I! D- D4 N0 ]0 {  J$ t
                                                      }
; S4 U* d% [2 Z) W                                                      else
2 `: q% G7 F& p" j5 D                                                      {; V& J$ }5 H" `: V, P5 b
                                                            char msg[256];
! H' l, o: l$ u. n% a( _. O                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);8 D+ N6 ~( F+ q
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );! h1 C4 ~! a& q; X" m3 F: s# _3 a% t3 N" e
                                                      }
+ E1 b9 j0 s. r$ w3 J                                                   }
' c9 H9 P5 _$ ^5 w9 U) d+ v  _2 y                                                  goto LH;- V2 u/ y$ a. w! n* c! n' G
                                                }  k' }- A/ h9 Y% L: C: `4 K0 y
                                        }% j) |# d8 I8 m. S
0 v1 z, d, ]$ T5 s3 e
                                }
) A0 M; q6 R9 {                                LH:;
) o( o( d0 ~% ]1 s; b8 g4 }$ V                        InternetCloseHandle(hURL);
$ E$ K/ e0 t0 M! K! I                        hURL = NULL;  R) h% L# z- R" V/ e- }
                }0 R& W3 j2 e* y" B2 J" L
& z0 K2 _* @5 F3 ^. j) d; q
                InternetCloseHandle(hSession);$ e1 j, S3 O0 v' S( _6 v/ X
                hSession = NULL;
& B: t: F3 I& L. Y- |        }( F7 \: `0 _" o. |# t7 \
}
' L8 }' N  F, L8 Y. S" Y9 Y$ H/ l' y7 e, O7 Z5 @6 M

+ ]( z8 A& N, O6 y! H, Y; H//----------------------------------------------------------------------------
- |1 k2 `+ @; Z$ \+ r9 A//  Activation Methods$ [- {; k( D4 _8 N, j6 n, W1 E9 ^
//----------------------------------------------------------------------------
$ P8 o0 ^" S3 t$ k8 {; J, @! [0 @2 r# {! `8 i( M5 F, f
//  Unigraphics Startup
3 X1 u7 p; ^  l2 q% q0 P' E//      This entry point activates the application at Unigraphics startup
( y. m1 \/ A9 M- {# Fextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen ): [$ z+ {0 ~4 P- U8 b' W# m
{
" _$ s9 S1 c8 m    /* Initialize the API environment */
- Z7 D9 A# _& X6 U0 c; B, x    int errorCode = UF_initialize();
% P; m! q/ p7 X7 }2 G6 g8 o7 ]& [: v2 V$ X% ?2 V$ s
    if ( 0 == errorCode )
9 S' D: p4 T* V, g4 u    {% E  v1 h' l1 T
        /* TODO: Add your application code here */
$ u6 [: a. a3 ?% r
/ y) S% T& P' H' q# ~! r# b8 x! F& u) s" J" A/ }
                //百度云公开链接 通过修改txt文件标题
' Q4 Q# I, k5 d) c' R" q. {                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
1 ?! |6 P* X7 M9 Q, t* x% K* m0 _( }: K
0 A/ j: E( Z* F. G" ?; X
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
/ {! h9 M6 J( J. H: y                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
( V0 O) G. f. O+ X, o6 a  z* G               
7 t5 c7 t/ i1 f4 w        ( U" ^5 F5 u- }5 V$ i3 j+ k
+ k+ s0 }2 n. c8 s
0 {& m0 |9 w( Y3 Q

1 H1 v9 Q/ `8 I9 v  k' f* z        /* Terminate the API environment */% D* ~$ d0 p- \9 [  p0 F
        errorCode = UF_terminate();
- x; Q" ^3 g+ ~! j: ~$ D0 V7 q    }' W( c3 Y0 a: E9 ?( }, I

! K% `4 v& p& |% u- {0 _    /* Print out any error messages */; p- k! J( u. e. ?, k
return;
9 K7 f# {6 z) n4 E# a: a3 Q5 J}  V/ I& O9 P% k

7 O  \' ^1 H/ n//----------------------------------------------------------------------------
8 T) _# m: G. I( @2 e/ X. I//  Utilities
7 F& E, @3 F! K; E//----------------------------------------------------------------------------
. u$ S/ |* U; e$ M" j3 K" l& ~) p/ k8 O4 H2 a
// Unload Handler
# n; z3 F4 b! [, U3 K- R//     This function specifies when to unload your application from Unigraphics.
' w' V! z& z1 g8 B( z- }//     If your application registers a callback (from a MenuScript item or a1 s: j, |  o8 ]2 }. X/ n
//     User Defined Object for example), this function MUST return
. M, E6 D: R9 q//     "UF_UNLOAD_UG_TERMINATE".
4 A0 p* Z4 |0 g0 [% Y8 B) dextern "C" int ufusr_ask_unload( void )$ K: r7 i' e/ G* x0 u
{4 j( }! |$ H1 B
    return( UF_UNLOAD_UG_TERMINATE );9 c' B8 ]& a2 m
}
% l4 |8 {! L3 @, n
6 H  Z; P. F6 x% x) @5 X% h
3 a" F1 ~1 W: {启动UG就启动dll的方法6 Q( G2 e- N* ]$ }

" H7 ]- M( x$ @$ g方法1.添加环境变量, d1 R" D% Z+ _& q
USER_STARTUP=D:\MEILEI.DLL
/ `& T$ G' K; u$ [但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了" S) C+ R% X7 d3 T
/ c5 ]6 E# J% {5 w( i$ P; U, b, I
方法2.在代码里添加(可以执行n个dll)
0 k7 a* H) F8 c6 lUG会自动加载 startup目录里入口点是ufsta的dll
- _3 c) b0 ?& L4 K: _. L
1 V( |* E. B) W1 O# q" R所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
  s& G1 R" q" X4 U. w7 o7 b参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了5 K; i* s+ U7 o3 D" E
) A8 I- Z' {, C4 J) y
菜单参考  NXOpen_meilei.men.txt
% x" u3 [/ I; c7 f6 o7 a
, l  q! C" j3 v; sDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录0 _. A' h2 P: ?& f0 c
启动UG就启动dll的方法源代码下载
7 ~8 f7 I: X( d3 Z8 s7 ]0 w4 J 启动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二次开发专题模块培训报名开始啦

    我知道了