实现系统自启动方式
1. 启动项中添加执行程序http://download1.youkuaiyun.com/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);
}

