⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 easysysdlg.cpp

📁 使用VC编写的一个可以将驱动开发的编译整合到VC的IDE环境的一个程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	CString strDDKEnvironmentName = m_strDDKVer + _T("BASE");
	BOOL bRet = FALSE;
	//set user's ddk Environment
	HKEY hKeyEnvironment;
	DWORD dwType = REG_SZ;
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, ENVIRONMENT_PATH_USER, 0, KEY_WRITE, &hKeyEnvironment))
	{
		if ( ERROR_SUCCESS == RegSetValueEx(hKeyEnvironment,strDDKEnvironmentName,0,dwType,(LPBYTE)strDDKEnvironmentValue.GetBuffer(0),strDDKEnvironmentValue.GetLength()) )
		{
			bRet = TRUE;
			::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("environment"));
		}
		RegCloseKey(hKeyEnvironment);
	}
	return bRet;
}

int CEasySYSDlg::CreateProject()
{
	CString strPrjBaseDir = m_strPrjPath;
	if ( strPrjBaseDir.Right(1) !=  _T("\\") )
	{
		strPrjBaseDir +=  _T("\\");
	}
	strPrjBaseDir += m_strPrjName;
	if (!CreateDirectory(strPrjBaseDir, NULL))
	{
		if (ERROR_ALREADY_EXISTS != GetLastError())
		{
			MessageBox(_T("Can not create project directory."),
				DIALOG_CAPTION, MB_ICONSTOP);
			return -1;
		}
	}
	strPrjBaseDir += _T("\\");

	// upper case project name
	CString strProjectNameU = m_strPrjName;
	strProjectNameU.MakeUpper();

	// upper case first character of project name, not needed?
	CString strProjectNameA = m_strPrjName;
	strProjectNameA.MakeLower();
	strProjectNameA.SetAt(0, toupper(m_strPrjName[0]));

	// frist create .dsw
	CString strDSWFileName = strPrjBaseDir + m_strPrjName;
	strDSWFileName += _T(".dsw");
	
	CFileFind fFind;
	if (fFind.FindFile(strDSWFileName))
	{
		// project already exist
		DWORD ret = MessageBox(_T("Project files already exist, overwrite?"),
			DIALOG_CAPTION, MB_YESNO|MB_ICONQUESTION);
		if ( ret == IDNO )
		{
			return -3;
		}
	}

	CFile file;
	CString strDSWFileContent = LoadText(MAKEINTRESOURCE(IDR_DSW));

	strDSWFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	if (!file.Open(strDSWFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}
	file.Write(strDSWFileContent, (strDSWFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	/*
	// get softice installed directory
	CString strNMsym = GetSoftICEInstallDir();
	if ( !strNMsym.IsEmpty() )
	{
		if ( strNMsym.Right(1) != "\\" ) strNMsym += "\\";
		strNMsym += "nmsym.exe";
	}
	strNMsym = "$(DRIVERWORKS)\\bin\\nmsym.exe";
	*/

	// 2nd, create .dsp
	int iProjectCount = 0;
	CString strDSPFileName = strPrjBaseDir + m_strPrjName;
	strDSPFileName += _T(".dsp");
	
	if (!file.Open(strDSPFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}
	CString strDSPFileContent;
	strDSPFileContent = LoadText(MAKEINTRESOURCE(IDR_DSP));
	CString strProjectConfigNames;
	CString strProjectConfigs;
	CString strProjectConfigName2s;

	int nIndex;
	int i = 0;
	//count for the project,  it's useful in the first project and last project
	while( (nIndex = GetCheckItem(TARGET_OS, i)) != -1)
	{
		iProjectCount++;
		//create $(PROJECT_CONFIG_NAME) in dsp
		CString strProjectConfigName = LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG_NAME));
		strProjectConfigName.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
		strProjectConfigNames += strProjectConfigName;

		//create $(PROJECT_CONFIG) in dsp
		CString strProjectConfig = LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG));
		strProjectConfig.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
		
		//when the ddk is same as target os, such as WNETWNET, convert to WNET
		if (m_strDDKVer.CollateNoCase(g_options[nIndex].szInter) == 0)
		{
			strProjectConfig.Replace(_T("$(DDK_VER)"), _T(""));
		}
		else
		{
			strProjectConfig.Replace(_T("$(DDK_VER)"), m_strDDKVer);
		}
		
		if (iProjectCount == 1)
		{
			strProjectConfig.Replace(_T("$(IF_FLAG)"), _T("!IF"));
			strDSPFileContent.Replace(_T("$(DEFAULT_TARGET_OS)"), g_options[nIndex].szInter);
		}
		else
		{
			strProjectConfig.Replace(_T("$(IF_FLAG)"), _T("!ELSEIF"));
		}
		if (iProjectCount == m_nTosNum)
		{
			strProjectConfig.Replace(_T("$(ENDIF_FLAG)"), _T("!ENDIF"));
		}
		else
		{
			strProjectConfig.Replace(_T("$(ENDIF_FLAG)"), _T(""));
		}
		strProjectConfigs += strProjectConfig;
		
		//create $(PROJECT_CONFIG_NAME_2)
		CString strProjectConfigName2 =  LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG_NAME_2));
		strProjectConfigName2.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
		strProjectConfigName2s += strProjectConfigName2;

		//
		i++;

	}
	strDSPFileContent.Replace(_T("$(PROJECT_CONFIG_NAME)"), strProjectConfigNames);
	strDSPFileContent.Replace(_T("$(PROJECT_CONFIG)"), strProjectConfigs);
	strDSPFileContent.Replace(_T("$(PROJECT_CONFIG_NAME_2)"), strProjectConfigName2s);
	//ReplaceInString(strDSPFileContent, "$(SOFTICE_FILE_PATH)", strNMsym);
	strDSPFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);

	file.Write(strDSPFileContent, (strDSPFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();
	
	
	// 3rd, create .c file
	CString strCFileName = strPrjBaseDir + m_strPrjName;
	strCFileName += _T(".c");
	if (!file.Open(strCFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}

	CString strCFileContent;
	strCFileContent = LoadText(MAKEINTRESOURCE(IDR_CFILE));
	strCFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	strCFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
	strCFileContent.Replace(_T("$(PROJECT_NAME_A)"), strProjectNameA);
	
	file.Write(strCFileContent, (strCFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	// 4th, create .h file
	CString strHFileName = strPrjBaseDir + m_strPrjName;
	strHFileName += _T(".h");
	if (!file.Open(strHFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}

	CString strHFileContent;
	strHFileContent = LoadText(MAKEINTRESOURCE(IDR_HFILE));
	strHFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	strHFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
	strCFileContent.Replace(_T("$(PROJECT_NAME_A)"), strProjectNameA);
	
	file.Write(strHFileContent, (strHFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	// 5th, create readme.txt
	CString strReadmeFileName = strPrjBaseDir + _T("readme.txt");
	if (!file.Open(strReadmeFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}

	CString strReadmeFileContent;
	strReadmeFileContent = LoadText(MAKEINTRESOURCE(IDR_README));
	strReadmeFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	strReadmeFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
	
	file.Write(strReadmeFileContent, (strReadmeFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	// 6th, create recoures
	CString strSourcesFileName = strPrjBaseDir + _T("sources");
	if (!file.Open(strSourcesFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}

	CString strSourcesFileContent;
	strSourcesFileContent = LoadText(MAKEINTRESOURCE(IDR_SOURCES));
	strSourcesFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	
	file.Write(strSourcesFileContent, (strSourcesFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();
	
	// 7th, create makefile
	CString strMakefileFileName = strPrjBaseDir + _T("makefile");
	if (!file.Open(strMakefileFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}

	CString strMakefileFileContent;
	strMakefileFileContent = LoadText(MAKEINTRESOURCE(IDR_MAKEFILE));
	strMakefileFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	
	file.Write(strMakefileFileContent, (strMakefileFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	// 8th, create ddkbuild.bat
	CString strDDKBuildFileName = strPrjBaseDir + _T("ddkbuild.bat");
	if (!file.Open(strDDKBuildFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}
	
	CString strDDKBuildFileContent;
	strDDKBuildFileContent = LoadText(MAKEINTRESOURCE(IDR_DDKBUILD_BAT));
	strDDKBuildFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
	
	file.Write(strDDKBuildFileContent, (strDDKBuildFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	// 9th, create dbghelp.h file
	strHFileName = strPrjBaseDir + _T("dbghelp.h");
	if (!file.Open(strHFileName, CFile::modeCreate | CFile::modeWrite))
	{
		return -2;
	}
	

	strHFileContent = LoadText(MAKEINTRESOURCE(IDR_DBGHELP_H_FILE));
	
	file.Write(strHFileContent, (strHFileContent.GetLength() ) * sizeof(TCHAR));
	file.Close();

	return 0;
}

CString LoadText(LPCTSTR lpName)
{
	CString strText;
	HRSRC hRsrc;
	
	hRsrc = FindResource(AfxGetInstanceHandle(), lpName, RT_HTML);
	HGLOBAL hMem = LoadResource(AfxGetInstanceHandle(), hRsrc);
	DWORD dwSize = SizeofResource(AfxGetInstanceHandle(), hRsrc);
	TCHAR *src = (TCHAR*)LockResource(hMem);
	strText.Format(_T("%s"),src);
	return strText;
}

BOOL CEasySYSDlg::SavePathToReg()
{
	BOOL bRet = FALSE;
	HKEY hkey;
	DWORD dwDisposition;
	if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER, CONFIG_PATH, NULL, NULL, REG_OPTION_NON_VOLATILE, 
				KEY_ALL_ACCESS, NULL, &hkey, &dwDisposition))
	{
		DWORD dwType = REG_SZ;
		//save value
		if ( ERROR_SUCCESS == RegSetValueEx(hkey,CONFIG_NAME_LOCATION,NULL,dwType,(const BYTE *)m_strPrjPath.GetBuffer(0),m_strPrjPath.GetLength()) )
		{
			bRet = TRUE;
		}
		RegCloseKey(hkey);
	}
	return bRet;

}

BOOL CEasySYSDlg::ReadPathFromReg()
{
	BOOL bRet = FALSE;
	HKEY hkey;
	if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, CONFIG_PATH, NULL, KEY_QUERY_VALUE, &hkey))
	{
		DWORD dwType = REG_SZ;
		BYTE bufLocation[MAX_PATH];
		DWORD dwBufLen = MAX_PATH;
		//save value
		if (ERROR_SUCCESS == RegQueryValueEx(hkey,CONFIG_NAME_LOCATION,NULL,&dwType,(LPBYTE)bufLocation,&dwBufLen))
		{
			bRet = TRUE;
			m_strPrjPath = bufLocation;
		}
		RegCloseKey(hkey);
	}
	return bRet;
}

void CEasySYSDlg::OnSelchangeDdkVersion() 
{
	// TODO: Add your control notification handler code here
	int nIndex = ((CComboBox *)GetDlgItem(IDC_DDK_VERSION))->GetCurSel();
	int nOptionID = ((CComboBox *)GetDlgItem(IDC_DDK_VERSION))->GetItemData(nIndex);
	
	if (nOptionID == DDK_W2K)
	{
		((CButton*)GetDlgItem(IDC_TOS_W2K))->SetCheck(1);
		((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(FALSE);
	}
	else if(nOptionID == DDK_WXP)
	{
		((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(TRUE);
		((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(FALSE);
	}
	else if (nOptionID == DDK_W2K3)
	{
		((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(TRUE);
		((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(TRUE);
	}
}

int CEasySYSDlg::GetDDKLoaction(CString &strDDKLocation)
{
	HKEY hKey;
	DWORD dwIndex = 0;
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, WINDDK_PATH, 0, KEY_ENUMERATE_SUB_KEYS, &hKey))
	{
		TCHAR bufName[MAX_PATH];
		while(RegEnumKey(hKey,dwIndex,bufName,MAX_PATH) != ERROR_NO_MORE_ITEMS)
		{
			HKEY hSubKey;
			if (ERROR_SUCCESS == RegOpenKeyEx(hKey, bufName, 0, KEY_READ, &hSubKey))
			{
				DWORD dwType = REG_SZ;
				DWORD dwBufLen = MAX_PATH;
				TCHAR bufDDKPath[MAX_PATH];
				if (ERROR_SUCCESS == RegQueryValueEx(hSubKey,_T("LFNDirectory"),NULL,&dwType,(LPBYTE)bufDDKPath,&dwBufLen))
				{
					strDDKLocation = bufDDKPath;
				}
				RegCloseKey(hSubKey);
			}
			dwIndex++;
		}
		RegCloseKey(hKey);
	}
	return dwIndex;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -