#include <iostream>
#include <Windows.h>
using namespace std;
#include <strsafe.h>
// 创建新进程,用ie打开指定网页
void main(int arge,char *argv[])
{
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=TRUE;
TCHAR cmdline[]=TEXT("c://program files//internet explorer//iexplore.exe http://community.youkuaiyun.com/");
BOOL bRet=::CreateProcess(NULL,cmdline,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
int error=GetLastError();
if(bRet)
{printf("新进程的主线程的线程ID号:\n",pi.dwThreadId);
printf("新进程的进程ID号:%d\n",pi.dwProcessId);
printf("新进程的主线程的线程ID号:\n",pi.dwThreadId);
::CloseHandle(pi.hThread);
::CloseHandle(pi.hProcess);
}
else
{
printf("error code:%d\n",error);
}
system("pause");
}
// 创建作业,将进程加入作业
void main()
{
BOOL isInJob=FALSE;
IsProcessInJob(GetCurrentProcess(),NULL,&isInJob);
if(isInJob)
{
cout<<"该进程已经存在一个作业中了"<<endl;
return ;
}
HANDLE hjob=CreateJobObject(NULL,TEXT("HELLOMYJOB"));
JOBOBJECT_BASIC_LIMIT_INFORMATION jobli={0};
jobli.PriorityClass=IDLE_PRIORITY_CLASS;
jobli.PerJobUserTimeLimit.QuadPart=10000;
jobli.LimitFlags=JOB_OBJECT_LIMIT_PRIORITY_CLASS|JOB_OBJECT_LIMIT_JOB_TIME;
SetInformationJobObject(hjob,JobObjectBasicLimitInformation,&jobli,sizeof(jobli));
JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
jobuir.UIRestrictionsClass=JOB_OBJECT_UILIMIT_NONE;
jobuir.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_EXITWINDOWS;
jobuir.UIRestrictionsClass|=JOB_OBJECT_UILIMIT_HANDLES;
SetInformationJobObject(hjob,JobObjectBasicUIRestrictions,&jobuir,sizeof(jobuir));
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
TCHAR szCmdLine[]=TEXT("CMD");
BOOL bResult=CreateProcess(NULL,szCmdLine,NULL,NULL,FALSE,CREATE_SUSPENDED|CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
AssignProcessToJobObject(hjob,pi.hProcess);
ResumeThread(pi.hThread);
DWORD count=-1;
BOOL istrue ;
istrue = GetProcessHandleCount(pi.hProcess,&count);
printf("ProcessHandleCount: %d\n",count);
// CloseHandle(pi.hThread);
istrue = GetProcessHandleCount(pi.hThread,&count);
printf("ProcessHandleCount: %d\n",count);
HANDLE h[3];
h[0]=pi.hProcess;
h[1]=hjob;
DWORD dw=WaitForMultipleObjects(2,h,FALSE,INFINITE);
switch(dw)
{
case WAIT_OBJECT_0:
cout<<"the process has terminated.."<<endl;
break;
case WAIT_TIMEOUT:
cout<<"ALL of the job's allotted cpu time has used.."<<endl;
break;
default:
cout<<"*****\n";
}
FILETIME CreationTime;
FILETIME ExitTime;
FILETIME KernelTime;
FILETIME UserTime;
TCHAR szInfo[MAX_PATH];
GetProcessTimes(pi.hProcess,&CreationTime,&ExitTime,&KernelTime,&UserTime);
StringCchPrintf(szInfo,_countof(szInfo),TEXT("CreationTime=%u Kernel=%u|User=%u\n"),CreationTime.dwLowDateTime/10000,KernelTime.dwLowDateTime/10000,UserTime.dwLowDateTime/10000);
cout<<szInfo<<endl;
CloseHandle(pi.hProcess);
CloseHandle(hjob);
system("pause");
}