PLM之家PLMHome-工业软件践行者

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

  [复制链接]

2016-12-23 19:47:22 4739 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) {: c7 L* u; E
, ^& {7 r6 m+ i! y& f, D如果你想每次运行UG 判断 ug外挂是否更新# X9 ]" N3 Y) V' @* P/ }

* P" Z$ q: S1 ~7 g/ C: Q# }& O$ A. Q
原理:7 W% }) C% S  ?5 D% c
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了" B8 m4 `- w7 X7 t) x
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断( s" j; x$ p, f7 A; f
  e. B9 y' n- D' V- `( e0 H( R' C, `1 r

/ Q3 Q5 Z/ ?: L# `9 d  o' J- z被启动的dll程序源代码,如下
# N$ Y! g3 d& v. x# s2 E- j3 T7 `1 _+ \6 n
//  Include files" Z+ q; y7 @$ S! t
#include <uf.h>' A+ t/ }+ S4 u- w* t
#include <uf_exit.h>4 D6 t' C7 P& Z; u! f1 Y
#include <uf_ui.h>
, }# a5 W/ Y" b, m' C( H$ l#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )! H& X; M2 Y0 N6 L# r+ w
#        include <strstream>
& l8 i& K" B" \; w5 k7 G#   include <iostream>
6 Z4 b' B& w% \4 S/ S) O8 Y        using std:strstream;2 R( @! `( ~" {6 z  K/ Q6 k3 G5 o7 ~
        using std::endl;        
