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

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

15757753770 楼主

2016-12-11 15:45:38

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

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

x
本帖最后由 15757753770 于 2016-12-11 15:51 编辑 - g# r4 l/ |3 K
8 `& C1 K. c: F1 P# d
如果你想每次运行UG 判断 ug外挂是否更新
. N! x' B8 e* o; y3 M( P& I. K' Y, Z/ X7 S0 W4 F* g. A
4 `& q% c. X4 _# |# [( B
原理:6 R; W- T" t9 m) o. j7 a- M! I
自己去搞个网站 或者网页 什么的  只要网页内容修改版本时 网页地址不变就行了% W" N+ O8 r$ f
然后  启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断
, E. \; m1 N$ o$ i* y4 T+ ^0 [  Y7 B! G) j9 ]
% l2 k$ r& N* @& `. e& Z
被启动的dll程序源代码,如下
+ t7 g; n9 d9 L2 l) Z- L! q
* o: Q& ^  s6 k" E+ T9 I% X//  Include files$ m/ S9 R( |  |/ a% q
#include <uf.h>
/ I3 B3 |" P  C4 i3 C3 b; s#include <uf_exit.h>
" |& Q# E7 S, A! `0 Q* {. m#include <uf_ui.h>
- O  ^2 b1 x' U/ j4 R) b$ ?#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
2 N9 v+ b# e8 ]. [#        include <strstream>
9 U: j" |5 V9 d0 M4 d- }#   include <iostream>
9 e9 \( g9 k' V, L        using std:strstream;
) r5 Y. ]. d+ ^: h        using std::endl;        # J" h: @! Y  [
        using std::ends;/ {+ \$ d! [/ Z1 p# v6 X
        using std::cerr;# X5 U+ ?9 t7 t
#else
2 H7 u: L5 X4 R8 N3 }8 L5 m#        include <strstream.h>
. d& ^6 z" O8 B5 Q1 O#   include <iostream.h>
& w, h9 m+ S1 b7 {" _#endif2 B2 \$ S) W1 j4 j0 Y% s. D: z
#include <string.h>
% n: J' T7 m  e- ]1 a#include <afx.h>
& ~! k9 l! e0 e+ O8 A#include <windows.h>7 C2 P1 B9 c* ~6 E  `8 ]. E: A
#define MAXBLOCKSIZE 1024" W: p4 {% f7 _1 J* u
#include <wininet.h> //网络
! G! O& J1 m. s#pragma comment(lib, "wininet.lib")//网络
8 ~0 L0 Q& A: {: J( O8 u. g
7 @1 ^7 L; m6 p. |- e. wchar 外挂版本[132]="V2.8F";- y! C5 h$ E7 P& \' q& K+ l

0 O5 S- N6 e0 w6 b( ]7 N7 b, Z
+ B  {* L0 P1 F6 ]( zwchar_t* CharToWchar(const char* c)   //char*转wchar_t& p2 F) v- Y: U2 Y. b" K
{  
0 Q) r$ Z, P3 |8 O+ m  o0 c   wchar_t *m_wchar;
: l, Z" j1 u9 H' R    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);    A& Z7 a; l$ |6 [) \' {
    m_wchar=new wchar_t[len+1];  % }; u0 d1 C5 O, u5 P0 a
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  7 I0 p: J; I2 U) ~/ t
    m_wchar[len]='\0';  : w$ ]' Y8 K- d2 e. z
    return m_wchar;  + h- {" j: O# Y5 |. O
}  6 O% O5 `& U. G8 s! j: v9 y7 z
1 n# m4 b' j" h
//TCHAR 转 char
  ?, H' P( D, c7 F# P( Xchar* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)  
& `6 L$ l+ e2 K! O1 K: D{  4 S2 o" B) d' ^& y) |. j
    LPSTR pszOut = NULL;  ' G: D+ k  E  ~( Y5 u
    if (lpwszStrIn != NULL)  8 V) k" |. g2 X2 L# u
    {  
1 N7 ]  i' m* E% }9 x" U' t        int nInputStrLen = wcslen (lpwszStrIn);  * m$ _5 P5 U$ d! J5 E0 U. ?( L9 F

6 q2 p- n( P; J( G, I        // Double NULL Termination  
- L) A( Z" V6 r+ b        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;  " s+ |. s/ N! S; H$ @; p
        pszOut = new char [nOutputStrLen];  % E1 o2 P- N# ^3 k( P9 k7 z

& w! {/ c* F5 H. Z% B  t) u        if (pszOut)  * e/ Z/ |* u1 n7 s+ B- v& d8 w
        {  % m: s8 `# H- x" o. h. I) b6 }
            memset (pszOut, 0x00, nOutputStrLen);  - h+ g  P1 N1 ~( c3 g/ \/ K
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);  . E- y- }; N  e* P1 X
        }  - y" L3 x5 y+ \3 A* L0 x
    }  * ~" N3 a# K3 O& N) u" ~
    return pszOut;  
2 X* v1 y- _* a- K}  2 E5 C- e2 k8 a3 p; \# f' ?9 o3 f9 a) }

1 ~7 @: ~5 u" _/ K8 r# M: f( G
//CString转char
) i* L% I3 ?0 [4 Gvoid CString2Char(CString str, char ch[])
- E$ b. p, ]- p; A( j& P& y" P{) u9 r: d  A8 I  R+ x! f' x
        int i;* ]' u" Z. [% f
        char *tmpch;0 h7 A3 `, B3 I3 o, }+ @8 \
        int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
0 O7 F# h+ J6 a        tmpch = new char[wLen + 1];                                             //分配变量的地址大小$ i2 y! S" t* R: [! w
        WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*2 w( e7 ?+ Z$ W+ x5 |

" E7 ]! v: b3 B3 u6 ?        for(i = 0; tmpch != '\0'; i++) ch = tmpch;% K. [# C' t" N4 A0 `
        ch = '\0';
' s# l4 q: d' C$ ~* _}+ Z$ O' _! b: Y# ^: }

. G( S' f. J4 ]2 H  r& ~
# ^9 \' c% B% E3 k/ ~char *去掉char首尾空格(const char *str)
+ r% [) U5 }- n% C! k, f- K{- ~, K" b. D7 [! u) |1 {1 S
        static char line[133];
$ |/ I2 [+ ?: B, ?% b        const char *pbegin;
: v$ L8 W; d) N- r0 M/ b* t        char *p,*pend;
; |$ O) n+ n; G  f8 i        int i;& N! a6 ~  v6 b8 g

5 V5 r3 I" D1 s0 ~' b        pbegin=str;
: n2 N) h$ w3 c$ N1 P0 |        while (*pbegin==' ')
' r, y6 F" _0 x8 H) y                pbegin++;
* x! Z8 }4 M6 Q# m! a; X
( H( f" b5 ~) C9 C! l0 \: a        p=line;
8 w! K3 o$ G) P, M, n! f) R        while (*p=*pbegin){1 O6 n+ l  U# j8 P
                if ((*p==' ')&&(*(p-1)!=' '))
& ~9 M+ h9 x# n* Q! L/ W                        pend=p;5 n7 O( J# h) v* Z7 x: Y
                p++;pbegin++;        
$ z; ?6 R: q6 V! u5 {" s        }$ T* o8 f# I1 P7 _  e
        if (*(p-1)!=' ') pend=p;
# S& j; }! H3 g% V* C2 M9 q        *pend=0;
- o6 O; i) c( P8 o! z! H3 ^        return line;
2 x) x& x7 v( J, n8 D} 7 _$ e- r0 J6 j) B# Y0 x: O) x  q
+ i4 G+ j0 O5 |6 H6 q$ Y

" T8 ^) a$ o; N- @//获得网页信息 - 网页信息是中文会乱码 用英文信息
- E  f: Q) l. {/ I5 x- }4 t4 bvoid 获得网页内容判断外挂更新(const char *Url,char *html);7 H8 O3 ]7 Q) ~" H
void 获得网页内容判断外挂更新(const char *Url,char *html)( }! P& U$ n+ B8 `
{* m* {: u9 s- {/ }0 ]7 y: K
        HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);8 t, ?& o6 t* m: z7 ^2 E
        if (hSession != NULL)
/ M4 e4 T5 V+ I4 F8 O        {( g& ]  ^- i4 p4 H9 \) v, l
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);* E9 l8 C: V/ t
                if (hURL != NULL)
$ h) F; v- ~* E0 \: R9 c4 A                {! h& A+ [6 T# t3 k& {
# F! O4 m' e" Q' E) s0 c
                        char Temp[MAXBLOCKSIZE] = {0};
1 d) q7 ^% h* m" [' ~# E9 M$ N: c                        ULONG Number = 1;" L. |  ~7 I! X! f! T9 X
                                while (Number > 0). W. k% \/ ]+ a8 G5 S& Y, U$ o
                                {
4 w7 \5 T3 o2 m. Y                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);: E9 Q/ i1 E1 ~: z3 b' r; U
                                        char 判断版本[132]="QQ1821117007S33038219920103MEILEI";
1 U  {! k0 [, g' A  O  j                                        int a=strlen(Temp);8 ^# u( [8 N) ~% W% E4 v" f
                                        int b=strlen(判断版本);   ( S/ U0 H& `+ x
                                        if (a>b)
5 f8 g4 g4 k- @- l; s  O0 q; o                                        {3 F* Z0 i1 v, j" e( D' m
                                                char *p=strstr(Temp,判断版本);( j6 d9 N2 @5 n. d7 x! w
                                                if(NULL != p)/ E/ ^! Q' A/ w
                                                {         
0 T% q+ p: K) @* b/ \                                                  int wz=a-strlen(p)+1+b;//版本号起始位置" u4 q( A; a3 ~% r
                                                  int wz2=a-wz-1;if (wz2>100) wz2=100;/ B: k( b" @8 F. r( B
                                          char s1[132]="";- Y9 ^3 s$ C9 W# V! a
                                              strncpy(s1,Temp+wz,wz2);
) u5 H! |6 F( }' q; B1 G! c! ?                                                  char *p2=strstr(s1,"MEILEI");
* C- A+ i* P( L                                                  if(NULL != p2)
* n: ^8 A' Q  N6 j- x                                                  {  
  N( W, ~+ `9 I- D: a                                                          wz2= strlen(s1)-strlen(p2);6 Z! }! M( U2 Q6 H
                                              char 最新版本[132]="";* }/ F9 j& y: w3 d# \
                                                  strncpy(最新版本,Temp+wz,wz2);' S9 v2 C  n+ I6 ~1 ]' K; k
                                                      if (strcmp( 外挂版本,最新版本)==0)  T& @) a2 g/ p3 |
                                                      {
, Z$ @3 \" `( O) c( {: L+ ?& o1 |                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
2 p$ w4 \0 p. q1 I$ f                                                      }
3 y: R. N" P5 @' O! R1 R  u                                                      else
+ O. P4 I4 ~% `6 w, T                                                      {
5 Z' p5 p9 A3 W' A7 g                                                            char msg[256];, l7 V- i6 Q) t6 Q
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                    \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);) [7 R8 Q$ a0 ^
                                MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
/ @8 d8 s6 X! B& ^6 x# t                                                      }! j2 b! y3 S% \$ w* P
                                                   }' C, n7 H3 X6 F; {) @6 w# Q( A: d
                                                  goto LH;8 |8 k1 r! E' A9 ~
                                                }
3 l0 i+ ~4 v" u/ y2 @. I                                        }) W) |  O; V+ _7 N! [* i

0 k8 w3 r! `6 y6 U                                }
1 F3 J  k4 Y3 b7 o) O$ V                                LH:;+ h! A+ T; l" {; z* z( h
                        InternetCloseHandle(hURL);
8 ^% Q/ u4 i$ S; p8 m1 V                        hURL = NULL;
  c  l6 t4 w9 E7 L* B                }* I2 Z  a( |) I* K: Z) u
: X* \0 s% R( h3 P+ b9 n# r6 b
                InternetCloseHandle(hSession);. `: Y( [" M3 `2 ~
                hSession = NULL;
9 A5 S' T* @, Q1 S. b( j' y        }
  G  z! }3 w5 c8 @! Y) O0 O' B}
