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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
. P! }' D) {" o2 T5 Y1 t7 Z8 c7 i3 N+ Z" L
如果你想每次运行UG 判断 ug外挂是否更新
% c5 k6 M* s+ x( X! @0 t3 e
( x. B8 D4 e0 Q0 h$ Y7 o+ ^  |/ F; L% o0 N3 `! ^% z
原理:; B, R) b6 m0 h" z
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
  [  E* W0 Q- R/ r然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断1 m+ F! e! l, J( m8 Z/ Z& ^, Y
! R" g* E9 u8 @' X6 d9 q2 B
. @! I2 {6 a$ U: k
被启动的dll程序源代码,如下
" z: O' R: g$ w  o  u% q! u2 Z# w4 n, o) E! ^, Y! E5 O
//  Include files
- ~0 \1 C0 B& |8 X#include <uf.h>
' k$ F; g7 n1 S. C) S% g/ G#include <uf_exit.h>
9 R- G& t, |* K: U#include <uf_ui.h>( a2 L6 S/ J/ Z/ i  o# V
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )/ U$ m9 F, \* y$ ~" \6 X
#        include <strstream>
  c" E* v; Y; g7 i( D#   include <iostream>& ?" H: X9 g% p' ~& `6 e9 c* B
        using std:strstream;) N/ x5 j1 \/ x% L! w' L& N
        using std::endl;        
- `. A8 j; w6 V" J1 s$ f% w# x* t        using std::ends;
& R; a+ R/ u3 O; ^! Z8 o+ X        using std::cerr;
. o2 {4 {6 N# [7 ~* I, j#else$ `. K; Z1 k+ T2 \7 `$ Y
#        include <strstream.h>
- l& T! E$ r* m9 C/ A#   include <iostream.h>% j% V# W/ {; E3 p- n5 q; F' A6 z' N
#endif
# i3 I- D3 M' s* j; \+ i#include <string.h>
: ~( D' V. X. ^5 \  j* F#include <afx.h>& I6 |8 o2 z2 W# g3 Y- `8 a% s
#include <windows.h>
1 g  F/ O1 U/ d1 D, K#define MAXBLOCKSIZE 1024$ V7 O& F. T8 ]+ P3 V* t  I
#include <wininet.h> //网络. k1 r. H; h9 B- ^6 [* o( q% D
#pragma comment(lib, "wininet.lib")//网络
  E/ c& k" c; }/ X1 m3 f0 Y$ H$ X3 X# o0 E8 d: V- O+ Q+ u
char 外挂版本[132]="V2.8F";0 Q2 b6 S- @% k$ y. L
8 Q0 e% Z# l  g- ~6 L

" Z% \$ k/ {( K# I7 t; C7 R3 Vwchar_t* CharToWchar(const char* c)   //char*转wchar_t2 a9 L! F8 T+ v2 O! Y( I1 ^4 R
{  * }3 N) z( d% E
   wchar_t *m_wchar;
4 ^7 I* V3 D- U& J& t/ x# E    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
; [9 i; p5 O  S4 y    m_wchar=new wchar_t[len+1];  
/ Y- {( R2 j- E1 ?1 T8 d5 X    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
0 F* [* J- N- g7 U: h& o    m_wchar[len]='\0';  
+ ]. U: A5 e! Y# m8 s- W    return m_wchar;  
  x, m6 L- p; j+ B$ C}  
& }* `& k6 d1 x7 P' n* C8 G$ [1 R) Q7 Q  S2 y+ D' ?
//TCHAR 转 char
# q- d$ v$ V8 K8 @% [char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  2 \6 ~- Y; E3 o! L
{  # O% L: R8 U2 g; D
    LPSTR pszOut = NULL;  
2 S% k* @% y+ _6 b    if (lpwszStrIn != NULL)  
3 `; z8 A3 F5 i* A! B2 A. w    {  . P4 o; V0 ^: r+ q  n7 {7 H
        int nInputStrLen = wcslen (lpwszStrIn);  ( q6 q; Z; u7 D( C4 T; {2 o

3 u) ^6 \" q# m1 s9 z8 o        // Double NULL Termination  
# J7 h8 C8 ~8 O/ b        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
9 @7 B$ T3 r1 [) z8 I/ |        pszOut = new char [nOutputStrLen];  
3 F1 t9 J" y1 E1 l/ \
' t( Y9 ?+ k1 ]        if (pszOut)  
: ]6 I  U5 _+ h5 @) l* c' A& |        {  0 c3 t) Q! z  ^2 c9 r
            memset (pszOut, 0x00, nOutputStrLen);  
! s5 q, u" b, X$ k2 B& R& Z1 y% n            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  
$ Y5 x; I, p" |" A2 [1 k        }  
/ |' P- c) a. I+ b0 H- Z    }  ' _: y% _) y( N% i, ]
    return pszOut;  
3 g- g5 J6 b' U& }1 Z  x/ C}  $ o: y& J5 i2 }

; O& b, G: |) D, H6 `3 c. ]! g
5 \6 `' z0 @  a% {) z3 M: E, ^//CString转char8 e7 P4 Q% v( f' g2 Y8 h% ?$ G
void CString2Char(CString str, char ch[]); N8 }5 H* j$ I) T+ U3 F
{1 B; D/ h4 O) s+ X
        int i;* ]: M  F* t! d0 L2 K$ o
        char *tmpch;
