PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 1 S$ a2 W$ a# P, m) }. {- o3 C
8 O; ^' o. U  {& W0 u# o1 M) {
如果你想每次运行UG 判断 ug外挂是否更新
; N6 J% f7 S3 x  _+ |7 B. ?+ T3 Q- ~! e  @
$ Z8 c  e2 ^6 c/ r( ^
原理:& t& T% Z2 K( U2 t$ ~5 Q
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
5 F2 k1 [, O! D& [然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
# i1 [, g% R% P9 o$ F/ S; b9 O4 E/ m( F0 r# s+ m% t
8 n( k0 j) C  A' X8 w
被启动的dll程序源代码,如下
* X0 i6 d8 K4 s  J' I+ t
; X6 {! e8 M: a0 J- o' W: n* N( k, W//  Include files9 f# g+ M8 ^1 D5 \% D4 B* m) Y
#include <uf.h>* L9 X5 a0 |$ U: ^; `" W8 U# K( m
#include <uf_exit.h>
/ ^$ h* x6 F- Q6 }- m#include <uf_ui.h>$ r& {) ~$ X! b  w
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
# |$ s0 R; K2 E% ?4 U#        include <strstream># q7 ^" A) f, `# V! h2 T
#   include <iostream>
5 _" Q- o8 Y! y3 L' m$ d( t        using std:strstream;
0 M% }1 D( h- R* O' `( |( ?( B" k        using std::endl;        : w, v9 T6 w& o. V8 i7 y
        using std::ends;  m/ Y$ \9 G: T. ]9 r
        using std::cerr;! q" x, u. X4 N: c7 R# f
#else; G+ {: x* H. R- S; @5 e8 [2 v% Z
#        include <strstream.h>
% j- @7 t9 K. V#   include <iostream.h>
9 ]* l" f5 v4 Y. R#endif
1 O/ _# y; {& N  L#include <string.h>
% G2 E' |  I+ _1 o8 k' a/ H* T* O0 e/ w#include <afx.h>
2 p' ~( Z) ~. I! D; S7 c#include <windows.h>  _; i3 d3 I- @( V+ C7 H
#define MAXBLOCKSIZE 1024
2 W# C7 f- X8 \, f* |7 o- K#include <wininet.h> //网络% ~- D$ A) m5 p) O1 |. u
#pragma comment(lib, "wininet.lib")//网络
  ~1 j/ S" e: P+ p; V) g9 a' Z. D0 A% _, `+ f
char 外挂版本[132]="V2.8F";
1 F+ f) d0 J9 R% J! K
7 B' J8 C, o# J) [! B5 J
1 ~8 c5 O. @* T: d3 P: t' ^wchar_t* CharToWchar(const char* c)   //char*转wchar_t
  C) Q  |/ h% K{  
) f2 D2 F  i% E   wchar_t *m_wchar;' D' G2 @& c; [' N  x$ {# S0 s
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  ( }+ N9 Q: b& }5 S& f
    m_wchar=new wchar_t[len+1];  
% q  Z1 L1 k- E9 j9 X    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
( k/ m) W2 \% B6 X9 _1 P    m_wchar[len]='\0';  
7 V5 J4 O7 n6 P6 j, K9 a4 D    return m_wchar;  
" O' B$ u5 y# _/ T9 c3 j9 `  T& n) M}  " C: o0 l0 e$ d- t% m8 _
; o" r9 |) Q5 F$ _- N
//TCHAR 转 char" {4 d9 J) f8 e' t9 S* K
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
% R* J* [* x8 y+ P- m{  ) F( x2 i+ S: [; M
    LPSTR pszOut = NULL;  
9 G/ x( ?0 r( V& d! e    if (lpwszStrIn != NULL)  
; C7 s4 t2 K4 Z2 K' P4 [) v/ R) K# r    {  
8 r6 d5 L( P2 a4 q3 J        int nInputStrLen = wcslen (lpwszStrIn);  
/ I! ^3 s3 a/ @9 g3 l5 s
5 L  g" O$ [' H$ Y. W7 K9 H        // Double NULL Termination  
3 o+ V/ j6 @2 P        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
- w* X* j9 c( n  Q5 c% Y        pszOut = new char [nOutputStrLen];  4 c- r# t8 T/ d" i8 ~; j

0 z% W7 f) L& |        if (pszOut)  
  ]6 K% h% Z/ j/ z: X        {  
, v2 H, ], {; `9 S- P6 J# L            memset (pszOut, 0x00, nOutputStrLen);  $ F' m5 F1 \& O, \) M: O3 c
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  ; ]$ j# {7 C) o- i; L; [( z
        }  
9 |# O- t- E8 T7 O! p. v    }  7 b1 x+ _  u0 h) e* Q2 y( G: c' n
    return pszOut;  % ~! M& C( i# q4 e8 Z/ P# ~
}  ' p. \: |) B% q+ T/ I1 S# e/ m

1 l( H+ v3 d6 l% B& V! H6 [# p) f. R& m' D' M
//CString转char) y- ]3 y6 S9 j) O% e3 t$ ^  d
void CString2Char(CString str, char ch[])
( }1 c0 B8 Y* X/ B3 @{7 v3 R: v4 r' |
        int i;
' F/ c/ x: P- T7 S2 J' j        char *tmpch;) T( c# f4 g8 t# E  h4 O
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
2 A3 Q5 e  ]! @! y        tmpch = new char[wLen + 1];                                             //分配变量的地址大小2 }! J( F& Y' L5 H& n  Q2 f1 }2 @# ^
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*  z  Q( M4 o6 `+ V- c

4 s" @& f. A! y/ j        for(i = 0; tmpch != '\0'; i++) ch = tmpch;, e5 f! n4 T% |5 E
        ch = '\0';1 `: X8 l, U# M  K: ~
}
) F9 V& A. t' C! n3 d6 Y1 b% e7 x$ |' a/ t$ |! i% w8 }' H1 z

2 A5 v/ v, Y* z* H1 |5 @, \8 Ichar *去掉char首尾空格(const char *str)4 U& U5 }2 U5 e/ F8 x( c+ f, m
{3 t2 F6 h# i2 H- S8 q; P/ t
        static char line[133];1 {3 k+ b# B& j) W% L  _8 f
        const char *pbegin;5 [+ R$ V6 V8 j. s/ v, n( ~& y5 p/ l
        char *p,*pend;
# @( N8 R6 P2 l" j9 ]  j$ ?  l        int i;
/ n% l6 K0 A  s! ?8 n% L
  N$ m1 D2 {% [, z( t$ t$ x- l, `        pbegin=str;
) |0 C# @) r7 z; R+ P/ w! U        while (*pbegin==' ')8 C2 Y; X- ?3 |& f0 w; c
                pbegin++;
: j/ \6 G, u0 o( i* I7 B( i2 m- a# n$ ]" O5 d
        p=line;
" f7 Y2 r% z: J$ e        while (*p=*pbegin){* A/ q2 _' k, F$ F/ ?
                if ((*p==' ')&&(*(p-1)!=' '))
7 A4 a2 }9 F7 K; P5 G0 m3 g                        pend=p;5 g7 [; S5 `" |3 q1 O' I+ _4 z1 P) k
                p++;pbegin++;        ) r' B2 j# y) P& A
        }7 x& q2 ]' `/ W0 a  \5 i/ h
        if (*(p-1)!=' ') pend=p;
9 ?2 Q- W# X2 k. \9 r% a        *pend=0;
2 _& o* c9 a) G. t3 y9 Y        return line;
, T# ]# N: W0 L. `: L} $ @/ \" I2 E; A

7 A: B6 j4 z2 B. D8 b7 a
1 g2 Q* ^0 i' V//获得网页信息 - 网页信息是中文会乱码 用英文信息
9 x! m- ~9 e' A$ I7 r0 }1 {void 获得网页内容判断外挂更新(const char *Url,char *html);
4 p# H. g5 C. |  N8 ovoid 获得网页内容判断外挂更新(const char *Url,char *html)& O$ o8 c- P6 D4 Q
{
% C1 D+ {7 K4 _! _9 D        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
0 d% i( m/ d/ d% B. d* M        if (hSession != NULL)7 g2 Y, Z3 u' T
        {8 R* ]  K1 L3 l) _4 m8 d( a
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
# ?' r& l: @/ L# P! u7 ]                if (hURL != NULL)
4 |) p2 }/ A/ D  K( |$ F# i: d; m                {0 Z' p, Z' a+ g, N5 _) Q2 a

/ ~3 a+ A! W& N, v4 U! _                        char Temp[MAXBLOCKSIZE] = {0};+ B9 Z8 j+ B) M0 E0 Y+ ]
                        ULONG Number = 1;8 O2 V3 o# Y9 W; M) I
                                while (Number > 0)7 H  b9 n* C0 y4 c# O0 Y$ x
                                {
$ Y* J* n9 s/ A% F9 J" R* j2 g                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
5 u$ Y. t- ^; i( c: v% b                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
# a- E% m. j+ y! M                                        int a=strlen(Temp);
  u5 B8 Z% W* ~9 d# O$ A' t                                        int b=strlen(判断版本);   
8 G$ ~  `7 j) w4 u- l) E$ W                                        if (a>b) + E3 I& v, I: _6 p4 B
                                        {* C* g* i# {0 ]' ?' x  p! J
                                                char *p=strstr(Temp,判断版本);7 f6 b. y0 I* o: c
                                                if(NULL != p)( h  N1 |) w- k9 X7 ?, ]
                                                {         
% i/ i% _  m& |/ q                                                  int wz=a-strlen(p)+1+b;//版本号起始位置7 R0 {3 t; V8 {% k; Q; V
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
1 [' u4 L0 R+ \: l$ W6 G                                          char s1[132]="";
$ Z1 f* z, `3 t                                              strncpy(s1,Temp+wz,wz2);
9 t$ M( w" B4 g% e8 g                                                  char *p2=strstr(s1,"MEILEI");5 Z7 r- T5 K9 Q" h
                                                  if(NULL != p2)' h  h* C# I" \9 ]: |+ `
                                                  {  
0 z# y# x: p+ w% ]" x                                                          wz2= strlen(s1)-strlen(p2);3 p' t" i7 ]& c
                                              char 最新版本[132]="";
+ h0 w; X5 T5 }0 z( g                                                  strncpy(最新版本,Temp+wz,wz2);4 ~: m. p3 v+ R) O* S
                                                      if (strcmp( 外挂版本,最新版本)==0)
9 P6 I+ |$ {; t8 ^* M                                                      {
  i8 _9 a; N- \# S7 }                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );( U: q! ?' ^) Q1 L3 A
                                                      }
) ?$ G' a2 s+ \( v$ R9 N- D9 E: M/ v/ `0 T                                                      else
0 q+ K* D/ V# J3 P4 o                                                      {$ A$ o3 D2 W+ [; m+ H; A* w4 r' ^
                                                            char msg[256];6 D! z$ W" e- C+ Z2 {
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
' E+ L! j- @- T! U( B                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
5 V8 ?" e( j5 K4 D: P                                                      }
2 {! O8 W7 p, C! i9 s* H                                                   }' r$ M2 M+ v+ p% p6 W, O
                                                  goto LH;
1 @4 s0 W3 k! q) p                                                }5 x! \0 \, o7 m& S& _
                                        }" h9 }5 A5 V4 D- Z( \$ u
# o% j- ^2 k3 s* u6 S5 N
                                }
3 t0 B5 n% n4 m: @: f                                LH:;/ ^$ v3 v( n; H) |# |. a3 \- N
                        InternetCloseHandle(hURL);# y  `, Q1 x& g- B2 G
                        hURL = NULL;9 v  a, F6 U# G9 L
                }
) m& s4 f, \! R' k; I6 t) j. ^4 D6 Y
                InternetCloseHandle(hSession);" a/ U9 i8 z, _9 \; P' y
                hSession = NULL;2 O* [+ Y$ ]% k  r; T, j
        }
) [/ o& `3 `$ c& }}& C9 P/ `  h* T8 {

2 l& A  @( w# E9 |
8 ^7 p9 Q; c) H+ N! Z//----------------------------------------------------------------------------3 p3 [9 n+ I2 H( C) E
//  Activation Methods
3 s3 o# D( I- u! L//----------------------------------------------------------------------------7 c* w9 @- _+ B; ]9 z& h6 N
8 }8 b+ |+ ^8 |8 o' }
//  Unigraphics Startup
3 A7 z/ S# K& \4 U& J//      This entry point activates the application at Unigraphics startup; m5 B) x) |- C1 y
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
! f8 Q: ~4 X: {$ T' Q{# W1 a( m3 s, R- P# }
    /* Initialize the API environment */& e/ V+ f2 T+ e& _
    int errorCode = UF_initialize();
/ J* J. a) N* b0 g, f8 u
9 W) o8 l. i! b1 z! T+ M4 @1 r    if ( 0 == errorCode )6 a7 j2 G, K- d# j0 s! b( r) t
    {; Z5 f0 v- i. q' V
        /* TODO: Add your application code here */5 B/ s( g1 B. e( \
% S8 o5 Y- S. [/ P9 D# i
( C9 f' P4 w& K  ^0 a
                //百度云公开链接 通过修改txt文件标题
2 H/ J( X; e" R                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
0 |9 \2 l! d- H% R- ~. u4 Y; K
0 x# d7 B% d3 p) m
3 W7 [" V0 i+ z# v3 x8 {                char 网页文件[256]="C:\\Windows\\版本.html.bat";  2 e  V/ R. x* [2 {! S* |4 @
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 3 R, U8 c& Z4 `$ S1 b3 s
               
