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 4527 1

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 " ~4 d8 `: s  j1 s: D

8 \3 f, y3 W0 Z) ]如果你想每次运行UG 判断 ug外挂是否更新; t5 J; W# C1 P' q- b
) ]* U$ M7 E% ], o) ?$ E; D' W' J

0 |9 i6 \9 Q4 d4 C1 f& w8 M* M' W原理:1 U6 p/ G# s, u9 A6 x. \! `, a
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了3 G9 h' U/ `+ Y9 u5 H# B
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
( d% X4 ^) G" \5 f" A+ w
, e( L+ |' C1 P) n7 r1 H& p3 [! x  v( R9 M" m6 K
被启动的dll程序源代码,如下
' y* ~5 j& R$ _
3 k9 G$ q% i# X& s8 T//  Include files# J6 l! |+ ?9 ]) y6 @
#include <uf.h>" D# T" n5 V& v0 O. W' Z
#include <uf_exit.h>
6 }3 Q' g; Z5 [  j1 H2 b#include <uf_ui.h>
+ `" b* N+ d6 [( h; K' M+ v* M#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
2 n) ]1 b% h, N' E1 m#        include <strstream>
6 \. i1 r, D$ d$ O3 M9 l#   include <iostream>7 ]$ T  [7 Y9 d) Q
        using std:strstream;4 f# l. s& w( \! Y) ^1 j! }. Y( b
        using std::endl;        
( w( G7 D8 _8 O, W        using std::ends;+ e5 J! a  ^. r3 f
        using std::cerr;  `7 X6 a( _' Y- `  C1 ]( h
#else
* }5 b/ A  H. S# w0 H#        include <strstream.h>
! i7 ]% T8 ?1 E1 @% X4 _5 F$ ]. c! c; V#   include <iostream.h>  Z, d4 G+ d4 M. ~
#endif6 c/ \7 v! _* n2 c
#include <string.h>7 v0 f; `6 m  y% j, ~: k! h- \$ ?
#include <afx.h>* M! G+ ~8 |" u0 B
#include <windows.h>
3 _! C4 d) z# a  t2 f#define MAXBLOCKSIZE 1024( L. r5 E6 N; E+ w+ A- i1 a
#include <wininet.h> //网络1 y; G6 E& \  Y4 g
#pragma comment(lib, "wininet.lib")//网络
! j! N; C! D7 N8 U  b% s- u) k, @6 ~! N# v; B
char 外挂版本[132]="V2.8F";0 E* Z5 a- N4 c" X

