15757753770 发表于 2016-12-11 15:45:38

通过网络判断外挂是否更新

本帖最后由 15757753770 于 2016-12-11 15:51 编辑

如果你想每次运行ug 判断 ug外挂是否更新


原理:
自己去搞个网站 或者网页 什么的只要网页内容修改版本时 网页地址不变就行了
然后启动ug时启动一个dll    dll内容就是获得网页上的 版本号 进行判断


被启动的dll程序源代码,如下

//Include files
#include <uf.h>
#include <uf_exit.h>
#include <uf_ui.h>
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
#      include <strstream>
#   include <iostream>
      using std::ostrstream;
      using std::endl;      
      using std::ends;
      using std::cerr;
#else
#      include <strstream.h>
#   include <iostream.h>
#endif
#include <string.h>
#include <afx.h>
#include <windows.h>
#define MAXBLOCKSIZE 1024
#include <wininet.h> //网络
#pragma comment(lib, "wininet.lib")//网络

char 外挂版本="V2.8F";


wchar_t* CharToWchar(const char* c)   //char*转wchar_t
{
   wchar_t *m_wchar;
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
    m_wchar=new wchar_t;
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
    m_wchar='\0';
    return m_wchar;
}

//TCHAR 转 char
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)
{
    LPSTR pszOut = NULL;
    if (lpwszStrIn != NULL)
    {
      int nInputStrLen = wcslen (lpwszStrIn);

      // Double NULL Termination
      int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
      pszOut = new char ;

      if (pszOut)
      {
            memset (pszOut, 0x00, nOutputStrLen);
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
      }
    }
    return pszOut;
}


//CString转char
void CString2Char(CString str, char ch[])
{
      int i;
      char *tmpch;
      int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度
      tmpch = new char;                                             //分配变量的地址大小
      WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char*

      for(i = 0; tmpch != '\0'; i++) ch = tmpch;
      ch = '\0';
}


char *去掉char首尾空格(const char *str)
{
      static char line;
      const char *pbegin;
      char *p,*pend;
      int i;

      pbegin=str;
      while (*pbegin==' ')
                pbegin++;

      p=line;
      while (*p=*pbegin){
                if ((*p==' ')&&(*(p-1)!=' '))
                        pend=p;
                p++;pbegin++;      
      }
      if (*(p-1)!=' ') pend=p;
      *pend=0;
      return line;
}


//获得网页信息 - 网页信息是中文会乱码 用英文信息
void 获得网页内容判断外挂更新(const char *Url,char *html);
void 获得网页内容判断外挂更新(const char *Url,char *html)
{
      HINTERNET hSession = InternetOpen(CharToWchar("zwt"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
      if (hSession != NULL)
      {
                HINTERNET hURL = InternetOpenUrl(hSession, CharToWchar(Url), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
                if (hURL != NULL)
                {

                        char Temp = {0};
                        ULONG Number = 1;
                              while (Number > 0)
                              {
                                        InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
                                        char 判断版本="QQ1821117007S33038219920103MEILEI";
                                        int a=strlen(Temp);
                                        int b=strlen(判断版本);   
                                        if (a>b)
                                        {
                                                char *p=strstr(Temp,判断版本);
                                                if(NULL != p)
                                                {         
                                                int wz=a-strlen(p)+1+b;//版本号起始位置
                                                int wz2=a-wz-1;if (wz2>100) wz2=100;
                                          char s1="";
                                              strncpy(s1,Temp+wz,wz2);
                                                char *p2=strstr(s1,"MEILEI");
                                                if(NULL != p2)
                                                {
                                                          wz2= strlen(s1)-strlen(p2);
                                              char 最新版本="";
                                                strncpy(最新版本,Temp+wz,wz2);
                                                      if (strcmp( 外挂版本,最新版本)==0)
                                                      {
                                                            //MessageBox(NULL,_T("此外挂是最新版本"),_T("梅雷制作"), MB_OKCANCEL );
                                                      }
                                                      else
                                                      {
                                                            char msg;
                                                            sprintf(msg, "乐清外挂:梅雷制作 - QQ:1821117007                  \n当前版本:%s\n最新版本:%s",外挂版本,最新版本);
                              MessageBox(NULL,CharToWchar(msg),_T("梅雷提示"), MB_OKCANCEL );
                                                      }
                                                   }
                                                goto LH;
                                                }
                                        }

                              }
                              LH:;
                        InternetCloseHandle(hURL);
                        hURL = NULL;
                }

                InternetCloseHandle(hSession);
                hSession = NULL;
      }
}


//----------------------------------------------------------------------------
//Activation Methods
//----------------------------------------------------------------------------

//Unigraphics Startup
//      This entry point activates the application at Unigraphics startup
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    int errorCode = UF_initialize();

    if ( 0 == errorCode )
    {
      /* TODO: Add your application code here */


                //百度云公开链接 通过修改txt文件标题
                //0.0用于网页判断乐清虹桥外挂版本,验效码QQ1821117007S33038219920103MEILEI=V1.6FMEILEI= MEILEI= MEILEI.txt


                char 网页文件="C:\\Windows\\版本.html.bat";
                获得网页内容判断外挂更新("http://pan.baidu.com/s/1slw24Vz",网页文件);
               
      



      /* Terminate the API environment */
      errorCode = UF_terminate();
    }

    /* Print out any error messages */
return;
}

//----------------------------------------------------------------------------
//Utilities
//----------------------------------------------------------------------------

// Unload Handler
//   This function specifies when to unload your application from Unigraphics.
//   If your application registers a callback (from a MenuScript item or a
//   User Defined Object for example), this function MUST return
//   "UF_UNLOAD_UG_TERMINATE".
extern "C" int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}


启动UG就启动dll的方法

方法1.添加环境变量
USER_STARTUP=D:\MEILEI.DLL
但是只能运行一个dll而且别人也使用这个环境变量那么久不方便了

方法2.在代码里添加(可以执行n个dll)
UG会自动加载 startup目录里入口点是ufsta的dll

所以在ufsta入口使用UF_MB_add_actions函数可以在UG启动的时候自动启动一个或多个菜单里的命令
参考c++代码ufsta.cpp.txt ,用此文件代码生成dll放startup目录 ug就会自动加载了

菜单参考NXOpen_meilei.men.txt

DDD.DLL代码任意(当然也可以参考DDD.cpp.txt)吧dll也放startup目录
启动UG就启动dll的方法源代码下载

周钢 发表于 2016-12-23 19:47:22

支持下梅大师!
页: [1]
查看完整版本: 通过网络判断外挂是否更新