通过网络判断外挂是否更新
本帖最后由 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的方法源代码下载
支持下梅大师!
页:
[1]