gpt4 book ai didi

C++ |如何在函数结果中返回所有 PID?

转载 作者:行者123 更新时间:2023-11-30 04:22:08 24 4
gpt4 key购买 nike

我希望从使用 C++ 的函数中返回所有当前正在运行的进程 ID 的数组。

我正在使用以下函数枚举列表:

DWORD* xEnumProcs(){
PROCESSENTRY32 pe32;
HANDLE snapshot = NULL;
DWORD pid[1024];
DWORD* pointer;
pointer = pid;
int I = 0;

snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot != INVALID_HANDLE_VALUE) {
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(snapshot, &pe32)) {
do {
pid[I] = pe32.th32ProcessID;
I++;
} while (Process32Next(snapshot, &pe32));
}

CloseHandle(snapshot);

}

return pointer;

}

我不确定这是否正确完成。我正在尝试在另一个函数中使用这个数组,如下所示:

void HandleProcs(){
DWORD* xNewProcs = xEnumProcs;
}

这是我在最后一个函数主体的一行中收到的错误:

'initializing' : cannot convert from 'DWORD *(__cdecl *)(void)' to 'DWORD *'
1> There is no context in which this conversion is possible

最佳答案

我想你已经得到了答案,但为了学习,在这里比较 C 版本:

#include <stdio.h>  // printf
#include <Windows.h>
#include <Tlhelp32.h>

DWORD *EnumProcs(size_t *n)
{
DWORD *pids = NULL;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
*n = 0;
if (snapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = { sizeof(pe32) };
if (Process32First(snapshot, &pe32))
{
do { ++*n; } while (Process32Next(snapshot, &pe32));
pids = calloc(*n, sizeof(pe32.th32ProcessID));
*n = 0;
Process32First(snapshot, &pe32); // Maybe check return value
do { pids[(*n)++] = pe32.th32ProcessID; }
while (Process32Next(snapshot, &pe32));
}
CloseHandle(snapshot);
}
return pids;
}
int main()
{
size_t i, n;
DWORD *pids = EnumProcs(&n);
for (i = 0; i < n; i++)
{ printf("%u\n", pids[i]); }
free(pids);
}

C++ 版本:

#include <iostream>  // std::cout
#include <vector> // std::vector, like List<T> in C# (or ArrayList<T> in Java)
#include <Windows.h>
#include <Tlhelp32.h>

std::vector<DWORD> EnumProcs()
{
std::vector<DWORD> pids;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
if (Process32First(snapshot, &pe32))
{
do
{
pids.push_back(pe32.th32ProcessID);
} while (Process32Next(snapshot, &pe32));
}
CloseHandle(snapshot);
}
return pids;
}
int main()
{
std::vector<DWORD> pids = EnumProcs();
for (size_t i = 0; i < pids.size(); i++)
{ std::cout << pids[i] << std::endl; }
}

请注意 C++ 版本是如何完全不同的——并且不使用指针。

尝试学习两种语言中的一种,然后再学习另一种语言。

关于C++ |如何在函数结果中返回所有 PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com