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

📄 gpmis.cpp

📁 我上载了那么多怎么都说已经有上载的啦
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// App command to run the dialog
void CGPMISApp::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CGPMISApp message handlers
#define PEEPER_ALONE		_T("PEEPER_ALONE_FILEMAPPING_LDF_8110")
void CGPMISApp::SingleInstance()
{
	//保持只有一个服务在运行.....
	//使用了文件映像的方法,存储当前Process ID到内存中,这样就可以通过这个ID来退出这个进程了.
	m_hProcessID = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, TRUE, PEEPER_ALONE);
	m_lpData = NULL;
	if(m_hProcessID != NULL) // 已经有服务在运行了.
	{
		m_lpData = (LPBYTE)::MapViewOfFile(m_hProcessID, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD));
		DWORD dwID = 0;
		if(m_lpData != NULL)
		{
			dwID = *((DWORD *)(m_lpData)); // 得到在运行的进行ID
		}
		::UnmapViewOfFile(m_lpData);
		::CloseHandle(m_hProcessID);
		if(dwID != 0) // 通过ID来退出进程
		{
			HANDLE hHandle = NULL;
			hHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID);
			::TerminateProcess(hHandle, 0);
			::WaitForSingleObject(hHandle, INFINITE);
			::CloseHandle(hHandle);
		}
	}
	m_hProcessID = ::CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(DWORD), PEEPER_ALONE);
	if(m_hProcessID != NULL) // 创建新的文件映象,保存本进程的ID
	{
		m_lpData = (LPBYTE)::MapViewOfFile(m_hProcessID, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD));
		if(m_lpData != NULL)
		{
			DWORD dwID = ::GetCurrentProcessId();
			memcpy(m_lpData, &dwID, sizeof(DWORD));
		}
	}
}