6 r. l& K! z6 Y+ X$ @. B
( W, h( E1 Q$ T3 dwchar_t* CharToWchar(const char* c)   //char*转wchar_t
' Y$ r) t1 A/ E' A: M{  
+ s) `9 F8 r: l( k2 O, K   wchar_t *m_wchar;& s" q) N& w* a( a( s
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  $ @4 g- d0 s6 V1 S' Y6 [
    m_wchar=new wchar_t[len+1];  + _* ~2 C; i* Q4 X
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
1 n) L4 ]- d! v; u# N4 F    m_wchar[len]='\0';  
+ H' L4 {7 s/ h9 N+ p8 l    return m_wchar;  ! k* s) R3 h: F7 s/ n% b
}  ; H  |) D/ k0 C; F- o, z1 |& ]

2 ^* ]8 e2 l, c8 g//TCHAR 转 char9 m" P+ a, ^: K8 x; t9 x
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  : V5 P, G  f& ~
{  
+ t, @! e0 s# u$ P& q) T! F    LPSTR pszOut = NULL;  
: Q: `! j2 J% C; u5 c    if (lpwszStrIn != NULL)  2 x, T) U; B0 ?$ J- |0 W. ~
    {  
# w9 f: E7 t! u  o        int nInputStrLen = wcslen (lpwszStrIn);  # p7 x9 x' N4 J. e
& A5 u8 _* ^0 R# H9 s& e
        // Double NULL Termination  7 `$ i, I6 E( Y! X: |6 t, x
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  * o8 W, g& L' N( `% F9 r5 B2 S7 s
        pszOut = new char [nOutputStrLen];  
) ~2 a4 s' ~, ]& t# r
2 t+ m# m' g; u  f# i* Y6 n) P        if (pszOut)  
. M4 d  q/ e+ U! A        {  ! I  Q# \/ A% b- j2 i/ k2 U0 O0 S
            memset (pszOut, 0x00, nOutputStrLen);  
4 l/ h/ C; j% W. x2 \6 o0 G# Y( O            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  2 T% B6 ~2 y0 B, |3 r; E7 y
        }  
- D  a7 n! t4 \: e    }  5 `- {: A7 _5 _- l' D
    return pszOut;  
, @. n  F& j3 G}  
* E$ B' ~5 b7 T0 ]
' P2 D8 C) `- Z; q6 j$ z2 |0 G0 b, \8 |
//CString转char: f9 m$ _* I3 @6 Y) S; O
void CString2Char(CString str, char ch[])) U+ y! N) C, e3 p9 ]( m9 A
{
% x$ p; |: x2 r! V9 _        int i;
+ n$ y- J0 r" W5 m4 @9 k1 v% b1 }; G        char *tmpch;( T' @5 h: t" N2 |
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
! |9 s0 T9 ~- }- E4 ~6 Y        tmpch = new char[wLen + 1];                                             //分配变量的地址大小
% {/ G' g* d) R        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
0 c. n, h5 D1 b! Z$ z9 l! j( L" ?* S; n/ A, o) f
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;) z# t4 i3 O- L
        ch = '\0';" G0 r! J# @' y' e. D
}
" |7 ~: A. U1 j- _, T7 Z: ?& A) o3 K; K9 ~& ^3 {" U
9 I2 w8 E# H7 o  w/ H' _) C
char *去掉char首尾空格(const char *str), U  o: }% D% `4 q: [( d
{2 y; [8 G/ ^& d
        static char line[133];4 [% s+ s0 V1 G: E
        const char *pbegin;
# \0 }4 a) @  k/ t        char *p,*pend;
( R9 ^& C0 \* P2 _* s0 p2 U        int i;
$ `7 j- _! T5 I+ n) M4 v6 N7 v9 [. X) s- X/ X8 `
        pbegin=str;: p& l4 e4 v1 z0 \7 h
        while (*pbegin==' ')
( K8 X6 c* U5 f5 D1 v: Q; L3 {                pbegin++;
! e1 j* j& ?% `$ g# e9 k) t( l) |5 i/ }0 n" L4 g" O1 ?' ]* Z$ Q
        p=line;
3 k7 U. u4 D& ~2 L1 E/ ~        while (*p=*pbegin){+ a9 z) m5 Y7 d# g
                if ((*p==' ')&&(*(p-1)!=' '))
; P0 R& [6 V0 w: E) u$ E6 V                        pend=p;
4 f3 |& A: h* q- d1 \% J                p++;pbegin++;        7 I4 z9 h" F) y! E" H3 g' m
        }
: N# Q3 k1 X  K$ P( k8 s' Z        if (*(p-1)!=' ') pend=p;8 d( v  U1 s( O  \+ W
        *pend=0;) q. K* _* N0 I, T2 T- y5 o
        return line;
