实现系统自启动方式
1. 启动项中添加执行程序http://download1.csdn.net/down3/20070614/14162904485.rar
2. 修改注册表
3. 修改系统ini 文件
以供注册表实现方式为案例,源代码在附件里
selfRun.h 和selfRun.cpp
在VC++6.0下调试正常
另外dir.cpp和dir.h是实现目录复制的源代码
#ifndef _SELFRUN_H
#define
_SELFRUN_H
#ifdef __cplusplus
extern
"
C
"
...
{
#endif
#include <windows.h>
/**//* under VC++ 6.0
* selfRun.H For self run when operation system is booting
*/
class CSetInfo
...{
public:
LPCTSTR procedureName;
unsigned long procedureNameLength;
bool selfRun;
CSetInfo(LPCTSTR name, unsigned long length, bool run)
...{
procedureName = name;
procedureNameLength = length;
selfRun = run;
}
};
UINT EnableSelfRunThread(LPVOID pParam);
// These are the return codes from Zip functions
#define PROCESS_OK 0
#define PROCESS_ERROR 1
#ifdef __cplusplus
}
#endif
#endif
#include
"
stdafx.h
"
#include
"
selfRun.h
"
UINT EnableSelfRunThread(LPVOID pParam)
...
{
CSetInfo *pCSetInfo = (CSetInfo *)pParam;
HKEY hKey;
//设置注册表中相关的路径
LPCTSTR subDir="Software/Microsoft/Windows/CurrentVersion/Run";
long ret;
unsigned char * name = (unsigned char *)pCSetInfo->procedureName;
//打开注册表中的相应项
ret=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subDir,0,KEY_WRITE,&hKey));
if(ret!=ERROR_SUCCESS)
...{
return PROCESS_ERROR;
}
if(pCSetInfo->selfRun == true)
...{
//将相关的信息写入注册表。
ret=(
::RegSetValueEx(hKey,
(const char *)name,
NULL,REG_SZ,
(const unsigned char *)name,
pCSetInfo->procedureNameLength)
);
}
else
...{
//将相关的信息从注册表删除
ret=(::RegDeleteValue(hKey,(const char *)name));
}
//判断系统的相关注册是否成功?
if(ret!=ERROR_SUCCESS)
...{
return PROCESS_ERROR;
}
//关闭注册表中的相应的项
::RegCloseKey(hKey);
return PROCESS_OK;
}
#ifndef _DIR_H
#define
_DIR_H
#ifdef __cplusplus
extern
"
C
"
...
{
#endif
#include <shellapi.h>
/**//*
* dir.H For dir operations under VC++ 6.0
*/
class CDirInfo
...{
public:
LPCTSTR m_src;
LPCTSTR m_dest;
CDirInfo(LPCTSTR dest, LPCTSTR src)
...{
m_src = src;
m_dest = dest;
}
};
UINT CopyDirThread(LPVOID pParam);
// These are the return codes from Zip functions
#define COPY_DIR_OK 0
#define COPY_DIR_ERROR 1
#ifdef __cplusplus
}
#endif
#endif
#include
"
stdafx.h
"
#include
"
dir.h
"
UINT CopyDirThread(LPVOID pParam)
...
{
CDirInfo *pDirInfo = (CDirInfo *)pParam;
SHFILEOPSTRUCT OpStruc;
OpStruc.hwnd = NULL;
OpStruc.wFunc = FO_COPY;
OpStruc.fFlags = FOF_SIMPLEPROGRESS;
OpStruc.pFrom = pDirInfo->m_src;
OpStruc.pTo = pDirInfo->m_dest;
OpStruc.lpszProgressTitle = NULL;
return SHFileOperation(&OpStruc);
}