如何在 Win 64 位中使用 C++ 在 Microsoft API 的任务管理器中获取所有进程

How to get all process in task manager with Microsoft API using C++ in win 64bit

我下面有块代码。

我想用 C++ 在任务管理器中获取所有进程,但它不起作用。

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>

void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );
    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModulesEx( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded, LIST_MODULES_ALL) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }
    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );
    CloseHandle( hProcess );
}

int main( void )
{
    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    {
        return 1;
    }
    cProcesses = cbNeeded / sizeof(DWORD);
    for ( i = 0; i < cProcesses; i++ )
    {
        if( aProcesses[i] != 0 )
        {
            PrintProcessNameAndID( aProcesses[i] );
        }
    }
    return 0;
}

我想在任务管理器中获取所有进程,但出现 return 错误,如图所示。

如何解决,谢谢解答

我尝试在任务管理器中获取所有进程。

你应该尝试 link 和 Psapi.lib。

你的错误是link错误。在编译器将源文件编译为目标文件之后,linker 正在创建最终的 exe。 当您使用 <psapi.h> 中的 EnumProcessModulesEx 等函数时,您需要 link 实现它们。

建议阅读您正在使用的 API 的文档。
例如:EnumProcessModulesEx.