代码
//
启动Shell
OSVERSIONINFOEX OSVerInfo;
OSVerInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
if ( ! GetVersionEx((OSVERSIONINFO * ) & OSVerInfo))
{
OSVerInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx((OSVERSIONINFO * ) & OSVerInfo);
}
TCHAR atszVerb[ 16 ];
if (OSVerInfo.dwMajorVersion >= 6 ) // Vista 以上
{
_tcscpy(atszVerb,_T( " runas " ));
}
else
{
_tcscpy(atszVerb,_T( "" ));
}
USES_CONVERSION;
SHELLEXECUTEINFO se ;
memset( & se, 0 , sizeof (SHELLEXECUTEINFO));
se.cbSize = sizeof (SHELLEXECUTEINFO);
se.lpVerb = atszVerb;
se.lpFile = W2T(m_bstrShellExe);
se.lpParameters = atszBootCmd;
se.nShow = SW_HIDE ;
se.fMask = SEE_MASK_NOCLOSEPROCESS ;
if (ShellExecuteEx( & se))
{
// 启动成功
}
else
{
// 启动失败,可能UAC没有获得用户许可
}
OSVERSIONINFOEX OSVerInfo;
OSVerInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
if ( ! GetVersionEx((OSVERSIONINFO * ) & OSVerInfo))
{
OSVerInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx((OSVERSIONINFO * ) & OSVerInfo);
}
TCHAR atszVerb[ 16 ];
if (OSVerInfo.dwMajorVersion >= 6 ) // Vista 以上
{
_tcscpy(atszVerb,_T( " runas " ));
}
else
{
_tcscpy(atszVerb,_T( "" ));
}
USES_CONVERSION;
SHELLEXECUTEINFO se ;
memset( & se, 0 , sizeof (SHELLEXECUTEINFO));
se.cbSize = sizeof (SHELLEXECUTEINFO);
se.lpVerb = atszVerb;
se.lpFile = W2T(m_bstrShellExe);
se.lpParameters = atszBootCmd;
se.nShow = SW_HIDE ;
se.fMask = SEE_MASK_NOCLOSEPROCESS ;
if (ShellExecuteEx( & se))
{
// 启动成功
}
else
{
// 启动失败,可能UAC没有获得用户许可
}
// 进程权限不同 通讯
typedef BOOL (WINAPI FAR *ChangeWindowMessageFilter_PROC)(UINT,DWORD);
ChangeWindowMessageFilter_PROC m_pfnChangeWindowMessageFilter;
m_pfnChangeWindowMessageFilter = (ChangeWindowMessageFilter_PROC)::GetProcAddress (::GetModuleHandle(_T("USER32")),"ChangeWindowMessageFilter");
if (m_pfnChangeWindowMessageFilter)
{
m_pfnChangeWindowMessageFilter(WM_COPYDATA, 1/*Add*/);
}
ChangeWindowMessageFilter_PROC m_pfnChangeWindowMessageFilter;
m_pfnChangeWindowMessageFilter = (ChangeWindowMessageFilter_PROC)::GetProcAddress (::GetModuleHandle(_T("USER32")),"ChangeWindowMessageFilter");
if (m_pfnChangeWindowMessageFilter)
{
m_pfnChangeWindowMessageFilter(WM_COPYDATA, 1/*Add*/);
}