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

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

  [复制链接]

2016-12-23 19:47:22 4650 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, H( u/ x8 _5 p+ Y2 p4 V

  D! c# Y& |: X% b3 G4 x3 j$ G如果你想每次运行UG 判断 ug外挂是否更新2 ~. {9 x: ~- y0 d
& q# |) Q/ C  {, ?
) M2 u: o# b: Q5 N- h$ k! r
原理:
( p; P# |9 g' f2 S自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了. M6 c+ s& o- `/ V
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
" l, A, X7 @& b# N; _; z& f' Z, A  l, z# Q1 [

$ Z- y$ `: ^) O6 ?6 Q& Z被启动的dll程序源代码,如下
' {1 f2 x5 g8 g+ X+ d
/ x+ _* s' \, c3 e: \0 M//  Include files
) t$ U% V( S2 s  L#include <uf.h>
1 W  _4 \3 N& X* [( {* i9 Z$ _#include <uf_exit.h>
/ J, G+ @6 \8 `#include <uf_ui.h>6 k# a1 {$ q! {& H# u$ L, l
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
; L4 V, @8 k$ X# L/ f#        include <strstream>
7 P# b6 z" c- O) [2 n- _#   include <iostream>
" ~8 |3 z2 U# s, k        using std:strstream;
  V+ b5 R6 X2 ?        using std::endl;        5 ^/ p6 u! d1 S- X2 x; ]- n  r* n" F1 \
        using std::ends;
$ X6 k6 D3 l3 h3 o! X6 F- D        using std::cerr;
: T; t1 l+ y6 |5 |) {# A& `% b+ S#else! Z$ \  w' ]8 _2 \
#        include <strstream.h>
- S1 O. }7 B4 @4 v* `#   include <iostream.h>
/ A) S, B+ @- \! C- ~; Q; E$ D#endif
5 t) Y* |/ L# @0 r2 c$ L#include <string.h>
  w: J/ _% K9 u) i7 r# M* }#include <afx.h>
5 \" S0 x! ^2 ]2 p+ v$ |- f( ^#include <windows.h>5 e# `0 S! s+ ~! _, \  l6 T3 D
#define MAXBLOCKSIZE 10249 m, C( a0 \7 j; n. |
#include <wininet.h> //网络
5 A4 _: t; R# ^4 p/ Z: `5 h& N! {#pragma comment(lib, "wininet.lib")//网络. t6 P& k) v+ n3 n

) H. J3 m# `7 M5 }  e' C/ Zchar 外挂版本[132]="V2.8F";% ^& \1 \  J9 K3 b

