15,979
社区成员
发帖
与我相关
我的任务
分享
//安装屏保
//1.取出当前运行EXE的完整路径
//2.复制到系统目录下(复制后的扩展名为.scr)
//3.调用 rundll32.exe 安装屏保
//注:在Vista/Win7等系统需要管理员权限
BOOL SetupScreen(void)
{
CString strExeFile;
::GetModuleFileName(NULL,strExeFile.GetBuffer(MAX_PATH),MAX_PATH);
strExeFile.ReleaseBuffer();
CString strSysDirectory;
::GetSystemDirectory (strSysDirectory.GetBuffer(MAX_PATH),MAX_PATH);
strSysDirectory.ReleaseBuffer();
if(strSysDirectory.Right(1)!=_T("\\"))
strSysDirectory+=_T("\\");
CString strScrFile=strExeFile.Mid(strExeFile.ReverseFind('\\')+1);
strScrFile=strScrFile.Left(strScrFile.ReverseFind('.'));
strScrFile=strSysDirectory+strScrFile+_T(".scr");
CString strCmd;
strCmd.Format(_T("rundll32.exe desk.cpl,InstallScreenSaver \"%s\""),strScrFile);
if(CopyFile(strExeFile,strScrFile,FALSE)){
WinExecEx(strCmd);
return TRUE;
}else{
AfxMessageBox(_T("屏幕保护安装失败,文件正在使用或没有写入权限"),MB_ICONHAND);
return FALSE;
}
}
UINT WinExecEx(CString strCmd)
{
#ifdef _UNICODE
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,strCmd,-1,NULL,0,NULL,FALSE);
char *psText;
psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,strCmd,-1,psText,dwNum,NULL,FALSE);
UINT r=WinExec(psText,SW_SHOWNORMAL);
delete []psText;
return r;
#else
return ::WinExec(strCmd,SW_SHOWNORMAL);
#endif
}