![](/img/trans.png)
[英]How To get the full name of all processes running including kernel processes on windows
[英]Get list of all processes windows name
我目前正在使用以下代码来获取每个正在运行的进程的 processID。
WTS_PROCESS_INFO* pWPIs = NULL;
DWORD dwProcCount = 0;
if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs, &dwProcCount))
{
//Go through all processes retrieved
for(DWORD i = 0; i < dwProcCount; i++)
{
//pWPIs[i].pProcessName = process file name only, no path!
//pWPIs[i].ProcessId = process ID
//pWPIs[i].SessionId = session ID, if you need to limit it to the logged in user processes
//pWPIs[i].pUserSid = user SID that started the process
}
}
//Free memory
if(pWPIs)
{
WTSFreeMemory(pWPIs);
pWPIs = NULL;
}
我还想获得每个进程的 Window 标题(如果有的话)。 我只对我当前session中的进程感兴趣,所以我会根据session ID过滤掉所有进程。 如果他们是我的 session 那么我想获得 Window 标题。
例如,如果我在打开 10 个记事本的情况下运行这段代码,我会看到
notepad.exe
notepad.exe
notepad.exe
notepad.exe
notepad.exe
notepad.exe
...
但我想获得标题,以便我知道哪个记事本打开了哪个文件。
类似于: 通过进程 ID c++ 获取 hwnd
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}
EnumWindows(EnumWindowsProcMy,m_ProcessId);
然后你必须打电话:
GetWindowText(g_hwnd, title, nMax);
int GetWindowTextA(
HWND hWnd,
LPSTR lpString,
int nMaxCount
);
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtexta
使用 WINDOWTITLE 参数和通配符 *(或需要什么)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.