如何在 C++ 中更改任务管理器上的进程名称?
Posted
技术标签:
【中文标题】如何在 C++ 中更改任务管理器上的进程名称?【英文标题】:How do I change name of a process on task manager in C++? 【发布时间】:2018-12-03 18:41:48 【问题描述】:我有一个名称为“processName”且可执行文件为“processName.exe”的进程。我想启动此进程并更改其在任务管理器中的显示方式的名称。我不能只重命名可执行文件,因为我想在名称中有空格。例如,它应该在任务管理器中看起来像“ProcessName somethingelse”。我可以看到一些程序这样做,例如命令提示符的可执行文件名称是“cmd.exe”,但命令提示符上的名称是“Windows 命令处理器”,它的名称中有空格。
【问题讨论】:
【参考方案1】:应用程序/任务名称是主窗口的标题(它自己的一章)。您可以使用SetWindowText
更改自己的标题:
BOOL SetWindowTextA( // Ansistring version
HWND hWnd, // handle to your main window
LPCSTR lpString // new name
);
或
BOOL SetWindowTextW( // Widestring version
HWND hWnd,
LPCWSTR lpString
);
【讨论】:
任务管理器更喜欢使用 PE 映像版本信息中的 FileDescription 作为应用程序名称(例如,cmd.exe 的“Windows 命令处理器”)。控制台应用程序在控制台的有效所有者下分组(通常是分配它的进程,除非它已经退出)。该组包括conhost.exe,它是控制台窗口的真正所有者。 UWP 应用具有由 applicationframehost.exe 实例托管的窗口,但它们按包单独分组,在这种情况下,与控制台相比,窗口宿主进程被排除在后台进程之外。 我在 W7 上,任务管理器中显示的cmd.exe
的任务名称似乎来自其 WindowText。使用SetWindowTextW
更改它无论如何都会更改任务名称。这是否不适用于更高版本的 Windows(对于 cmd.exe
或自己的应用程序)?
我在描述任务管理器在 Windows 10 和可能是 Windows 8 中的工作方式,它通常显示嵌入在 PE 图像中的文件描述作为应用程序名称,而不是第一个的窗口文本应用程序拥有的***窗口。但是,UWP 应用是个例外。它们使用包应用程序名称,并且它们的窗口托管在会话的 applicationframehost.exe 进程中。
我拿到 W10 机器上进行测试,我明白你的意思。必须单击应用程序上的展开箭头才能查看其 Windows 标题,尽管它们在任务栏中显示与以前一样。有没有办法在不更改 PE 映像的情况下更改实际名称/描述?您说它通常使用听起来很有希望的描述,如果这是 OP 想要的。以上是关于如何在 C++ 中更改任务管理器上的进程名称?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Apache HTTP 服务器在任务管理器上显示 2 个进程?