/////////////////////////////////////////////////////////////////////////////
// My Functions
BOOL CGPMISApp::WriteRegistryValue(CString strSubKey,CString strName,LPCTSTR lpszValue,ULONG lType)
{
	OSVERSIONINFO m_osvi;
	HKEY hkTarget = NULL;

	m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (GetVersionEx(&m_osvi) == FALSE)
		return FALSE;

    if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
	{
	}
    else if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
	{
	}
	else
	{
        MessageBox(NULL,"","错误",MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	LONG lRet = RegOpenKeyEx(m_hkey,         // handle of open key
					         m_strRegistryKey+strSubKey,  // address of name of subkey to open
					         0,   // reserved
						     KEY_ALL_ACCESS, // security access mask
					         &hkTarget    // address of handle of open key
					        );
	if( lRet != ERROR_SUCCESS )
	{
		char szClass[64];

		DWORD dwDisposition;
		lRet = RegCreateKeyEx(m_hkey,         // handle of open key
					          m_strRegistryKey+strSubKey,  // address of name of subkey to open
							  0,   // reserved
		 				      szClass,
	 					      REG_OPTION_NON_VOLATILE,
						      KEY_ALL_ACCESS, // security access mask
							  NULL,
							  &hkTarget,    // address of handle of open key
							  &dwDisposition	
							  );
	}
	if (ERROR_SUCCESS != lRet )
		return false;
	else
	{
       RegSetValueEx(hkTarget,           // handle to key to set value for
					 strName, // name of the value to set
			 	     0,      // reserved
				     lType,        // flag for value type
					 (CONST BYTE *)lpszValue,
				     strlen(lpszValue)         // size of value data
					);
	  RegCloseKey(hkTarget);
	}

	return true;
}

BOOL CGPMISApp::GetRegistryValue(CString strSubKey,CString strName,CString& strValue,CString strDefaultValue,ULONG lType)
{
	OSVERSIONINFO m_osvi;
	HKEY hkTarget = NULL;
	unsigned char szValue[256];

	m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (GetVersionEx(&m_osvi) == FALSE)
		return FALSE;

	strValue = strDefaultValue;

    if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
	{
	}
    else if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
	{
	}
	else
	{
        MessageBox(NULL,"","错误",MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	LONG lRet = RegOpenKeyEx(m_hkey,         // handle of open key
					         m_strRegistryKey+strSubKey,  // address of name of subkey to open
					         0,   // reserved
						     KEY_ALL_ACCESS, // security access mask
					         &hkTarget    // address of handle of open key
					        );
	if( lRet == ERROR_SUCCESS )
	{
		ULONG lcbValue =256;
		lRet = RegQueryValueEx(hkTarget, strName, 0, &lType, &szValue[0], &lcbValue);
		
		if( lRet == ERROR_SUCCESS )
			strValue.Format("%s",szValue);
	    RegCloseKey(hkTarget);
	}

	if( lRet == ERROR_SUCCESS )
		return true;
	else 
		return false;
}

BOOL CGPMISApp::GetRegistryValue(CString strSubKey,CString strName,BYTE* pbValue,CString strDefaultValue)
{
	OSVERSIONINFO m_osvi;
	HKEY hkTarget = NULL;
	unsigned char szValue[256];
	ULONG lType = REG_BINARY;

	memcpy( pbValue, strDefaultValue, 256 );

	m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (GetVersionEx(&m_osvi) == FALSE)
		return FALSE;

	memcpy( pbValue, (char*)(LPCTSTR)strDefaultValue, strDefaultValue.GetLength() );

    if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
	{
	}
    else if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
	{
	}
	else
	{
        MessageBox(NULL,"","错误",MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	LONG lRet = RegOpenKeyEx(m_hkey,         // handle of open key
					         m_strRegistryKey+strSubKey,  // address of name of subkey to open
					         0,   // reserved
						     KEY_ALL_ACCESS, // security access mask
					         &hkTarget    // address of handle of open key
					        );
	if( lRet == ERROR_SUCCESS )
	{
		ULONG lcbValue =256;
		lRet = RegQueryValueEx(hkTarget, strName, 0, &lType, &szValue[0], &lcbValue);
		
		if( lRet == ERROR_SUCCESS )
			memcpy( pbValue, szValue, 256 );
	    RegCloseKey(hkTarget);
	}

	if( lRet == ERROR_SUCCESS )
		return true;
	else 
		return false;
}

// Name:   GetDataBaseStr
// Variable: 
//	 None
// Return:
//   None
// Remark:
//   get database string 
void CGPMISApp::GetDataBaseStr()
{
	CString strDatabase;
	BYTE byDatabase[257];	// QWM Add
	BYTE bySecrets[257];
	CString strDefault;

	GetRegistryValue( "Parameters","DatabaseStr1",byDatabase,DEFAULT_DB_STR); 
	if ( stricmp( (char*)byDatabase, DEFAULT_DB_STR ) != 0 ) 
	{
		memcpy( bySecrets, byDatabase, 256 );
	   // quick, get our data back!
		m_pBlowfish->Decrypt(bySecrets, 256);
		strDatabase.Format("%s",bySecrets);
	}
	else
		strDatabase.Format("%s",byDatabase);

	strDatabase.MakeLower();
	m_strDSN = strDatabase.Left(strDatabase.Find("uid")-1);
	m_strUID = strDatabase.Mid(strDatabase.Find("uid")+4,strDatabase.Find("pwd")-strDatabase.Find("uid")-5);
	m_strPWD = strDatabase.Right(strDatabase.GetLength()-strDatabase.Find("pwd")-4);

}

CString CGPMISApp::GetDSN()
{
	return m_strDSN;
}

CString CGPMISApp::GetUID()
{
	return m_strUID;
}

CString CGPMISApp::GetPWD()
{
	return m_strPWD;
}

// Name:   GetDBType
// Variable: 
//	 None
// Return:
//   int DBtype-0:SQL Server; 1-Access
// Remark:
//   get database type 
int CGPMISApp::GetDBType()
{
	CString strDBType;
	int nDBType  = 0;

	GetRegistryValue("Parameters","DatabaseType",strDBType,DEFAULT_DB_TYPE);

	strDBType.MakeLower();

	if( strDBType.Find("sql server") >= 0 )
		nDBType = SQLSERVER_DB;
	if( strDBType.Find("ms access") >= 0 )
		nDBType = MSACCESS_DB;

	return nDBType;
}


BOOL CGPMISApp::ConnectDB()
{
	CString strDSN = GetDSN();
	CString strUID = GetUID();
	CString strPWD = GetPWD();

	m_pConnect.CreateInstance(__uuidof(Connection));
	if( m_pConnect == NULL)
	{
		MessageBox(NULL,"Data Access 出错!请安装 Data Access。","错误",MB_OK|MB_ICONERROR);
		return FALSE;
	}
	try
	{
		m_pConnect->Mode = adModeReadWrite;
		m_pConnect->Open((_bstr_t)strDSN, (_bstr_t)strUID, (_bstr_t)strPWD, adOpenUnspecified); // if ado1.0 the forth parameter not need);
	}
	catch( _com_error& ce )
	{
		_bstr_t bstrDescription( ce.Description() );
		_bstr_t bstrSource( ce.Source() );
		TRACE( "Description : %s\n", (LPCTSTR)bstrDescription );
		TRACE( "Source : %s\n", (LPCTSTR)bstrSource );
		m_pConnect = NULL;
		return FALSE;
	}
	return TRUE;

}

CString CGPMISApp::GetVersionInformation(LPCTSTR lpszModuleName)
{
	CString strResult;
	BYTE		*pDataBlock = NULL;
	DWORD FAR	*translation;
	DWORD FAR	*buffer;     
	DWORD		dwHandle;
	UINT		nBytes;
	
	// WinAPI wants non-const arguments
	LPTSTR lpszExeName = const_cast<LPTSTR>(lpszModuleName); 

	char szName[512];       // StringFileInfo data block.

	// Get the actual size of the information block.
	nBytes = (UINT)GetFileVersionInfoSize(lpszExeName, &dwHandle);

	if (nBytes)
	{
		pDataBlock = new BYTE[nBytes];

		// Get the actual block for the version information
		if (GetFileVersionInfo(lpszExeName, dwHandle, nBytes, pDataBlock))
		{
			if (VerQueryValue(pDataBlock, "\\VarFileInfo\\Translation", (VOID FAR * FAR *)&translation, (UINT FAR *)&nBytes)) 
			{
				// The File Version for this application
				wsprintf(szName, "\\StringFileInfo\\%04x%04x\\PrivateBuild", LOWORD(*translation), HIWORD(*translation));

				if (VerQueryValue(pDataBlock, szName, (VOID FAR * FAR *)&buffer, (UINT FAR *)&nBytes)) 
				{
					strResult.Format((char far *)buffer);
				}
			}
			else 
			{
				// sorry ...
			}
		}
		if (pDataBlock)
			delete[] pDataBlock;
	}
	if( strResult == "" )
		strResult = "1.00";
	return strResult;
}

⌨️ 快捷键说明

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