- G7 P" f$ K/ i" X5 N! ~, |3 x; ]# T  [! Z: t4 K  F

* g( G+ U1 J# ~! l% {5 I( R9 ~//----------------------------------------------------------------------------, g& Z9 L5 x" f$ z7 S
//  Activation Methods
0 I: }, G$ ?0 @  e8 B& I//----------------------------------------------------------------------------. B$ D. r9 V5 B. N" i
/ \  j$ R  x. \) T  {, Q2 B! ?  X0 P; b
//  Unigraphics Startup
' o+ T6 Q8 D3 W, U5 E//      This entry point activates the application at Unigraphics startup
4 B! I; b3 h3 Rextern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )2 X, b! g, F' ~: B8 o8 Y
{, ]2 z; M+ V1 @1 q4 Y
    /* Initialize the API environment */
2 ?$ t( [, t- s! g    int errorCode = UF_initialize();7 {5 {2 U; `$ O5 R

. ]3 B4 ^2 z( k& d    if ( 0 == errorCode )
9 a, N1 l' M6 v$ O7 s0 x% e    {9 g. ]: c1 R5 U2 |
        /* TODO: Add your application code here */
6 q, `4 A& P( g: v$ ]: f% D/ v1 o4 B7 N( `' G

3 t8 _- E; ~( ~& N4 @% e' B7 a                //百度云公开链接 通过修改txt文件标题
. a0 Q6 m% e3 I) v% W% i: N1 L                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt
8 p3 _$ @. ]; W: u
( P  \2 S% L) o) w' a8 U6 s3 d  B/ `5 R, o- _
                char 网页文件[256]="C:\\Windows\\版本.html.bat";  9 z" `4 g: Z: P* v
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
/ O# w% {, s7 `3 _# E               
$ n) O( F# \9 o3 Q6 W* D/ A        2 L. b: b$ G7 l8 }0 J
, y& A% \4 R/ w+ A# w: @

4 u) Q# V1 r- ]" O* z) o. c
/ h6 y, f$ {3 o/ a! w        /* Terminate the API environment */1 |# i6 U! V: R
        errorCode = UF_terminate();
0 ~; S$ O; T- z& m    }
; d" a- W- Y. H" A8 m% o8 E1 f. G4 ~3 h
    /* Print out any error messages */
4 I  D. @8 R1 @return;
3 b# ~! [2 D, J8 r# b}& N1 B- v% m4 q6 n" n
* ~/ b! A& d8 z+ A7 Z1 p
//----------------------------------------------------------------------------* D. y* i& j  M6 W. j! A7 [! @
//  Utilities- N$ O! \. |4 \9 a0 f( m
//----------------------------------------------------------------------------7 V, u6 I6 }2 G# |2 P: E) R

1 S% o3 F) n; R: _' Y// Unload Handler& C9 {5 a  ~) N5 z
//     This function specifies when to unload your application from Unigraphics.6 M' k; n$ A& @& j* h- |
//     If your application registers a callback (from a MenuScript item or a/ o7 X# H; g, J) a
//     User Defined Object for example), this function MUST return3 M$ e5 X8 D2 ]+ m0 F7 i) k/ z
//     "UF_UNLOAD_UG_TERMINATE".
' m- P. K9 t# _8 `extern "C" int ufusr_ask_unload( void )
% H8 t7 P5 _$ k{4 _9 c% X9 {2 p1 \( |
    return( UF_UNLOAD_UG_TERMINATE );
$ w: W2 J5 I% i}1 Q2 t2 Q5 b8 B0 U2 [1 l: |' P
: t1 y+ V: U" t' D" Y* a' f
2 M( F, I# e' N6 w" N
启动UG就启动dll的方法( |. k; |+ ?6 ]9 E$ S

2 k5 T' }- h& v5 b8 |2 `方法1.添加环境变量7 }5 X! ^/ l: [" S4 _3 S
USER_STARTUP=D:\MEILEI.DLL1 @0 e8 ]( |$ [2 r1 }
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了# V9 U0 Q* S6 J- y6 B4 g
  u; H9 _$ u; a6 v, r
方法2.在代码里添加(可以执行n个dll): ^- J, t0 A( U% b8 h3 L& T
UG会自动加载 startup目录里入口点是ufsta的dll; C4 P: w: M  R

4 f" e: V. g$ _3 A; j所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
2 T5 g1 S& \% }9 {9 G; E7 F1 T参考c++代码  ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了
( l2 f- k' ~8 m
4 {" h. U' u; Z: Y+ p菜单参考  NXOpen_meilei.men.txt8 M/ p( F/ a& ?" O" x* k

0 G. n! Q5 Z6 G! E7 Z) `% n* XDDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录: _4 S6 F2 A/ Z/ a4 B- Z
启动UG就启动dll的方法源代码下载6 J" |9 B: F( ]! Y6 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二次开发专题模块培训报名开始啦

    我知道了