2021-04-10

操作系统实验三

参考别人的
#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值