/ N, K: q3 J3 I6 ]( e8 m+ k! Z& Y0 Z- r) C% G" D' R( j8 ?  L
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
7 l) S$ ~) v; d* q$ n$ F2 F{  
$ b: L5 v" w2 H( ^$ S" s; E- S' E. e   wchar_t *m_wchar;- L$ n. N+ H+ n" q# Z0 [- Y9 G
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  7 ?. ~4 l$ y4 F- Z% Z5 [4 A
    m_wchar=new wchar_t[len+1];  
5 A/ K1 h# c- f! N% i1 A4 c" B1 j    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  " l: O8 R8 f* U2 l0 `9 Q) Q9 {
    m_wchar[len]='\0';  
2 a# _, I: R- M2 P; _    return m_wchar;  
+ H/ j; J, m5 {* L! D4 M, Q2 p}  : ^' r4 @1 s7 t2 T' g+ z

3 b/ W& m! Y7 E: O//TCHAR 转 char) f* f# y* y1 L, G
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
- |  T9 s) B4 z9 _- y1 C0 ^4 W{  ' t" v9 W: n- I5 W. C& {2 K
    LPSTR pszOut = NULL;  / y; c& c! J  K
    if (lpwszStrIn != NULL)  : e  t8 B' S4 ?/ ^. m
    {  , B) z: d; Y2 {- n+ G
        int nInputStrLen = wcslen (lpwszStrIn);  
# ?# P* q5 z8 o" `; G5 N: r' V
$ j  O, B" p# T1 Z        // Double NULL Termination  6 \  q( W1 N0 G! Q
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  7 B  z5 J0 Q- X& [$ q* e6 {) f
        pszOut = new char [nOutputStrLen];  
/ p& M% ?6 e" o" j7 G$ l$ @) e; X. q, v8 z+ V/ P
        if (pszOut)  8 J# c2 _  [3 Y; ^2 Y4 p
        {  
7 l4 \/ \) T( k6 P            memset (pszOut, 0x00, nOutputStrLen);  : N  m  ~" N# E( ?/ q' ^0 V6 ~, q/ E
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  2 r9 h4 d7 E8 ?4 c2 N+ Y
        }  
1 z' [0 m7 f  t  Z- e+ n    }  + x( G5 R& J& C% ~% P3 N# L
    return pszOut;  
- Z% O2 [' M9 x! Y}  
1 A4 Z7 ?! H( f( R  Z  p
( F+ W& H% f+ ~* O$ l) K/ Q1 y: H' x, ?
//CString转char
$ F. @5 |; h0 d& o* C3 ]/ B, rvoid CString2Char(CString str, char ch[])
: S9 D$ M1 F& A' @# Z* u5 m% A{
3 d( Q7 n* l+ O% K* @        int i;6 I8 C+ H5 Y( W0 r' O+ M; F8 N9 B
        char *tmpch;
/ w( u* K& B9 D: H2 w        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
. n* v, {2 D" ?+ U        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
, |  @3 D5 w; A3 `        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
, s  T; y7 a0 w8 x  |! A7 m" I8 p6 w" o2 |
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;* K2 B9 ]/ u9 b* V# b9 o( z# F7 [
        ch = '\0';
# ^8 ]* p' o3 _; T$ g5 F' m}
# N- `- ]  O5 n: W/ {* e; h8 y
1 ]) p. L5 ?* e3 z
) q* W, k0 P3 ^9 T- U, i) a+ Qchar *去掉char首尾空格(const char *str)! E- U* ^! M: w
{3 v1 {0 h; c! y
        static char line[133];: i2 e7 l* E- I4 L' _5 k+ c
        const char *pbegin;
: E  s) {7 [. Q% F. y; G        char *p,*pend;0 J5 W# D! u. v
        int i;" @2 _8 [0 y! x! P3 f( X6 J/ j

6 X: t+ S) m9 f+ W0 Q        pbegin=str;
  ]5 D5 W: c  H( f        while (*pbegin==' ')
. |. J, G0 g! i  k' I                pbegin++;
0 A. u6 @1 U7 |+ t- t+ S2 R; N2 b( d6 m# R& ?6 f% M9 t! x5 ^
        p=line;
9 V) e- m: M+ x* Q. C+ X( S        while (*p=*pbegin){6 ^$ O8 Q% g3 _4 R2 L
                if ((*p==' ')&&(*(p-1)!=' '))
2 I1 X0 `5 t4 M. d3 V                        pend=p;
+ B, G' P4 H$ j                p++;pbegin++;        
) F  e0 g' J7 Y+ B/ f3 l+ s        }
( f& `( F3 d; M4 Y! d9 b        if (*(p-1)!=' ') pend=p;- j: @4 P: J" a9 E" d6 Y3 P
        *pend=0;& f3 Z2 C! X& F; r- j
        return line;
. y. d' Y' U1 n+ t! F} # J, R" P! @8 {. _% _5 M' S$ C
0 K& ]  @  V1 ^( h: u8 T/ j

/ P" _! i: k' W3 e# g4 x//获得网页信息 - 网页信息是中文会乱码 用英文信息% N# o6 L1 E  j/ U) z* {# i
void 获得网页内容判断外挂更新(const char *Url,char *html);3 f3 P% W1 Y, P( p0 P- g
void 获得网页内容判断外挂更新(const char *Url,char *html)
5 o2 i5 _: L5 P- ]+ g- a{. N% x9 p2 j# d: h$ w
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
7 M4 z4 O+ k7 I. Z9 d        if (hSession != NULL)
! k8 W. l7 z1 u* K  U( `        {
( ^' Z& w3 ?* q. Q* l1 S; Y& o                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
' o. D" d7 r4 J                if (hURL != NULL)0 ~0 s1 p. K) o" L
                {" _) j2 p' n1 H" F/ }2 [
: |0 ^* H9 ?( z% O3 X
                        char Temp[MAXBLOCKSIZE] = {0};+ \. U4 m% q1 l: ^+ R" \
                        ULONG Number = 1;, M5 l7 l: A! ~) R
                                while (Number > 0)
/ U  T9 A) @0 ~2 a$ Y2 n( Q+ s+ x                                {0 Z' v1 e' O9 ^2 M5 I/ j
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);' b$ N* j1 d* o3 t& S; O
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
; y5 j- [- E' v, Z' [# o                                        int a=strlen(Temp);
+ c( ^- f! X; l  g: a* M                                        int b=strlen(判断版本);   2 j! J6 P7 T* t4 ^' Q( |; ]! J
                                        if (a>b) 8 X+ ^9 J0 e# m" K& l' j
                                        {3 L6 o8 W! Q# ^7 ?. O+ n' v. T
                                                char *p=strstr(Temp,判断版本);
; @# I- p' u; g, W& f! ~, J0 J% N* @                                                if(NULL != p)
" r0 e( o" {- o/ K4 d                                                {          ( f, a9 P* ]0 C& g
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置4 H  w' K  ^% s
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;* @4 Y; H+ s: K: Q% }( y# v
                                          char s1[132]="";( d0 t9 `) B: V/ z' w
                                              strncpy(s1,Temp+wz,wz2);
' v( n& E& ~8 L7 K" v+ y+ F                                                  char *p2=strstr(s1,"MEILEI");; `8 d5 b+ E9 r( u1 B
                                                  if(NULL != p2)" \% \; X  M9 g# `
                                                  {  " T) E" d" M3 X& [. \+ t
                                                          wz2= strlen(s1)-strlen(p2);7 E- l& K1 l5 c/ }. Y- n  o4 j
                                              char 最新版本[132]="";# f- y9 |4 p+ R/ J5 L
                                                  strncpy(最新版本,Temp+wz,wz2);
2 [# b7 q# f, S  z5 b6 k! W                                                      if (strcmp( 外挂版本,最新版本)==0)
- u8 S! R4 W( Y" B0 ?0 }! J2 i3 E                                                      { ) q& Y' d$ c! V) F  _
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );& n2 \% ?  I0 G  I! o
                                                      }+ `0 `/ C8 A6 e( j; _# Q
                                                      else8 T1 V+ b+ j# m- Q  K0 z% ?
                                                      {
" a, X, {8 r$ u* I' V( [                                                            char msg[256];1 d2 |3 g" `3 F' ?& j
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);$ W$ `- b+ t7 V+ R. N
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );- Y" T2 ?2 Q' n+ |; f# [
                                                      }
( s0 D( D; M6 v1 O! b% C) u7 _                                                   }
  u- w% T: A% [$ m                                                  goto LH;$ D6 G; p- ]0 I5 {1 R' w; m
                                                }( g" t% W" r* N" Z1 Z7 e/ i
                                        }
0 v2 ?! b- N: u2 J6 J& w* s# V- x1 l" f9 e
                                }" ^' K4 ^+ @: N1 n
                                LH:;
+ y7 s2 q- H9 l: u5 A( n                        InternetCloseHandle(hURL);% |$ `  u/ P3 h0 Z
                        hURL = NULL;8 h+ y2 f  _; {/ p5 I, W
                }
# j6 C3 `6 [1 Z' C2 T' Q  Q5 Q. [# v& e
                InternetCloseHandle(hSession);8 S+ _& y+ Z2 @% i9 @/ n" Q
                hSession = NULL;
8 F2 }& f( ?  Y" V" v, ^4 t        }# {+ W# h! ^  f; t. B. }4 A& o, w+ s
}2 U! V8 }$ N+ c3 x; _( x: J* i

2 U+ N( t- C7 H. `0 b' r, L
9 n! A" q2 O& s$ U: E. ?: m6 {//----------------------------------------------------------------------------
" W! {% t8 |$ \' |) G. F$ \//  Activation Methods2 a, z6 w' o. A+ s. Y
//----------------------------------------------------------------------------
; z) ]# F* ]3 z! D" p; B) _4 }& m/ G' C2 B7 B- a4 z; d! O2 B
//  Unigraphics Startup
+ |. [. |5 t' M7 G' N- }//      This entry point activates the application at Unigraphics startup! m2 ]2 {/ T* j$ b! O
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
7 B+ R# ~! b( N" k. U+ @1 u{
( L3 ^; y5 F" h) x2 `5 H    /* Initialize the API environment */
5 n9 W! `. }8 Z! w& Z    int errorCode = UF_initialize();  e8 h0 ^- `/ d  e3 D6 I. G4 M7 r( ?
. I  S6 p2 ], J" Z1 d& U( H- \
    if ( 0 == errorCode ), x1 {8 n8 R6 c8 G+ \
    {
: ^  x0 |+ c8 U- g% n9 n        /* TODO: Add your application code here */
* q) p1 V8 ]1 Z" E' g: X5 a1 F) T: N2 i0 s6 o. X

- K1 |5 R$ o& q4 r7 @                //百度云公开链接 通过修改txt文件标题0 Z. {* _( C5 s4 D8 v0 }8 n$ S
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
. P; P) Z* f( M+ ^
6 g& q0 U( i2 v7 M& S% B
% s/ ]; p0 ]+ Q; g+ ^6 B                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
8 Q; a  L& \- |; l4 O0 E                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
& ^* o. M$ `$ t" O: u% n3 ?$ Q               
  P1 G4 Z4 D' Z. V8 a        2 \' m" L/ t# |2 ~

# U5 p/ y8 F( L2 X* S, k/ b
+ g' |4 D8 f1 c% _- ]* R
) W+ Q& z) t% P1 @% M# m' o7 N        /* Terminate the API environment *// c% ?. G% j2 H" O) d+ n
        errorCode = UF_terminate();
- T( v, A4 p5 J    }+ i4 T$ z( y* u

( H1 g6 f2 G+ h5 G    /* Print out any error messages */
3 L; t" C0 e0 m$ J  r* V, Oreturn;
5 v* _2 z- w( J}
: T# `" b8 l5 Y( \7 }8 ]5 Z0 e# @7 ]6 r' @' y* O( R7 H( k
//----------------------------------------------------------------------------
- F) t, N6 X3 G+ b( c: D//  Utilities
6 |! D; K1 k/ Q- T( B! C//----------------------------------------------------------------------------
2 K- L, P" [2 x+ X' O# a1 Y, y  i) v$ c% d3 _3 }: [
// Unload Handler
+ S  S. _" k- W4 z" X//     This function specifies when to unload your application from Unigraphics.! R- o6 c4 y5 C5 M( o, k) {
//     If your application registers a callback (from a MenuScript item or a
% B+ H8 l# N5 ?7 S( A# K- l//     User Defined Object for example), this function MUST return1 l, D& ]3 _1 r3 d# I0 K6 _
//     "UF_UNLOAD_UG_TERMINATE".6 f! H0 n+ ?* ?" E' \
extern "C" int ufusr_ask_unload( void )8 ?1 d3 b: i7 r" m9 M  ]+ g
{
( s1 T5 K/ n, ^! @    return( UF_UNLOAD_UG_TERMINATE );0 `) K5 W7 u7 A  ]; e. d3 n5 P
}
6 R5 c" p/ l* j: [& X. ~. ^+ o
8 z% L& I: \9 q! [: S1 _* S6 k6 H% {9 v# c# F
启动UG就启动dll的方法& u1 t2 q; b3 t+ [* q

0 G7 c% t/ W. r" i, N9 y8 w$ m方法1.添加环境变量8 Z  J% B$ L% Q, u# h9 h% o" E4 H
USER_STARTUP=D:\MEILEI.DLL- \3 o/ b2 z2 m1 O
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
# j% K& P+ n* ]
9 _& E  j* ^0 j( {! ~方法2.在代码里添加(可以执行n个dll)% |. K. I( [; B
UG会自动加载 startup目录里入口点是ufsta的dll
! e* Y# R% j8 g' N+ C7 f& j% B; d0 E# M8 z' G$ a. V& Y. ?
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令# m" @, N3 R- w7 s4 {
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
! D4 r% W. Z& x2 {* y1 g, D0 `2 p7 V3 B# l
菜单参考  NXOpen_meilei.men.txt
! n$ m: P% r! M6 P5 {
3 l* n% @1 n0 v  ^DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
% K9 {/ }: q/ j6 u8 X: u/ @$ v3 z启动UG就启动dll的方法源代码下载
. G" l6 D4 B, A4 H9 M  a9 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二次开发专题模块培训报名开始啦

    我知道了