& I5 X( V3 @# H7 L! C  R3 V& `        , c3 Z' @- |- [& h9 Y; ~
, V1 D$ z4 {% A# ]+ D
( p: w! ]6 t, O/ z
, i6 q" j  p* v  ?1 y4 N; A( j
        /* Terminate the API environment */9 K; I- e: N8 R& u0 E" W
        errorCode = UF_terminate();# u. v2 h# j1 U2 |: r# q" x4 A
    }8 Q) T* R# R$ a; h* ?% W. `
9 x: |* h1 b& s: V7 m0 q
    /* Print out any error messages */- t$ M# I# g1 p. X: Q4 Y# `4 }
return;
8 J" B6 W6 K% G& k. l}
- O5 o6 @6 u/ K& _! ]
. h6 @# _% {  ~: X. p) ]//----------------------------------------------------------------------------3 P2 E; Q% h: I- X0 ], V. D! i
//  Utilities; ^9 X2 |& ]8 }- u; |
//----------------------------------------------------------------------------  ]6 I6 X7 s3 K1 R

! P5 w) H8 L) O# e  B// Unload Handler9 f- b' N; ^) B2 L6 Q, n
//     This function specifies when to unload your application from Unigraphics.
) e% p- R$ T% x2 G) O! I" @//     If your application registers a callback (from a MenuScript item or a. k$ `) {3 J6 h4 u$ \; r& j
//     User Defined Object for example), this function MUST return
5 b6 h  D+ {) i) A//     "UF_UNLOAD_UG_TERMINATE".7 u; r* y1 j( J5 d' h4 j
extern "C" int ufusr_ask_unload( void )/ X2 {4 R! p- w" z/ J" u  _0 p$ U9 `
{
( N" C4 Z/ z. \7 ~) |9 ~- H    return( UF_UNLOAD_UG_TERMINATE );
# t+ N$ e0 A. y# Y}( X  X3 B( [' x

0 R$ M% o2 x$ v, r
6 p, }' v0 v( h7 @: N3 n  a" R9 s启动UG就启动dll的方法
6 a; E" ^) D) W! t4 w2 k' S! W, B2 |' v
方法1.添加环境变量4 B4 _5 T' I5 w/ |
USER_STARTUP=D:\MEILEI.DLL) y" u! Q; G( Q) y1 Y8 W. h0 w$ f. O, `
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了4 w2 Q2 y2 P5 c

: D2 J7 ?- d' k( C1 L: }方法2.在代码里添加(可以执行n个dll)( t7 e' c5 f( X1 s$ U
UG会自动加载 startup目录里入口点是ufsta的dll
7 u* I3 F& o: S4 ]/ B9 S. D6 T* ~+ N, S. o
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令$ E5 S0 [& `' Y0 l
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
0 G+ U2 t# Q$ B: o5 u% J% P! ^/ Z! ^* a" R
菜单参考  NXOpen_meilei.men.txt
3 o4 Y8 w  o) O4 W- o3 }
, L# r% T' [8 G- |  ~& W' rDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
; i5 L3 s0 ?+ R* x9 O' O/ }) G: C启动UG就启动dll的方法源代码下载, `4 p8 ?& N! h$ r; ?9 }/ A5 s
启动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二次开发专题模块培训报名开始啦

    我知道了