/ J% p- D; U9 I9 {0 o! s        using std::ends;
2 K" q- W7 @' M2 Z( F" Z% N        using std::cerr;
" ~: f" m5 J6 n  a#else; ~& v, y* k0 F) ~1 I" _: d
#        include <strstream.h>5 a1 G3 |% ]7 g/ `- F: K9 K# M0 X
#   include <iostream.h>
/ U& ~& n$ \, s3 l- N- H#endif% J# B2 X- |+ U, z. ?6 i+ V
#include <string.h>
2 `; D0 U# Q) o( D9 ^6 ^#include <afx.h>* c" p; z3 }2 G+ ~% ]
#include <windows.h>
3 m0 ]; [' \' J+ ^: P#define MAXBLOCKSIZE 1024
" _5 W9 V' \0 Y' k: h0 t# m#include <wininet.h> //网络
$ l8 q5 u% C3 z2 W0 l' A  V#pragma comment(lib, "wininet.lib")//网络8 S$ J7 G5 B, Q) s: K

1 c* ~. y" z' H) W7 }4 y. pchar 外挂版本[132]="V2.8F";
3 _) [' P2 |0 |8 R
- Y3 j8 |& [& Q( c. J4 I
0 G/ x  V! i0 d: _# p, kwchar_t* CharToWchar(const char* c)   //char*转wchar_t, P# |+ r/ n2 m* L# z8 A5 f9 m" r
{  
) Y# B& {% |8 N5 i   wchar_t *m_wchar;
1 t! n$ s0 x- j( S' k    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
# f  [5 n- W% {    m_wchar=new wchar_t[len+1];  
$ O3 n4 x0 y' @- `8 [7 e    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
5 v3 X1 J8 |! V$ |: q- x( u: e    m_wchar[len]='\0';  ! _. [) m8 o, [
    return m_wchar;  + T: T  W, K+ S, a8 f
}  
1 e0 e1 B1 I: K: G' b* ~9 Y" O4 `
" P$ @0 i8 ?/ p//TCHAR 转 char
: f1 d: b3 X/ M- S; X* }char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
+ e; W) q1 b% A{  ; m7 ?, U. j. q4 D3 G  z5 F
    LPSTR pszOut = NULL;  
8 L& X, V5 g0 b- p. s% i    if (lpwszStrIn != NULL)  2 A6 N' b+ q# y4 T; C) K; `0 D. l
    {  2 d6 P' [9 |3 b! r* w; f8 C0 u
        int nInputStrLen = wcslen (lpwszStrIn);  1 @' a& |% \2 k' a5 i. R  P
! a; Y$ i# l. E& R
        // Double NULL Termination  * L$ l$ g- I3 x# ^/ n; A' K
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  2 K& J6 x: X  e
        pszOut = new char [nOutputStrLen];  ' z% d: e9 S: K/ V
# z9 X) q9 l" S- l- b$ G" L* P: D/ g
        if (pszOut)  3 j" Y& F5 t' z0 M; t; i
        {  
% Q6 \8 Y1 U+ D: K9 f            memset (pszOut, 0x00, nOutputStrLen);  
; e. @+ u- p; A' f$ b* F; x8 @6 C            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
) g. F5 V# P% j- y        }  % Q- j% ^* B- F/ {- u. Y
    }  
1 @, v0 k: V5 S" o  S8 \* u    return pszOut;  
. N0 {- w' u) p& S. h}  7 U2 V; a0 C' p  K7 g
- K0 E' m0 @' i6 M! a; E+ C
) x7 T7 K0 C  a
//CString转char/ M- F9 Z7 }7 q& a) u! |( y/ L$ \
void CString2Char(CString str, char ch[])& ~8 o1 B* m: c3 e
{3 ^6 Q5 i2 E+ e: N
        int i;
# i0 S$ z: t* D3 s4 t        char *tmpch;; W7 T; `* h  J( H6 q5 ~2 b
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
1 Q! U+ `1 k) _        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
, p1 w6 [9 }' H2 U9 y3 i$ F        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*  G  x0 D7 c2 x# y) r# m

) K/ e- N# c2 }6 w  U) L* Q        for(i = 0; tmpch != '\0'; i++) ch = tmpch;, k  g9 A3 n1 S. {& g1 ?
        ch = '\0';
3 b% z0 |- T7 P! d8 }- W3 z. ~# O}
4 G2 A+ E0 ~, P4 k# z; _+ d6 b
+ w2 B8 r3 |, }3 Q3 O
2 [7 W4 T$ K' y5 ]& Q# K5 k3 xchar *去掉char首尾空格(const char *str)
- z1 Q" C/ d! G1 H# D/ F{% M. w5 I% V1 ?+ m2 K3 \
        static char line[133];
1 w+ t! c  `& K9 b6 H: x        const char *pbegin;! a0 k+ l, s# d/ B% o
        char *p,*pend;
$ j+ _2 D4 L* {3 R' Z* R' C6 I8 I2 J        int i;
0 J; W0 o1 N  w
  S. g8 @  I0 B5 X0 `5 ?* O& q        pbegin=str;7 e; k* W. s+ v8 F0 K- p  ]: T2 p0 A
        while (*pbegin==' ')% f3 o9 F) [  s9 I- j- T
                pbegin++;8 W, O" A" Z$ Z, Q$ X
" @( o' J- b' H, f
        p=line;7 Q3 P6 t1 M5 `
        while (*p=*pbegin){$ d5 L' G1 `0 [' @1 t, H4 N7 M
                if ((*p==' ')&&(*(p-1)!=' '))
3 v" P+ V" c8 h' ~$ }9 b9 O                        pend=p;
/ V" E% ^8 d$ f7 I- U; n/ y4 s                p++;pbegin++;        * Q( X4 T# T! s$ k# D
        }4 k5 y/ x5 w6 Q5 f9 B% D; y
        if (*(p-1)!=' ') pend=p;
+ _- t+ t! c6 j1 P/ b: I# K        *pend=0;
9 l- u- ^) l' a) Z. T* D/ P        return line;/ h4 q. _4 Q, ~, {# C# v+ l
} / n/ q  K! Q1 u& N' \

+ w+ W) }6 x5 G' L: c, ]. o" D: j6 s5 V$ }
//获得网页信息 - 网页信息是中文会乱码 用英文信息. `) i$ D: R' N$ F
void 获得网页内容判断外挂更新(const char *Url,char *html);; R9 z7 S* }0 T5 J
void 获得网页内容判断外挂更新(const char *Url,char *html)
5 R5 {- k, O2 z/ A* ?% r/ N{
- g/ I' n4 `+ t% S+ W6 o        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);9 K! D; R+ c( Y1 w. i, ]
        if (hSession != NULL). F  Y$ h) I& M/ T2 H* s8 r. T
        {$ \3 K; ]+ K8 \. W: [+ W) s! F6 C
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);& [1 N7 m% u) ]: G+ ~  r( k
                if (hURL != NULL)
& y; c1 D. L$ p; d3 Y                {
, M0 i1 V4 `7 a8 K0 F) l3 j3 p2 j' Z( U, M, ?# k; _  L: E; P
                        char Temp[MAXBLOCKSIZE] = {0};
( _! Y0 a+ n7 D( @                        ULONG Number = 1;
) C% G. \: g' @* ?                                while (Number > 0)
, ~) n7 Y+ P3 W- ^8 F                                {
* z0 V) \4 s9 n9 d: N! N7 f                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
! v3 k, f7 u% G! }$ o- N0 \* a                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
9 `* F( N" F0 q' W2 S: ?                                        int a=strlen(Temp);
& S: a: u3 A: ]                                        int b=strlen(判断版本);   : f) ?+ S& w; A, x- W1 X
                                        if (a>b)
& a) O. ?& k3 Q+ U9 e                                        {
! _) Y+ E/ a9 k" E: X# ^                                                char *p=strstr(Temp,判断版本);
% y4 \8 f: f3 I" F% X                                                if(NULL != p)
: a/ L, Q* `& E& |6 _                                                {          - n% Y- m4 d  E2 ?1 Z& c4 t
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置2 x9 k( X  C/ c5 Y% h
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;. P* c  J( h5 W0 V
                                          char s1[132]="";) d4 M! R! ]4 Y, k. _
                                              strncpy(s1,Temp+wz,wz2);
0 @- q( V' M: Y                                                  char *p2=strstr(s1,"MEILEI");: `# c2 B. V5 ?/ |, \! J- y7 g3 ^
                                                  if(NULL != p2)
  p: [7 H/ _" g- y3 {- q                                                  {  
( M+ d; P4 j; z                                                          wz2= strlen(s1)-strlen(p2);
7 j6 ~1 i& P( p2 W3 A  u9 m2 c                                              char 最新版本[132]="";
& `* R' H' R$ U" x6 V- V5 {; P6 x# [                                                  strncpy(最新版本,Temp+wz,wz2);
7 X( \6 q0 W$ y& q  \0 B  H& N                                                      if (strcmp( 外挂版本,最新版本)==0)
# p7 l/ s" x; s- @. H                                                      { 6 a; f% ], ^! |/ m/ t
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
  U) R# l+ u! X* v5 z8 q                                                      }
. @4 p" }! o# Y) P. |, T                                                      else* q2 s' u+ T5 p
                                                      {, T  Y4 v" F8 p  p3 h7 ?
                                                            char msg[256];1 q7 o$ r' {( m8 y+ Q) k+ x
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);) o3 n% j$ }" b0 R5 @3 h/ k
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );& D- q) o7 |3 B- Y" u
                                                      }  g; }" U9 K! E; G. Q8 V. v
                                                   }3 B' s- Y( `) c3 ]" m$ m! }
                                                  goto LH;) ~/ H; Z& h: r& R) p$ }5 y
                                                }