5 W% {' e. i+ }        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
9 Z) w& Y2 z8 D+ L        tmpch = new char[wLen + 1];                                             //分配变量的地址大小- `3 I. ~: p6 s8 L7 V; B: K  W  [
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*; L9 c! X# T% i  A
; Y4 N- f/ A3 t: w0 [2 f
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;' F4 V; f5 q* A2 ]( u; u) V, H
        ch = '\0';
) M4 S  g2 B- w}
: R$ g( {7 _, O5 g4 n8 j, O2 P8 ~) _3 i9 L( C! F4 f4 v

, V- p0 d0 h' }" K3 dchar *去掉char首尾空格(const char *str)- ]. F2 S' M# L# J4 s/ i
{# s3 e! e' J: a1 t
        static char line[133];
; k1 q& ^  ?- A5 v" b        const char *pbegin;
6 S: @3 S9 R$ i2 W! H' Y, z, k        char *p,*pend;
$ w/ z# F/ S8 p5 Q' D; }5 H  J        int i;
4 y' ^. v2 A* _0 E! c7 {& t. k4 o" Y* h3 a' ^
        pbegin=str;
# a- g5 p6 p; N, e- `* n+ [. x        while (*pbegin==' ')
: Q6 i" w- Y5 T7 {- \) e% v                pbegin++;# }% I6 W6 q' [: O. C; i5 f" p. J

8 k6 ]7 f7 c: J        p=line;5 {, h8 o4 T' K
        while (*p=*pbegin){
+ I- p  ~8 f2 H/ ^# M( f$ y                if ((*p==' ')&&(*(p-1)!=' '))5 F: ^. l( g3 Z
                        pend=p;
9 A/ ~+ c% [* D1 t6 c                p++;pbegin++;        , b4 p- F, h: I5 g
        }
& j# I  v% ^5 M* G4 x& K        if (*(p-1)!=' ') pend=p;- P  f" e) t. r
        *pend=0;
* b9 m2 y  y4 }5 R* G8 `$ g0 ~+ n8 c        return line;
" ?' E& b6 a' e- G2 x7 J! @} / L/ A5 a  n- G& T6 m4 i( a
( O" a. @" H, T9 i; t

1 b, z1 N9 l+ s& w1 C0 V6 q//获得网页信息 - 网页信息是中文会乱码 用英文信息$ c5 O1 u! f* @& q
void 获得网页内容判断外挂更新(const char *Url,char *html);
# o, r; i0 e; |, {void 获得网页内容判断外挂更新(const char *Url,char *html)( ~+ d# V3 _* F) S5 D# I
{
  l& ]: C* p/ x        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);" D# z* |& |& }) q
        if (hSession != NULL)
" z& k0 Q' r! R: p- l  T1 M4 r# p        {
# w( `4 S2 m) K7 A  r                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
5 V$ m. k7 H$ G- t) t) k7 q                if (hURL != NULL)
$ r- ]' d: K' `) K  G6 M$ \! n8 e                {
. U  l& [4 E8 U+ @& r) Q
; J. `0 m2 l& m. Z* O( f                        char Temp[MAXBLOCKSIZE] = {0};
# l4 x$ H+ o% I( \0 _2 J9 r                        ULONG Number = 1;
: E9 R, N+ ^3 B* S& }$ R                                while (Number > 0)
6 U0 B0 L2 T* l5 g. h) A& \0 g                                {
" s3 C& p1 c- T- \                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);1 F! b  z6 _. ^/ d' T0 K* P% ?
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
  r/ |) G7 K$ g. U- A                                        int a=strlen(Temp);
