如何在网络上获取所有正在运行的进程



如何获取连接到本地网络的任何计算机的工作流程?

我知道如何在我的计算机上获取工作流程,但我找不到如何在另一台计算机上获取操作流程。

这是我的代码:

#include <windows.h>
#include <TlHelp32.h>
PROCESSENTRY32 exe;
HANDLE connector;
connector = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
exe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(connector, &exe) == true)
while (Process32Next(connector, &exe) == true)
{
UnicodeString info = "Name: " + String(exe.szExeFile) + " -> PID: " + exe.th32ProcessID;
ListBox1->Items->Add(info);
}
CloseHandle(connector);

您可以使用WMI类Win32_Process来获取远程机器的进程列表。样品:

#include <windows.h>
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
#pragma warning(disable : 4996)
using namespace std;
int main()
{
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
hres = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
IWbemLocator* pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID*)&pLoc);
IWbemServices* pSvc = NULL;
hres = pLoc->ConnectServer(
_bstr_t(L"\\servername\Root\CIMV2"), // Object path of WMI namespace
BSTR(L"Domain\Administrator"),
BSTR(L"password"),
0,
NULL,
0,
0,
&pSvc
);

IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(BSTR(L"WQL"), BSTR(L"SELECT * FROM Win32_Process"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
UINT32 LockStatus = 0;
while (pEnumerator)
{
hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn || FAILED(hres))
break;
VARIANT vtProp;
hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);// String
if (!FAILED(hres))
{
if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY))
wcout << "Name : " << ((vtProp.vt == VT_NULL) ? "NULL" : "EMPTY") << endl;
else
wcout << "Name : " << vtProp.bstrVal << endl;
}
VariantClear(&vtProp);
hres = pclsObj->Get(L"ProcessId", 0, &vtProp, 0, 0);// Uint32
if (!FAILED(hres))
{
if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY))
wcout << "ProcessId : " << ((vtProp.vt == VT_NULL) ? "NULL" : "EMPTY") << endl;
else
wcout << "ProcessId : " << vtProp.uintVal << endl;
}
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
pLoc->Release();
pSvc->Release();
CoUninitialize();
return 0;
}

为此,您需要配置防火墙和DCOM设置:连接到远程计算机上的WMI

或者,使用cmd:tasklist:

tasklist /s servername /u username /p password

最新更新