如何在 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 个进程?

为啥任务管理器进程中没有“.exe”

任务管理器进程位置

如何向我的程序添加描述(-> 任务管理器中的描述列)(VS 2008,C++)

win8win10下卸载程序报错误25022503的解决办法