【问题标题】:How do I change name of a process on task manager in C++?如何在 C++ 中更改任务管理器上的进程名称?
【发布时间】:2018-12-03 18:41:48
【问题描述】:

我有一个名称为“processName”且可执行文件为“processName.exe”的进程。我想启动此进程并更改其在任务管理器中的显示方式的名称。我不能只重命名可执行文件,因为我想在名称中有空格。例如,它应该在任务管理器中看起来像“ProcessName somethingelse”。我可以看到一些程序这样做,例如命令提示符的可执行文件名称是“cmd.exe”,但命令提示符上的名称是“Windows 命令处理器”,它的名称中有空格。

【问题讨论】:

    标签: c++ windows process taskmanager task-management


    【解决方案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 想要的。
    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多