如何获得设置亲和力的过程?

时间:2018-09-30 16:49:38

标签: c++ process

我正在尝试使用以下程序来设置其亲和力的过程。 但我想设置chrome或任何其他过程的亲和力。 怎么做?

#include <windows.h>
#include <iostream>

using namespace std;
void main(){


    HANDLE process = GetCurrentProcess();
    DWORD_PTR processAffinityMask = 8;

    BOOL success = SetProcessAffinityMask(process, processAffinityMask);
    SetPriorityClass(GetCurrentProcess(), THREAD_PRIORITY_TIME_CRITICAL);

    cout << success << endl;

    system("pause");
}

1 个答案:

答案 0 :(得分:1)

要获取任意命名的进程的进程ID,您可以执行以下操作:

    List<string> colNames = new List<string>
    {
        "Desc",
        "Freq",
        "Date",
        "Amount",
        "Pay From"
    };

您可以按以下方式获取该过程的句柄:

#include <Windows.h>
#include <string>
#include <tlhelp32.h>

int getPID(const std::string& process_name)
{
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (!Process32First(snapshot, &entry)) return 0;

    do
    {
        if (strcmp(entry.szExeFile, process_name.c_str()) == 0)
        {
            CloseHandle(snapshot);
            return entry.th32ProcessID;
        }
    } while (Process32Next(snapshot, &entry));

    CloseHandle(snapshot);
    return 0;
}

最后,您可以按照常规方式将HANDLE hProcess = OpenProcess (PROCESS_SET_INFORMATION, FALSE, pid); 传递给hProcessSetProcessAffinityMask

我认为您需要提升权限(例如以管理员身份)才能正常工作-并测试SetPriorityClass是否成功并报告调用OpenProcess的结果(如果没有)。