📄 gpmis.cpp
字号:
// 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 + -