4 W2 _: M+ }, Y* Y; k) a( f/ j6 E2 R                                        }
9 v  d7 g6 R: J) ?: |  N. L; c
9 O3 H. a( W0 v" v                                }
! ?' g+ j( ]& f                                LH:;
, a; H- d/ G: ]                        InternetCloseHandle(hURL);$ v7 ^1 J5 d% O
                        hURL = NULL;6 _$ W( p8 G  s$ f4 G6 _9 B9 @4 k7 w/ x
                }/ S" G3 h- [) {7 r2 M

  X+ c5 U$ _# o4 Z( E+ }                InternetCloseHandle(hSession);! L7 a" t! U6 \: m, c4 S4 |4 {5 J5 p
                hSession = NULL;
+ j7 a6 L2 c# q; n+ m* M1 p        }
: E! P4 c& \: t4 V5 Y, {% v}% e" a/ D9 F3 k! _' j- V6 G$ y  M2 @
$ j( o& j2 j! q& q4 i

4 s& c# p1 Z, z3 w. T//----------------------------------------------------------------------------
7 H/ v7 o" c* C//  Activation Methods
. ]6 F1 u8 G' K; w+ z" r; u) b//----------------------------------------------------------------------------  I; l% R7 j- h5 O  n; Y* q
7 D4 o  s; [* x# ^
//  Unigraphics Startup- I; Z  K+ u5 Q7 L; m
//      This entry point activates the application at Unigraphics startup
) w. T$ ~8 K. `- ]3 B2 Fextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
- D' [$ c, w; T. R{1 r/ ~. q. r4 i3 L5 H
    /* Initialize the API environment */
6 z0 m; d) k0 S# l7 L  E0 J    int errorCode = UF_initialize();
) x3 p  `7 y1 s2 w5 a7 ?( u# F8 i. e. }- d
    if ( 0 == errorCode )
9 F4 E+ n# l$ z+ f* [& [    {
9 H+ }$ O" Z0 a7 j# Y        /* TODO: Add your application code here */
4 I8 V1 C) l1 i, i" ^7 ^
* q" ^% u0 @1 `' I1 ~5 q8 x+ K5 S! S  t5 c
                //百度云公开链接 通过修改txt文件标题
