操作系统实验三
参考别人的
#include
#include <stdio.h>
#include <windows.h>
#include <TlHelp32.h>
char output[100];
DWORD GetProcessidFromName(LPCTSTR name)
{
PROCESSENTRY32 pe;
DWORD id = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hSnapshot, &pe))
return 0;
//LPCTSTR转char*
int num = WideCharToMultiByte(CP_OEMCP, NULL, name, -1, NULL, 0, NULL, FALSE);//字符转换,CP_OEMCP 当前系统OEM代码页,一种原始设备制造商硬件扫描码
char* pchar = new char[num];
WideCharToMultiByte(CP_OEMCP, NULL, name, -1, pchar, num, NULL, FALSE);
while (1)
{
pe.dwSize = sizeof(PROCESSENTRY32);
//一个进程接一个进程直到结束
if (Process32Next(hSnapshot, &pe) == FALSE)
break;
//WCHAR 转char*
WCHAR* wc = pe.szExeFile;
sprintf_s(output, "%ws", wc);//wc变成给outout
if (strcmp(output, pchar) == 0)//两个进行比较
{
id = pe.th32ProcessID;
break;
}
}
CloseHandle(hSnapshot);
return id;
}
int main()
{
STARTUPINFO sfo;//初始化为0
PROCESS_INFORMATION pfo;
memset(&sfo, 0, sizeof(sfo));
memset(&pfo, 0, sizeof(pfo));
TCHAR cmdline2[] = TEXT("C://Windows//System32//notepad.exe");
int id = GetProcessidFromName(TEXT("notepad.exe"));
// 为进程的所有线程拍个快照
HANDLE hSnapshort = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshort == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot调用失败!\n");
return -1;
}
// 获得进程列表,里面记录了进程的详细信息,再使用Process32First和Process32Next遍历快照中记录的每个进程信息
PROCESSENTRY32 stcProcessInfo;
stcProcessInfo.dwSize = sizeof(stcProcessInfo);
BOOL bRet = Process32First(hSnapshort, &stcProcessInfo);
printf("进程名 进程ID 线程数 父进程ID 大小 线程优先权\n");
while (bRet)
{
printf("%s %d %d %d %d %d\n",stcProcessInfo.szExeFile, stcProcessInfo.th32ProcessID, stcProcessInfo.cntThreads, stcProcessInfo.th32ParentProcessID,
stcProcessInfo.dwSize,stcProcessInfo.pcPriClassBase);
bRet = Process32Next(hSnapshort, &stcProcessInfo);
}
if (id != 0)
printf("存在记事本进程\n");
else
CreateProcess(
NULL,//文件的名字
cmdline2, //执行的命令
NULL,//不懂
NULL,//不懂
FALSE,//不懂
CREATE_NEW_CONSOLE,//新的窗口来运行
NULL,//不懂
NULL,//不懂
&sfo,//输入 输出 信息
&pfo//调用的结果
);
CloseHandle(hSnapshort);
system("pause");
return 0;
}