PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 " T/ u" S* o" K: J1 }  E& ]* K: g
# }$ V& N0 Q* @3 X) ]
如果你想每次运行UG 判断 ug外挂是否更新1 f1 P. j" b" y. Q' n3 `6 x
3 f* K" l' j4 n6 {
4 w# M: m2 U6 t
原理:: u9 ~& W1 g. }- t$ {" A" z9 [: |$ U
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
4 T  W) K1 v+ O/ h然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
! @9 [; g, s3 u) T5 L2 L- }" p6 ]0 g2 a
- `7 X7 N' v% g* {5 L+ D* o  y
被启动的dll程序源代码,如下
" }* `! m1 V) R$ d' v5 W  B+ V8 l3 m! E+ G$ b* w
//  Include files5 c* |( I: ~  B6 G4 w' x1 t; @
#include <uf.h>
/ }. r( v  C6 K$ e#include <uf_exit.h>
# W( ]8 o3 y: g, o& }# U& p#include <uf_ui.h>! `( }8 G/ p3 D2 [
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )1 y* z1 X( R6 X6 _6 T' l5 e! A' ^
#        include <strstream>
6 \$ E4 k" \1 g8 g; Q#   include <iostream>1 l  D, m# a! X8 y+ \( ?
        using std:strstream;1 i3 b  S" A* B+ e: z% ?+ Q9 d
        using std::endl;        
% c2 v! [: `3 S* d: W- ~: `        using std::ends;; x* d: b5 S' u  F4 ~$ f. _+ y
        using std::cerr;' e4 x2 u. _: r7 s& A+ y) v. {+ S: i
#else
9 V% U' n  C& [% z* Z" R$ I! n$ g/ `#        include <strstream.h>, n0 Q. L& J2 p
#   include <iostream.h>
( v( @- j( Q1 k+ R" _8 y4 Z#endif
2 h; q, n  I8 R  ^#include <string.h>
$ g; ~) g* u* V5 x- J+ m#include <afx.h>+ h# d$ d$ d+ V: W6 v
#include <windows.h># ~* n8 N+ j2 V% b8 f- [# y
#define MAXBLOCKSIZE 10249 J! n1 }  ~, Q3 m) A% @1 t
#include <wininet.h> //网络# a$ ~5 X' A# {! f/ K
#pragma comment(lib, "wininet.lib")//网络$ s+ g& l4 x& s8 R) B
$ l: f& q* j$ x8 w! _* k$ S
char 外挂版本[132]="V2.8F";: h+ K; S4 r: ~  c0 K" d7 }
- T4 C0 Q/ f7 j# e5 o
8 V* V& m, k& A3 s
wchar_t* CharToWchar(const char* c)   //char*转wchar_t
; ?+ @& ]* o* P, ~' K: l9 ^{  
8 s2 h0 V# e. M! u% g$ L# O   wchar_t *m_wchar;
1 H. ~8 y# ]3 ?* n& }  j+ M7 ^    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
6 K" V6 W" t5 Q0 l' ?/ b/ G+ ^1 @/ q    m_wchar=new wchar_t[len+1];  
* x- v  M. }8 E, A5 y+ p% ?    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  " s3 p3 d3 j0 E( o1 \) q
    m_wchar[len]='\0';  & `) U6 o1 X2 k% k0 v9 T# K
    return m_wchar;  
! u% f7 K3 ~$ e7 t, W6 p) ]0 A}  
* t# M1 t7 d0 d* Y2 E: J% I9 V: D' r+ N
//TCHAR 转 char6 _8 R, s/ V- i9 t
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  $ R/ N8 E! `2 z0 q0 U/ n; |
{  
6 _- o5 G1 I) Q" d    LPSTR pszOut = NULL;  
  h% I( l' z/ p9 M2 J! k    if (lpwszStrIn != NULL)  % w8 T3 Q& {* g5 K. ~: [# F$ s
    {  % F) O; O# H  [: T$ W+ E% m2 ^9 R
        int nInputStrLen = wcslen (lpwszStrIn);  $ Y7 W3 I! ?4 d, D
" z+ j. N; c, ~' Y! q% E
        // Double NULL Termination  
* m8 G2 N" M. x# h- E+ x        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
' k" U# W8 g) s. M4 C7 L        pszOut = new char [nOutputStrLen];  
' _: M8 C( Z3 _7 b$ W; l* X' \8 ?' }0 {0 z6 m0 ^( O
        if (pszOut)  ' `/ \$ g/ [& l: b  I* E
        {  8 g  z# d5 n# B- C
            memset (pszOut, 0x00, nOutputStrLen);  
9 X9 g8 U/ p& L/ \$ L9 [1 u; ~            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  + O  Z! {( }2 ~8 M" m4 ]- r
        }  
0 P) F% w$ N* K0 C, V5 ?+ B$ C    }  
' F! l2 b9 [; `: O: v$ D) y) G    return pszOut;  2 M3 z( U5 x; ^" w* n
}  % c" h# a3 p9 |: k: Q! f
5 ^+ X- r1 i8 N2 w! ?
" z7 [6 Z8 V9 i- C+ I' L" Q
//CString转char
8 ?4 P8 Q& K1 w: e& M1 p6 nvoid CString2Char(CString str, char ch[])9 G% [6 O; S( u
{* J" m6 ?5 @* @/ d4 `- d  b
        int i;
/ F, @$ j) n; Z3 I( F        char *tmpch;7 C* k& t$ b) ^4 w; v
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度  ?9 ^2 H8 ~; M/ Z" ]- }
        tmpch = new char[wLen + 1];                                             //分配变量的地址大小+ _% G9 R+ L2 K$ G& ~% ^1 [
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
" k2 R( a( A3 b* B/ F* e9 X* x( D( l2 P: M
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
9 R/ e1 _# o$ i& ~9 ]        ch = '\0';1 _( |* |' W. w; k& `* O, T
}* y# ~2 _$ M1 S* M
( B  q2 V, h4 h4 i

( J# u# T$ J0 b% O4 c2 _5 l; _) Hchar *去掉char首尾空格(const char *str), X; ~: ^" `: i& h7 a
{
" b4 A' m; k0 k" }7 V+ \# D4 ]        static char line[133];
4 |$ B& m( a0 c0 T' O& f: ?. B, `        const char *pbegin;
3 a% Z  a* e6 N% H        char *p,*pend;5 M& A% x7 l/ J8 R4 d
        int i;
* D4 K6 A# V6 A. g/ x# m( H& h0 Z9 r4 V5 r% T7 @' d3 y, s  s3 q/ i) w
        pbegin=str;
5 T/ {$ k4 ~7 X: n8 P* U% u        while (*pbegin==' ')" S- x) O# p0 u4 J
                pbegin++;$ p- y4 K  F1 s3 ?

; l/ n+ H  U/ k' u- A4 t) K        p=line;; G! M! k& Q  b* V: M
        while (*p=*pbegin){0 [1 i. I! {, c' j
                if ((*p==' ')&&(*(p-1)!=' '))4 T1 j. z! m4 B+ q. |( [; f( e
                        pend=p;
- j- y: G9 H* ~  y: {, l5 A                p++;pbegin++;        " H2 a) t4 p8 D* _& a  I0 x& v% i
        }
8 a9 |. l& G3 p' X7 J. I0 O" v        if (*(p-1)!=' ') pend=p;
1 [" X4 J! f- ~) ^* ^        *pend=0;
* l( X- d( `4 T: B        return line;2 l8 c$ c; n4 \/ [
}
% @' l: `4 I" h; L$ k6 y5 |# _6 Z4 C
, G8 p; P- i) D2 `$ K: k4 o' b
//获得网页信息 - 网页信息是中文会乱码 用英文信息( g* j8 f" L! Y' p
void 获得网页内容判断外挂更新(const char *Url,char *html);
# l' K  ?7 g' r0 ~, C& Rvoid 获得网页内容判断外挂更新(const char *Url,char *html)
2 R9 X  ]7 T( a# K9 u{+ j! }6 t, c3 {* Z/ I/ q9 q1 J( e
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
, O+ B5 G4 ^9 T' S        if (hSession != NULL)- y3 J% C' o' Q7 J& \+ S
        {3 h" D3 t2 S8 j4 ]: B" D9 i% `. l- l
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);$ r' u+ q6 F2 h
                if (hURL != NULL)
' B; x# w& Y* F, u7 z$ T( I5 R                {8 j9 q, n% q6 U8 ^
: Y# o! p# V" K6 ~, \
                        char Temp[MAXBLOCKSIZE] = {0};
3 S2 ~. k6 r+ P/ c0 d                        ULONG Number = 1;
* ]( T2 O8 Z) `6 j$ A$ ?9 ]# N' R                                while (Number > 0)
7 t" C+ ]  _( i# W1 S                                {' O7 H* N$ i) f0 c* k
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
% @" [: ^$ O4 J                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";+ I# ^: d3 n" ~# z/ P
                                        int a=strlen(Temp);
- @$ |. p1 O1 S1 |# j1 Y                                        int b=strlen(判断版本);   $ S9 \2 ^$ q4 y0 G7 h. u& j; N
                                        if (a>b)
& ]: C; a+ l* v                                        {
( Y2 G) l& p+ D                                                char *p=strstr(Temp,判断版本);
9 c' U  c2 ~, {- w2 [                                                if(NULL != p)+ a# N+ G, Z' @8 }
                                                {         
4 D' [. [9 i3 E! ~                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
2 r6 j, X5 Y' L: r! w4 A                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
; Y, q/ w% S3 ^3 z* h                                          char s1[132]="";% b3 y2 U; [- ]! i
                                              strncpy(s1,Temp+wz,wz2);& R! H2 L9 }' v4 q! }. M5 M
                                                  char *p2=strstr(s1,"MEILEI");$ l' o. u9 [* \9 x8 Z  b) N6 C# m/ j
                                                  if(NULL != p2)
! D) t9 Y1 X: R                                                  {  + |; D3 V" S' I. W4 D5 S
                                                          wz2= strlen(s1)-strlen(p2);. s) h& Y) r" Y
                                              char 最新版本[132]="";2 y, u: f1 w+ y  m( e" V& O
                                                  strncpy(最新版本,Temp+wz,wz2);
& ~8 b5 m+ q% X' `                                                      if (strcmp( 外挂版本,最新版本)==0)
- E6 V4 I& r0 m( p6 C4 e                                                      {
* P5 o: r6 D' V: D9 z                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
" x: z- [; `8 o$ N                                                      }
, F4 x! F& Z# v& q7 B4 X                                                      else5 `  c0 l& T: J+ t
                                                      {  y9 d% A& m3 l6 ^, `# w$ K# b
                                                            char msg[256];$ r( a' m6 \- J8 h1 _3 v8 s
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);( A! j: ~/ W. K6 Z9 J  G8 O
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
# ~9 G" ?( s- q8 r                                                      }  s% Z8 G/ L7 N% A, w/ q. }
                                                   }3 k/ ?: R3 G- t
                                                  goto LH;
# m8 n1 ]4 v& O( W" v# X                                                }6 m. ?+ V$ E$ G
                                        }
& T. X+ I- y0 z! o- Y6 E: X9 P+ h* x% o
                                }
! n9 C, z0 L! z" M! X) |3 j                                LH:;" w& G' m4 l7 s$ U' f' d& W- ^1 u" _( ^
                        InternetCloseHandle(hURL);4 w) f$ n" E2 Z. K& M
                        hURL = NULL;2 [! ?: R  P- f+ v. f3 ~* k' v
                }
' l3 J. O$ \6 [5 @2 D
1 u4 v4 R/ g- Y  D! T0 Q! A* [                InternetCloseHandle(hSession);
  {/ g8 c/ K6 V8 b, ], h3 \5 X                hSession = NULL;
. e' W8 N0 [5 @        }$ X3 v; Y& I6 C0 I# F( D
}  E; D. n/ B  J( p# Y3 Z2 @

* N# I8 V3 s* H' ^3 M- c$ E4 y, K8 H
//----------------------------------------------------------------------------
7 N6 U  k( ~, A) F//  Activation Methods% A3 c% M0 @3 I) ~- R/ w' x
//----------------------------------------------------------------------------
' Q7 d% W3 }9 W. M) j+ w* H, V; Q; Y& t% U5 p7 d
//  Unigraphics Startup
+ q. j$ r" C& B& t  L* h//      This entry point activates the application at Unigraphics startup
$ g1 a# ]5 o. B9 X% uextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
& C/ J* U6 @2 i8 O& E* t0 Z8 g$ P{
3 l* J9 h# W8 N/ `. l) P9 e) n    /* Initialize the API environment */
+ \* g2 I  \( V' c+ H) b) T; w    int errorCode = UF_initialize();
; S1 h* h! M* d. Y+ q) t
* D4 G" X6 O4 c; @' v    if ( 0 == errorCode )6 m5 f5 R) ^( \* I' }
    {5 L' y' t1 j. g$ R+ D: K: w2 R' g4 E
        /* TODO: Add your application code here */
  T) W$ {5 ?% M  o- |% e; L
% A  z( N8 D; Q; Q" L/ S% g2 T! s) C5 f
                //百度云公开链接 通过修改txt文件标题  H; a0 x1 e( L5 u+ A$ B; n# W
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt$ W% l: }% r5 \: f) o4 s9 Q

1 b! n/ k) |+ f% N- u
( R' u* D; ?$ Y  r' ?7 U9 w                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
# i- ^# m% Y0 i' z+ O- Q- B: e                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
) w, Z( f+ }' T* |9 q               
5 J9 Y2 X  f. r! P# o        8 W  W4 D) J! X, @8 t! _. I9 {
- n4 a" O9 v6 P& ^/ Z1 _
  @7 O8 L9 P& n4 C, H1 V$ m
, F9 B1 u' A/ L
        /* Terminate the API environment */
2 X- Q* w' ?) b  j. q1 }) \        errorCode = UF_terminate();
1 ?) x8 P. |, i    }0 u. W% q- @/ @* p9 X  f
, }- z; `. j. E: }
    /* Print out any error messages */
! i7 b  g( [4 p' _3 zreturn;6 S% r! p& }, j' Z
}) T% @! N3 v7 S& T5 x- ^1 W
( E5 Z  r, H. j
//----------------------------------------------------------------------------- X# [/ n0 u! T" |1 D2 l
//  Utilities
/ e$ c+ ]; N7 C//----------------------------------------------------------------------------
- V$ N( f( A. x4 u, n. c5 p. F. U; A5 Y: S5 F7 G7 T
// Unload Handler
2 ?- g3 Z! c' b1 h1 x//     This function specifies when to unload your application from Unigraphics.: e6 M: f9 k/ T' ~; Q
//     If your application registers a callback (from a MenuScript item or a
. q3 A6 L9 V# ~8 X3 F$ }2 T# K//     User Defined Object for example), this function MUST return
3 K( D7 J) l; y* N& I; i, c: V3 _  M3 O//     "UF_UNLOAD_UG_TERMINATE".
: D+ W( l9 J% Vextern "C" int ufusr_ask_unload( void )
8 s6 V+ L6 M( L# i{- I$ T" C* i2 B0 b9 o
    return( UF_UNLOAD_UG_TERMINATE );
; s8 {: t5 p* ?( D; K3 g$ l4 c}! G3 V0 S6 Z" q7 i% v
8 X& q- r# n  ~! I9 G

* t: A: F! v, e: F启动UG就启动dll的方法* g! Y) G' p1 _2 }0 Y! V! C: O' C
+ J9 Y4 C5 i5 L  q9 \1 O% [
方法1.添加环境变量8 s+ |7 L# d4 j" G# m
USER_STARTUP=D:\MEILEI.DLL: {0 D; _2 _# J* K. ?+ _; p  T  N
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了6 t% |9 m% c& o7 W

5 v( r" y) @: n2 O; ^3 T, n7 Z方法2.在代码里添加(可以执行n个dll)
6 m* Y7 l- B; V, \' n7 L: G+ JUG会自动加载 startup目录里入口点是ufsta的dll
  X6 r1 [7 s! R# T3 ~
9 Z% Q1 b! K7 V8 R$ m, f所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令, L5 @9 R: H' ~  p! G* w4 s0 V1 w
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
% M! _" ^, j9 }6 c' `& m
9 x! S, ~7 z" @6 J9 D菜单参考  NXOpen_meilei.men.txt( D5 L: i0 p- p% Z
7 |) r1 U% y/ ?8 P5 Q) Y% n7 g# ^
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录: e  ]2 p& n+ C. _" o" z8 ?+ l* i
启动UG就启动dll的方法源代码下载
8 b$ p7 C, W7 B; D# U! g 启动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二次开发专题模块培训报名开始啦

    我知道了