, @: d* y# ^' t* u! @                                        int b=strlen(判断版本);   
2 m) o3 w* U3 }/ \1 o                                        if (a>b)
# d+ O, i7 Q# O9 _0 W  _6 o                                        {8 t: Y! T7 j: W( ~
                                                char *p=strstr(Temp,判断版本);4 O' A% S8 r% Z+ T
                                                if(NULL != p)$ Y: A9 I5 s" |6 Y+ R
                                                {          , B% ?- Z, E% \+ B4 M
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
! [, m# `4 d. g                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;- s' Y( R+ Q. r9 ]+ T; G/ l) G& b
                                          char s1[132]="";
% O$ Y; q, a* i                                              strncpy(s1,Temp+wz,wz2);
2 K- b. k; ~  R3 [                                                  char *p2=strstr(s1,"MEILEI");2 |& s; R# G3 B. N
                                                  if(NULL != p2)
6 q$ J- V) s! r6 j8 q" u                                                  {  7 ~5 P! u/ D1 e
                                                          wz2= strlen(s1)-strlen(p2);
9 i" ~3 `1 p# h, Y. U                                              char 最新版本[132]="";
. b9 E1 O6 V9 i0 t                                                  strncpy(最新版本,Temp+wz,wz2);, N$ D4 ]9 B* a* V7 @  }& o: _
                                                      if (strcmp( 外挂版本,最新版本)==0)
/ @  ?/ K, P! {$ H                                                      {
6 C. ]8 a) T  d0 r8 q8 x                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );4 J3 C; ~; N1 N2 Z1 R# A
                                                      }
