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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑
6 J; D7 _( j  W2 l% E' E' E2 E0 t" U& s# _6 ]" d
如果你想每次运行UG 判断 ug外挂是否更新% z. Y9 n6 O% z$ ~' a6 U

9 C, u' s" o9 B( j0 s7 n; H  t) z% y' [* C" C7 x  z1 g/ m
原理:7 z2 j7 K$ o* p( ^# Y& M
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了
& h5 e( a7 S5 N( Z然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
# J4 @# O' x) e. t# L* U- H! p2 Q9 \
. Q- L# Z% @8 H7 }+ R; R/ C" H" T. j
被启动的dll程序源代码,如下
  T2 \* e1 w. J7 T/ q% Y. {; o/ q- O2 Q4 s" [8 F; S6 n# E
//  Include files
5 g/ \: V& M* X  c# L) f3 Q$ y+ J#include <uf.h>
. S4 R& o$ m. x#include <uf_exit.h>
3 m3 k0 @/ w, V- Y7 L% s#include <uf_ui.h>1 A. i1 Z3 g& ?: p) M2 S
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
0 T5 w: L# Y3 Z4 Q" @$ T* l/ |#        include <strstream>
+ p+ N4 O' C- ^5 H+ u7 V#   include <iostream>* v2 _3 }1 O, m6 L7 ?# b. _
        using std:strstream;4 {5 b8 _) R& O$ i2 ^' T
        using std::endl;        1 t! N9 M6 O3 y) Z
        using std::ends;
& a. V/ n4 N6 Q. p: i* V" C% P8 `        using std::cerr;2 s+ F/ t' y  j$ l2 g' }3 Q
#else
1 H% G" B4 {, T1 v$ v4 @1 J#        include <strstream.h># X$ _( \" Z6 p6 B2 K# J% d
#   include <iostream.h>
% e* D6 J# P# \- m) C4 Q  X5 |7 t3 L#endif
9 y& @; q4 Z) w) y& X& m5 W' R7 V  h4 x#include <string.h>; F/ l+ n) |5 u' t; v& g
#include <afx.h>
' k3 S! p7 Z& K$ L" s. }2 l#include <windows.h>( A' ?* S" E4 M4 s
#define MAXBLOCKSIZE 10242 q& c6 c5 S5 A  ~) W
#include <wininet.h> //网络4 y: J$ C- w  `" [( o) k, L( C
#pragma comment(lib, "wininet.lib")//网络
' L* f, v2 j0 Y- L) j6 W) J) P% Y) ^% r) J. J, u) k
char 外挂版本[132]="V2.8F";
8 r: }  L) Q0 ~2 P" w' |; u+ t  ~, Z( ~5 B1 R) o) i
! @+ d9 H, b0 ?
wchar_t* CharToWchar(const char* c)   //char*转wchar_t0 {/ \+ p, d7 L9 o: g8 k' ~
{  
3 @# e2 \% _& S; H5 a# O( `4 A3 j   wchar_t *m_wchar;
; ]# k# |! B. a3 b$ a" G- @- E4 D    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
+ ^; B( u  o. E- i  b    m_wchar=new wchar_t[len+1];  
7 v6 ^& ^( _5 x    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
# L- t& K$ H- k2 F- l    m_wchar[len]='\0';  " u+ v4 y7 t" L# D; e
    return m_wchar;  & `( {# n/ P) I- Z, Z
}  
% d: x* |3 {* ~! {( k/ E
$ w1 Z/ C" ~- J//TCHAR 转 char
2 }8 G* y  U' j' ^& o& j( F! pchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  8 [* j, N: C4 T9 z& M# F4 L
{  
0 x" |) W. V# l" _- L2 R# K6 v    LPSTR pszOut = NULL;  ( R. ?4 l2 ]) x' f( I" D: {
    if (lpwszStrIn != NULL)  ! c; ~6 c! l/ C. w1 g
    {  , x" h1 p) `  F" _: a, R
        int nInputStrLen = wcslen (lpwszStrIn);  
2 O5 j' _1 z9 X& p' F) Z8 ~# c7 n# e, [
        // Double NULL Termination  5 c5 g9 c& b& p
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  
' r8 y. h$ v: l* }8 O  t7 W        pszOut = new char [nOutputStrLen];  
1 i9 w; s$ E0 t( I- m+ [6 S( [/ ]& o6 Q& U: b) p+ m
        if (pszOut)  
$ v! e$ o3 j6 o+ \4 p# ~" P        {  
/ R* V$ u# @$ G8 v( u. [" N! D            memset (pszOut, 0x00, nOutputStrLen);  : k) ^: c9 ^8 l# Q# Y
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  7 A: T4 B0 _4 s) ?
        }  * q' {3 L$ L* L2 I0 I. B
    }  " i9 e: n7 h6 x2 s7 M8 U1 ]: ~
    return pszOut;  ) [) R! [2 b$ @8 S: v% `% K- f
}  
4 |* H) k! t  Q& z2 w
9 ?; X0 B/ z; u  M. Q0 c1 e% f% w
//CString转char
3 a" u, n' M; g) evoid CString2Char(CString str, char ch[])6 H6 Z- e6 l) n2 j
{
0 S  v& Z/ W0 n        int i;
; \" y7 J3 b4 J3 x4 m/ r, e        char *tmpch;
8 ?9 z, n5 D. a        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
$ F1 |7 u5 z& F, Z0 B! U3 o        tmpch = new char[wLen + 1];                                             //分配变量的地址大小* G1 V2 b. o) k; `
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*
/ @) ^9 F9 b$ i: s0 Y! M. s3 ^% U4 L/ \. i1 t
        for(i = 0; tmpch != '\0'; i++) ch = tmpch;
0 K$ C$ o& v4 h, m$ ~$ S        ch = '\0';
8 k# v. |8 r, _8 S4 r3 |8 y! W6 j}
( v( ^) c# E; I. c; k! D1 ?
/ G9 C  z" |+ c$ a, V1 B
! C& E( g. r0 n! O  P! @char *去掉char首尾空格(const char *str)
6 N* T8 ~2 s0 t{
. H% p# @1 R! \* J9 S5 u" {        static char line[133];' P9 \1 j7 G7 c9 y
        const char *pbegin;
* S3 U- [4 b+ q        char *p,*pend;, w9 b! S7 z6 Z
        int i;7 u7 I/ d. E! N$ D' S

1 l5 U* w+ Y6 T+ I" H- o        pbegin=str;
4 I7 H- g4 S- j& x        while (*pbegin==' ')7 `. ~; D% y$ a% h" ^
                pbegin++;% y# ]1 L3 f7 F4 k$ g1 A; N8 p1 y8 z7 o

6 |! `3 v$ p4 t) g4 B; \. s( R+ V        p=line;8 y5 G$ m& |+ f5 B9 a- g4 o
        while (*p=*pbegin){% u/ C2 P$ e! g
                if ((*p==' ')&&(*(p-1)!=' ')): W' r: l  J1 y3 y, f, e. L- X0 |
                        pend=p;
% N  S- x% n& o& p1 U                p++;pbegin++;        # e! {- b7 z- s) K( y
        }# C; D( z0 k1 I  l. z
        if (*(p-1)!=' ') pend=p;3 ]2 v6 d. f1 ~6 U5 _  X
        *pend=0;
3 H" f4 C9 k8 l        return line;' c% s) q. F+ D0 s* t' M( I2 a
} $ a5 n. h) y+ N

" f7 O2 w3 Z& d  X7 J& x8 H: n) S/ _
//获得网页信息 - 网页信息是中文会乱码 用英文信息
7 p" G2 K; |; gvoid 获得网页内容判断外挂更新(const char *Url,char *html);
1 j: i0 l4 v# zvoid 获得网页内容判断外挂更新(const char *Url,char *html)
( [+ D+ D# T: T5 e7 W) ]5 {{
7 I' M7 s- X; T# d2 g5 w$ G! y- }        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
+ p; M# ^! Z2 |! C' M" k        if (hSession != NULL)0 _8 U. n5 c+ \
        {
; ?/ W9 |( B; B2 N' D6 t                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);. K" X  n: n/ |+ Z. _- P
                if (hURL != NULL). Z  C8 n* h4 s" z9 A
                {: }. r! W: `/ x

& W! `; n: _8 j& C. z                        char Temp[MAXBLOCKSIZE] = {0};
2 v( t8 {0 C9 d5 ~2 [) r) o                        ULONG Number = 1;
' H% G% u7 u% O! Q" h0 b9 q; Q' J                                while (Number > 0)
& Y4 L6 Y. z1 A                                {
/ X1 B, k' D0 n4 S                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);# `* x( c' _& l1 y5 K+ P6 S
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
! g6 X) w9 d& P                                        int a=strlen(Temp);
7 L; D" Y% G$ |+ ~4 F                                        int b=strlen(判断版本);   
; [  F. w/ q) \4 j5 E0 R                                        if (a>b) 4 r6 y8 v& R. M9 o" L: {
                                        {
1 a- t9 ?; O" G  G3 R                                                char *p=strstr(Temp,判断版本);
6 V5 D' N" Q1 w, O# X# [0 @                                                if(NULL != p)9 O) i- [! }! }- W3 x- Z) }$ }
                                                {          . N$ v4 r4 d! {& B
                                                  int wz=a-strlen(p)+1+b;//版本号起始位置
6 \' O5 `8 q, A3 K5 R5 Y; M                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;! E; B6 @4 [5 ^$ ~, m3 z) X4 v
                                          char s1[132]="";
0 }* M" r" A6 W# G9 |) g2 y3 p                                              strncpy(s1,Temp+wz,wz2);
2 P7 J3 D6 p# m5 E/ R                                                  char *p2=strstr(s1,"MEILEI");. A6 u' O! o2 v
                                                  if(NULL != p2)! I. w! V# w2 X' k6 F  j
                                                  {  
3 q: e! _. b# `# m7 Y7 ^                                                          wz2= strlen(s1)-strlen(p2);( n( S  F6 M0 s0 O* M, Y% g
                                              char 最新版本[132]="";
; O) w1 c2 w# k8 ^, {5 `                                                  strncpy(最新版本,Temp+wz,wz2);
, _; `" ~; x' k: R                                                      if (strcmp( 外挂版本,最新版本)==0)
7 {  w- k  K* i* j- h/ n3 m7 i9 F                                                      {
$ f$ @: @' f: o) w2 q& m' y                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
7 X5 d6 m6 b, ?! z                                                      }0 ], \6 P; A6 o9 @
                                                      else% a% R. g) Q4 F$ U# _
                                                      {
  z; j* l! H6 n% v0 O1 @% f                                                            char msg[256];
2 ]0 M; M. z, i# k- l' x* k                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
- @$ @- e( D7 c4 `                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
  X, ^" T. |# l! r6 [) ^' B                                                      }; u7 `* d3 ^( O
                                                   }  F  h  S  N5 G' k- o( |9 j
                                                  goto LH;
. N6 \! q( {- j                                                }
; V3 K5 I0 f% j; [  J6 Y7 H                                        }
9 J" Y( }8 s" d1 X# G6 h! M3 b4 s. [
                                }
% a9 f& I" t5 Y1 o7 X                                LH:;* \$ [* [: Q& R, a  n
                        InternetCloseHandle(hURL);
) a/ ?8 A0 n. i/ S0 {& O9 `* G                        hURL = NULL;% L* ~; E( @7 [3 z1 H% B
                }
- J' u* x( R4 z& T4 ^1 m$ B5 P* q% F6 ^  s7 u4 e. I" v$ a  w
                InternetCloseHandle(hSession);
9 a1 n9 l/ T7 o3 u8 C) W+ r) y                hSession = NULL;
2 |5 J, A% a% R6 B        }
. w' P8 \& u7 T$ v! F}
, n  j( j5 p+ c% [# h
9 P- l  ]3 }- }0 O
9 v; I: Y2 }* h8 ?& P* w7 D5 y//----------------------------------------------------------------------------
6 G+ F& X5 l' z& w6 @& g//  Activation Methods
) J2 l0 ^- L% `4 ^) L//----------------------------------------------------------------------------9 w* P1 }" P$ r6 h% a

  ?( \1 c* U/ x7 v( n; j# t8 d//  Unigraphics Startup
& _  F6 h6 y0 A9 u//      This entry point activates the application at Unigraphics startup
  H8 C1 @9 D/ kextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
2 w( u& Q/ V' |" n{
- \5 U: W* c2 ?' Z3 D    /* Initialize the API environment */
  M8 T, B/ K- F$ M    int errorCode = UF_initialize();. W8 w" M' I/ `/ X: _* P8 `8 S+ c9 T$ }

1 h- D8 A: e7 x1 _/ B, s    if ( 0 == errorCode ): e' f. K# P& C  l5 ^* s' M& s
    {/ W2 ?: u/ q: w# j' _
        /* TODO: Add your application code here */
1 J5 D* m! p% ~# {4 d2 e% X; g+ T7 m$ M/ T

* y" [- D% Q6 W2 F) D                //百度云公开链接 通过修改txt文件标题
9 t' T, N2 h5 z9 u                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
4 T1 o! |, @* U* M% ~2 z
; [& C& r! O$ v8 B4 Z3 ?: B, P- g. O% g! _/ Q+ z& l: ^
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  
2 |$ j2 W  Y1 r+ M' o9 k. k$ r                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件); ' e' c! b( X$ y' {$ B. r2 l
               
. B9 }/ l: S$ @6 n7 a: S        
& t6 W; t8 o- `5 r, q8 f
' v3 r# G; J# ^/ c2 m8 ^6 \" m, }7 U, M: ]  w

" B; }: b2 h) ^) l. J% U9 u        /* Terminate the API environment */
* V5 k& c5 }3 J% B* s4 D4 j. e0 `        errorCode = UF_terminate();' G( ^( }5 ^( \6 O4 K! i
    }
  x! w2 R  U* x4 K& L8 ~& j: d' h5 _/ \6 L: q: k7 D
    /* Print out any error messages */
1 R; h( ~, @/ f3 a. sreturn;
7 ^) d: B6 r6 F) f! g}2 L1 d! ?( l  X& j+ _+ T2 H, Z. k
4 U4 b5 H7 B# t( I9 q. i0 r% u% N$ K
//----------------------------------------------------------------------------
) `3 V( J  ^/ k4 z8 @//  Utilities
2 ?3 e# e: D+ z- S7 p+ z+ K: g//----------------------------------------------------------------------------
: z% O4 l9 Q$ H, U# J4 Y% x
6 E# k* t" {4 |# i// Unload Handler
5 \! _7 K3 M, Q+ a- }1 \- T. p//     This function specifies when to unload your application from Unigraphics.& Y6 C* z8 j/ z9 D8 }# }$ G$ }
//     If your application registers a callback (from a MenuScript item or a
& I/ C; b" E! L5 ~6 {//     User Defined Object for example), this function MUST return
2 F) e* p/ ?$ Q//     "UF_UNLOAD_UG_TERMINATE".
/ v, T4 X6 ]+ [8 M& Uextern "C" int ufusr_ask_unload( void ), u! P. f$ o5 z$ J
{
+ s! L9 t' Y. q8 h9 o9 C7 s% R: R    return( UF_UNLOAD_UG_TERMINATE );
# \, j+ K& O9 d8 e* K}
* j4 J5 Y; x/ t5 G1 Y/ k4 ?) S% {; i/ y  g, S

! g$ W/ c# k/ {8 j( T$ V2 B启动UG就启动dll的方法4 H- ?  D3 I6 q6 }6 A
% l  l4 {( ^4 p$ @( w0 z
方法1.添加环境变量' s: g! D- X8 s+ |5 R' B
USER_STARTUP=D:\MEILEI.DLL) R; [' c" M5 e$ e* p
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了
# h# x' Q- m( S5 N9 K! j4 ]1 t9 |) J+ L6 I8 Y% ]" y
方法2.在代码里添加(可以执行n个dll)3 D/ @# C% L5 \6 N) [* V0 C; J
UG会自动加载 startup目录里入口点是ufsta的dll
  A& M' t. d; B* n6 K( K$ y
  U  W$ o; P' p/ m所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
  ^) _: P( p- U2 B3 S参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了# Y) V  ]4 W# S" Q

/ A4 {3 N+ L* M菜单参考  NXOpen_meilei.men.txt  Y, m- H+ ~2 |* X) p1 Z, k2 r
8 @0 B7 I  h7 J5 i: B# w- }+ k
DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
  h0 W3 \3 l6 j, y# r) {+ B启动UG就启动dll的方法源代码下载2 b% T, M  x) Z: ]
启动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二次开发专题模块培训报名开始啦

    我知道了