亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C ++中按其名稱獲取進程句柄?

如何在C ++中按其名稱獲取進程句柄?

C++
繁星coding 2019-10-17 11:11:26
我正在嘗試獲取example.exe的進程句柄,因此可以對其進行調用TerminateProcess。我怎樣才能做到這一點?請注意,它沒有窗口,因此FindWindow無法使用。
查看完整描述

3 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

#include <cstdio>

#include <windows.h>

#include <tlhelp32.h>


int main( int, char *[] )

{

    PROCESSENTRY32 entry;

    entry.dwSize = sizeof(PROCESSENTRY32);


    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);


    if (Process32First(snapshot, &entry) == TRUE)

    {

        while (Process32Next(snapshot, &entry) == TRUE)

        {

            if (stricmp(entry.szExeFile, "target.exe") == 0)

            {  

                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);


                // Do stuff..


                CloseHandle(hProcess);

            }

        }

    }


    CloseHandle(snapshot);


    return 0;

}

另外,如果您想在OpenProcess中使用PROCESS_ALL_ACCESS,則可以嘗試以下操作:


#include <cstdio>

#include <windows.h>

#include <tlhelp32.h>


void EnableDebugPriv()

{

    HANDLE hToken;

    LUID luid;

    TOKEN_PRIVILEGES tkp;


    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);


    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);


    tkp.PrivilegeCount = 1;

    tkp.Privileges[0].Luid = luid;

    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


    AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL);


    CloseHandle(hToken); 

}


int main( int, char *[] )

{

    EnableDebugPriv();


    PROCESSENTRY32 entry;

    entry.dwSize = sizeof(PROCESSENTRY32);


    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);


    if (Process32First(snapshot, &entry) == TRUE)

    {

        while (Process32Next(snapshot, &entry) == TRUE)

        {

            if (stricmp(entry.szExeFile, "target.exe") == 0)

            {  

                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);


                // Do stuff..


                CloseHandle(hProcess);

            }

        }

    }


    CloseHandle(snapshot);


    return 0;

}


查看完整回答
反對 回復 2019-10-17
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

有兩種基本技術。第一種使用PSAPI;第二種使用PSAPI。MSDN有一個例子,使用EnumProcesses,OpenProcess,EnumProcessModules,和GetModuleBaseName。


另一個使用我更喜歡的Toolhelp。使用CreateToolhelp32Snapshot來獲取進程列表的快照,走在它與Process32First和Process32Next,它提供了模塊名稱和進程ID,直到你找到你想要的,然后調用OpenProcess得到的句柄。


查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 1031 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號