3 S$ w, Z( W# r* x; \}
2 f6 N) H/ _, ^4 ?! n7 f& N( C. {  t: ]( a0 }# L" o! m

+ i) A! x) E4 z% Z//获得网页信息 - 网页信息是中文会乱码 用英文信息
' V3 Z/ t$ V9 `- W' G( q( `void 获得网页内容判断外挂更新(const char *Url,char *html);( \, s: t" b. S* m( m3 ]
void 获得网页内容判断外挂更新(const char *Url,char *html)$ t7 S/ J* \- l3 `: P3 t
{6 K$ J* g9 \4 S, }0 R6 Y
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);5 l" E4 j9 E9 p; R/ L
        if (hSession != NULL)
+ [5 m7 \6 `2 @! s        {
0 x+ r$ }& v! m                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);- Z, _+ Q7 n2 t- n' ]8 k# P
                if (hURL != NULL)
9 ^+ }, i/ G, F! u0 Y8 w' a" f3 c                {
3 z; v$ c4 ]1 \, }- N
3 j. J. Q/ s: i6 N; _                        char Temp[MAXBLOCKSIZE] = {0};7 P5 D8 R- G3 {: i7 x6 Z0 Z) w
                        ULONG Number = 1;. N7 f1 N) @* R# T
                                while (Number > 0)
+ h4 |7 h  B9 N7 z5 R                                {
1 [" o. m8 q. J5 e3 L" s9 E3 |                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
2 a7 r2 M4 Z3 a0 }, c+ E# D                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
' ]% |- x# n- [& P# K                                        int a=strlen(Temp);1 W% L  c) a% d7 o1 E$ z) |
                                        int b=strlen(判断版本);   
4 U. [7 _- m( v; Y                                        if (a>b) % p4 [1 o) Q& h3 b2 W6 p! v$ ]
                                        {1 }3 _. z: ]2 l# @
                                                char *p=strstr(Temp,判断版本);. g. a# X: y& O7 q
                                                if(NULL != p)
* c  a/ y, `. _) ^' v" N                                                {          , s4 D! \! @+ t5 {7 J! t! A  p
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
. \2 J$ c+ `& t' A) ]                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;
, B: _) @, Z; e) h$ ^0 @- O                                          char s1[132]="";
3 D! W' u( J; z4 G                                              strncpy(s1,Temp+wz,wz2);' Z9 h. |$ I+ a  D6 E$ k/ C2 M& o8 S
                                                  char *p2=strstr(s1,"MEILEI");
0 A8 j% R9 {6 u; x: k0 U/ e                                                  if(NULL != p2)
3 t& x+ b1 a" p                                                  {  
/ o3 j- Q7 _2 B# J' \& c1 _- \" {                                                          wz2= strlen(s1)-strlen(p2);
% r4 U3 B0 ]/ n5 a                                              char 最新版本[132]="";) B4 o+ K* c9 F7 }
                                                  strncpy(最新版本,Temp+wz,wz2);7 B+ D5 S- z& G; x
                                                      if (strcmp( 外挂版本,最新版本)==0)
/ X( s$ y# S& a. I0 b+ _; x                                                      { 8 [1 A* D: _6 j+ E4 c
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
6 s- B$ S/ z. h# p2 S# @                                                      }
6 |. e; n6 m1 w/ @' i                                                      else* r) H3 s3 S  N. H; p* ^0 E
                                                      {' c) [$ B# k/ s
                                                            char msg[256];
* v/ I! K5 v& P/ L2 D( Z                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);8 f$ [6 D9 q% D
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );6 f- A8 u- ~2 Y# @" h
                                                      }" \7 h' w* V9 h6 j
                                                   }8 U4 ]; i% I( |8 G2 ]
                                                  goto LH;: A6 V* Z+ Q- l) O4 K$ |# J6 ]) m
                                                }! K+ V4 ^! L' m) T
                                        }
# [" W3 c8 v* h+ p) h: e. _7 D+ X$ ?8 Z. n+ D
                                }& g6 Z( \4 a  J. ~+ S
                                LH:;' e  t; J2 l# |. d6 P
                        InternetCloseHandle(hURL);$ g/ N# O: J% u+ R, E- y
                        hURL = NULL;" [: O, z- d1 \0 j4 p$ p
                }( D" b0 E) F& W

: ]& Z8 G7 o% d6 I3 }& V                InternetCloseHandle(hSession);! N% `, X7 k# ~5 m7 H
                hSession = NULL;9 M2 Q+ x- H  n% t! t" z. g
        }6 p  B' R$ a9 Y2 v- {
}
1 \4 h' y/ {1 X4 u7 R6 n4 V" C9 \! z9 G: u8 `& \6 a% }
6 ]! ?( K+ v7 u4 K0 k
//----------------------------------------------------------------------------
- H9 D3 G# M& B( ^//  Activation Methods( c+ E7 C7 Z5 h8 C
//----------------------------------------------------------------------------3 {. c% W2 @( `! @; l
  Z; `; @  P" k
//  Unigraphics Startup! i8 L1 c/ p2 }( G
//      This entry point activates the application at Unigraphics startup: Y; t& O* k6 N* |
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )  C) w; U1 b7 }/ f9 ?* r
{$ q  P" U+ U( E, x( w
    /* Initialize the API environment */
  r9 M* J9 t) t  t$ y* F    int errorCode = UF_initialize();1 c; x* T  z- m& X
: r8 U% J" O) {: a% h* F
    if ( 0 == errorCode )( q+ M$ ~4 v: f! r! Z. ^. L
    {
0 H) U3 k, |6 X1 v        /* TODO: Add your application code here */
7 h: w# |  K* e; V1 X: k1 q  Z! J
  v. d6 L- _1 r% O
                //百度云公开链接 通过修改txt文件标题
( `3 ~) n* B% d                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt% c2 j. G) N  p