% e7 Z6 s) v5 e( v                                                      else  I6 x5 ?( b& V: g  a0 y9 C& ~
                                                      {
9 N/ L; {/ F+ S; G                                                            char msg[256];1 y/ ?  Q0 I! @! A9 ?4 Q. [+ S% h" g
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
2 V. Q# B" b! C4 y5 p  f' d1 N                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );0 N3 y! M/ G6 v  Q
                                                      }
% Z# a; ~5 l* I* d0 K1 R3 ^- a                                                   }" Q: m  p/ ?: d" x
                                                  goto LH;4 s3 H- V$ W( l
                                                }0 \* ^6 l3 }3 o
                                        }
! c8 h. i& a; y# U6 h& [8 s0 U6 ^9 ]7 B  g; Q" I$ D5 M7 d& R
                                }& V& N" c; H( D1 K
                                LH:;
1 C& t' A) o9 L5 }                        InternetCloseHandle(hURL);6 ?1 {# t  e9 K' B# i: c) c
                        hURL = NULL;! p% Y( W: O* W( m5 Y
                }
0 i4 N7 k& {3 R
% s, t3 Y- p7 k" D: {. C                InternetCloseHandle(hSession);
( ~8 }4 A7 W) N6 A: e                hSession = NULL;4 l' ]4 m! y1 D, @, E- D
        }1 w6 E5 e: n9 m- w9 F# v* C
}
: {' h- b; T5 `1 T) P3 y" C8 L* ]: \8 d  n" u$ l0 d5 t# ~
6 p) S0 q6 r/ x: D5 z/ M. a
//----------------------------------------------------------------------------
! x) K8 W( Z# t/ j2 M  X& i//  Activation Methods
0 Z& E6 ]; L0 H( X3 A//----------------------------------------------------------------------------
# t* n' H3 E* @' O; B( L0 T. ?  J% t$ c! l2 X  f
//  Unigraphics Startup
4 u3 I  l9 f" o' e! j" d# W, Y  _6 {) I//      This entry point activates the application at Unigraphics startup
3 S% j+ W; |$ mextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )8 B, ]8 |; D8 {9 k6 M1 R
{  z% l1 {  G  ]. q, b% b
    /* Initialize the API environment */, G8 D, j% W, v5 K4 b9 f
    int errorCode = UF_initialize();
% S5 o( t4 n5 I* K4 `) D- z8 v. u& C4 h3 W1 C
    if ( 0 == errorCode )3 c) V/ ~; c, V8 i. o& Z
    {
( G  ^( L  [! q. D        /* TODO: Add your application code here */
# {( {+ P# N1 D
& Q2 U9 o: n; I
9 ~  b: c: j# z                //百度云公开链接 通过修改txt文件标题
, ^: ^6 D' ^2 o1 u; }: v. ^                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt+ r& O+ Z( q/ O3 l

7 O, O, i# Y7 N6 p% f
  f9 i" C2 p3 a4 A& M/ r) `                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
0 \7 |) O% d( ]                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); 4 z7 R1 D7 b6 C1 T1 L
               
; _% {( u/ e$ A/ |+ v        3 d. [9 k, ]3 @4 `

: N% t. ~# M- e3 N: J9 a: U4 B' N. N" O7 N" x% \+ p7 h
0 |) `- G& D7 q/ y  v, L: U- s5 h+ w
        /* Terminate the API environment */
2 v! i) e6 x, l! T2 Y        errorCode = UF_terminate();* B5 `' i) e# M' r" E
    }# t% K8 a3 T3 Q% j
% `1 O6 V: Q8 U7 {2 b8 D/ N1 L/ \8 u
    /* Print out any error messages */
. F# G& I# P+ V+ c. mreturn;7 ]6 d5 x8 V" z
}8 i) ~4 O2 P9 ^  a

. d. j' P& N9 k/ _' Q//----------------------------------------------------------------------------
2 h3 v+ \; h! U+ f& n//  Utilities
" x8 U5 `. @+ e//----------------------------------------------------------------------------
  _, L7 K: e2 Q; k8 R, m) q; i# r3 u2 E
// Unload Handler) F- K; y& ?+ c3 F
//     This function specifies when to unload your application from Unigraphics.
. I  |$ @) r  T( d( j( C: C//     If your application registers a callback (from a MenuScript item or a3 c4 M/ A7 {( n$ o! ~
//     User Defined Object for example), this function MUST return
( ^' P% h6 J3 p" f2 z- M//     "UF_UNLOAD_UG_TERMINATE".
% Z* I$ L- H& ~- o$ k. X( h0 R% Yextern "C" int ufusr_ask_unload( void )
$ N3 M* k. C* z" s{0 J8 c. v2 ^. i
    return( UF_UNLOAD_UG_TERMINATE );
  a7 E9 A7 |" ~. ?; i# c}( q7 h; z" A- p# }" P
) g% K" W% R: G) V' J! T9 J
1 z; \* _9 W9 x% ]
启动UG就启动dll的方法
5 j5 Y1 M$ X* @
" Y3 o0 R8 L5 D! g/ ?4 v  E方法1.添加环境变量& t) @6 U: m1 s5 ]2 E. @; g6 Q
USER_STARTUP=D:\MEILEI.DLL+ u0 N# C8 S- O, K* J" c/ v: }
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了+ M; _' W- y, [

2 t1 g2 j! e) l* I$ i( J( N: ^方法2.在代码里添加(可以执行n个dll)
0 j. w& b, I/ K8 GUG会自动加载 startup目录里入口点是ufsta的dll5 C/ q- J# k* w! ^( }& C
7 U  K* K  D; h
所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
9 [9 a% A5 q+ L! b参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
9 H" B8 H6 Z$ G- a  @& e8 \5 ^7 F  r% X: O7 }% [; ~- w+ a
菜单参考  NXOpen_meilei.men.txt
) U+ B+ K! v8 B2 L1 w
; e% q# V$ m1 u+ I0 \DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
6 l$ h5 B8 m: G* u0 o1 w启动UG就启动dll的方法源代码下载0 o4 c2 N* \6 e9 G) Y
启动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二次开发专题模块培训报名开始啦

    我知道了