! e1 H1 u5 U& b3 p# u: \4 `, d                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
+ U, I  E, n) s. L
# A# E9 i9 j, x$ t" J% Z
+ g# Y# x4 M+ W! J6 N                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
. W4 y4 h1 [& ?) o* P                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
' s: a% G& \7 b7 i* V% ?( J               
  ^* h: c1 K+ J2 ~% I4 f        
" [! w. s$ Q4 ?9 b2 k6 C* L4 e) V6 z5 P- b

( z0 h5 Z, i- h6 ?& `% Q
( U, ~0 O' B* I* `3 W        /* Terminate the API environment */& y4 G7 F9 A# Y2 c
        errorCode = UF_terminate();
* [5 C1 r* J$ w& u  ]    }' b0 v1 B1 @- ~* z1 i
* @* Z5 E$ N4 S$ H6 h5 L
    /* Print out any error messages */, N3 ^& \8 U: a/ g3 @! y4 k
return;
9 }. K$ ^8 J3 y( z  _2 O8 M}' @0 o& |' d5 S/ E4 g
6 w" i6 {; h  U6 R6 x
//----------------------------------------------------------------------------
, n0 q5 I4 F8 u$ G. g8 F5 U//  Utilities2 `+ H0 ?  d6 H8 u
//----------------------------------------------------------------------------
8 n  r0 f  N! a5 J% O+ C  Q: Q4 M' y2 I! ~& ]3 ]4 n+ H+ x
// Unload Handler
) A* w) W5 U6 j" H//     This function specifies when to unload your application from Unigraphics.6 T: I: @& N$ r; K$ t9 T
//     If your application registers a callback (from a MenuScript item or a
) y/ ?6 R& [( z! }* J! i8 Z8 n//     User Defined Object for example), this function MUST return
' k- A3 N1 w! K: S  t$ t8 o//     "UF_UNLOAD_UG_TERMINATE".& y) n; q. B/ T9 M$ `0 j
extern "C" int ufusr_ask_unload( void )
" R7 e4 ^' l# R$ g9 T6 E{
! k, t8 @8 G* \  n$ `) l. z    return( UF_UNLOAD_UG_TERMINATE );0 k7 J; J$ }9 ^' i2 `7 a. L. y
}
; N, M8 G$ d7 B( O
: a0 r* o! Z' r' y' A- w0 l+ \
启动UG就启动dll的方法
9 O3 c1 R% c0 ~9 g2 V, ]" r4 Y4 P2 X; ]7 p0 b/ A- q* [9 D
方法1.添加环境变量
5 B3 G8 l- S2 t# w7 dUSER_STARTUP=D:\MEILEI.DLL
5 b& G  E$ I+ V# a  G但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了1 ~/ A- H2 c1 u8 N* ?, C
* j+ K0 S$ d' q4 B4 O, b3 j+ v
方法2.在代码里添加(可以执行n个dll)6 W9 S0 s1 A6 L. ~
UG会自动加载 startup目录里入口点是ufsta的dll! M' b" s( R% O% f  H

8 \( _9 i- Q8 n所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令" E1 O; U  b% H1 e, o* ~
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了/ C2 ~; y4 X( f) _  p( J

9 u3 ~8 q1 }: Z  c+ a  w菜单参考  NXOpen_meilei.men.txt
$ o6 W' d* }$ f! A7 k
0 U  E* d: D8 f2 s' r, KDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
1 E; Z8 F) ^) G% Z启动UG就启动dll的方法源代码下载
) G" A& c2 ~1 V* R' T( j* V 启动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二次开发专题模块培训报名开始啦

    我知道了