程序的开机autoStart与process创建

开机自启动功能,修改注册表即可。

void CMainFrame::AutoStart()
{
	HKEY hkResult;
    TCHAR lpFilename[MAX_PATH]="Tianzimk.exe";
	
	GetModuleFileName(NULL,lpFilename,MAX_PATH);//获取程序绝对路径.
    LPCSTR regname="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
	
    int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);//创建注册表的键
    if(ret != ERROR_SUCCESS)
    {
	   WriteLog("注册失败,程序无法加入启动项!");
	   AfxMessageBox(TEXT("无法加入启动项"));
	   return;
    }
   
	ret=RegSetValue(hkResult,"Tianzimk.exe",0,REG_SZ,(unsigned char*)lpFilename,sizeof(lpFilename));
	if(ret==0) 
	{
        RegCloseKey(hkResult);//关闭句柄
		WriteLog("程序开机自启动已经成功注册!");
    }
	else
	{
		RegCloseKey(hkResult);

		CString strError;
		strError.Format("RegSetValue执行失败,错误码: %d",ret);
		WriteLog(strError);
	}
}
创建进程并启动:

UINT CMainFrame::WatchThread(LPVOID pParam)
{
	CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	
	TCHAR szPath[MAX_PATH];
	CString strExeFilePath;
	GetModuleFileName(NULL,szPath,MAX_PATH);
	CString strPath = szPath;
	int nPos = strPath.ReverseFind(_T('\\'));
	CString strBaseDir = strPath.Left(nPos);
	strExeFilePath.Format(_T("%s\\shufeng555.exe"),strBaseDir);

	/
	CString strIniFilePath;
	strIniFilePath.Format(_T("%s\\Tianzimk.ini"),strBaseDir);

	STARTUPINFO si;  
  
    ZeroMemory(&si, sizeof(STARTUPINFO));  
    si.cb = sizeof(STARTUPINFO);  
    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION ));  

	CTime tNow0=CTime::GetCurrentTime();   
	
    do
	{  
		CTVMSIniFile ini(strIniFilePath);
		CString username=ini.ReadString("","Username","admin");
		CString password=ini.ReadString("","Password","12345");

		CString strAutoLogin;
	    strAutoLogin.Format(" -u %s -p %s",username,password);

	    CString strCmdLine=strExeFilePath+strAutoLogin;

		if(!CreateProcess(NULL,(LPTSTR)(LPCTSTR)strCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) 
	//	if(!CreateProcess(NULL,(LPTSTR)(LPCTSTR)strExeFilePath,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))  
        {  
			int errorId=GetLastError();
			CString errorStr;
			errorStr.Format("创建进程失败,错误码: %d",errorId);
			pMain->WriteLog(errorStr);
			AfxMessageBox(errorStr);
			pMain->SendMessage(WM_CLOSE,0,0);
            return 0;  
        }  
		
        WaitForSingleObject( pi.hProcess, INFINITE);//检测进程是否停止

		CTime tNow1=CTime::GetCurrentTime();    ///当前时间
		CTimeSpan span=tNow1-tNow0;
		if(span.GetSeconds()>30)
		{
			pMain->WriteLog("登录失败,请检查文件中的用户名或密码!");
			pMain->SendMessage(WM_CLOSE,0,0);
			return 0;
		}
      
        CloseHandle(pi.hProcess);  
        CloseHandle(pi.hThread);  
		Sleep(100);
        
    }while(bExitThread==false);
	return 0;
}
PROCESS_INFORMATION pi; //进程信息

杀死进程:

void CMainFrame::ExitMyProcess()
{
	HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pi.dwProcessId);  
	if(hProcess==NULL)  
	{      
		return;  
	}  
					//结束进程  
	if (TerminateProcess(hProcess,0))  
	{  
		return;  
	}  
	else  
	{  
		WriteLog("程序终止失败!");
		return;  
	}  
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值