8 n9 h  l4 j, k( ?
3 p% I  R) C4 F' w: O6 s1 @: u1 k, z8 E                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
$ _* o/ i+ A; Q( t' d                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); . m- ?8 O) f! b# B* g# I& ~2 |1 c
                % s7 T! M$ H/ x4 {$ d
        ( |0 |* \1 P+ n% F4 o$ T% i7 s/ g
5 L! u+ }% @$ p; Z4 e

. E; A9 L! M' `4 e8 o6 R0 o5 z* ?$ p" U8 G
        /* Terminate the API environment */
; F& U8 j, ~2 x0 ^; C        errorCode = UF_terminate();' B6 }9 K8 @. a
    }$ \; p0 p5 b4 Q
9 e$ l8 A/ z, m& J9 P9 C7 K
    /* Print out any error messages */& P% r( q( p5 Y! K& O& u
return;
5 l/ ]# r2 R- O3 P4 l}( b( {" {! E* I; z
- u) b% B2 |9 |. r
//----------------------------------------------------------------------------
7 g2 T3 O1 t  ]$ n7 v1 a4 h7 t//  Utilities- D5 E, d/ L3 t+ e. v3 [! O3 _
//----------------------------------------------------------------------------
' R6 C! `/ x+ C8 S; r4 q: k; x
7 i/ F( @, v2 t  v0 l- X$ ~// Unload Handler# p6 g% \3 K( G: |. T# _
//     This function specifies when to unload your application from Unigraphics.
3 D3 a$ a# I- B  t: N//     If your application registers a callback (from a MenuScript item or a
% ^& e3 D  G# c# @( p. ]% i//     User Defined Object for example), this function MUST return/ E; j) v, x1 D$ l- W# {
//     "UF_UNLOAD_UG_TERMINATE".
7 m9 a& X9 U3 t( h9 f. p  mextern "C" int ufusr_ask_unload( void )4 j6 v  F+ C0 u
{
6 z" z4 [+ n7 }0 K: T! k' z' I    return( UF_UNLOAD_UG_TERMINATE );
) W* \( n: o/ [( ]$ T6 v}$ a6 Q, \: b4 Y6 D, D1 r( U

4 I! r% Y1 G6 v: i1 Z( G0 c+ G! I( g% z, H, t7 u2 o, v: e$ @
启动UG就启动dll的方法" i$ n- A5 O1 C: x

3 C" A" O+ A# C方法1.添加环境变量
% }% l" {3 V/ _" d. _$ K/ G; O1 ZUSER_STARTUP=D:\MEILEI.DLL! @6 c+ g, _8 v" v$ Q) o
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了0 t' b# o1 r( H( f+ ]
. N$ ]; r$ q( _
方法2.在代码里添加(可以执行n个dll)
; a8 u  \! _. |% _9 ^/ W: N- FUG会自动加载 startup目录里入口点是ufsta的dll; _9 c: X% [3 y0 W) w/ v. z

  _: \4 G' `% x' b4 L2 Y$ H所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令/ O) Z2 k1 D/ w% _- P9 J
参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了1 w" S% n1 b7 W& Y% t/ j
6 T. }3 z, H1 W0 I
菜单参考  NXOpen_meilei.men.txt. }# Y, R  F6 l% `/ \

7 {% B0 c9 V& s5 Y6 _- {DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录+ q0 |9 [! }' {3 R& d# ]. O, @
启动UG就启动dll的方法源代码下载
' w. h7 |9 @( A# k 启动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二次开发专题模块培训报名开始啦

    我知道了