【发布时间】:2017-10-17 21:43:45
【问题描述】:
我们开发了一个控制台应用程序,它使用ITaskbarList3::SetProgressValue() 方法,在 cmd.exe 中调用该应用程序时可以正常工作,但在Conemu 控制台中调用时它没有显示任何进度。任何地方都不会出现错误消息。作为ITaskbarList3::SetProgressValue() 的参数传递的HWND 是这样的:
HWND hwnd = GetConsoleWindow();
我没有要显示的代码,因为我不知道执行此操作的替代方法或可能出现的问题。我认为返回的 HWND 可能是 conemu 的,而不是我的应用程序的,所以我调用了 GetWindowText() 函数来检查窗口的文本是否不是我的控制台应用程序,但它是一个与 cmd 格式相同的字符串。
【问题讨论】:
-
您确定您使用的
HWND与任务栏上实际显示的HWND相同吗?您不能随便使用任何HWND。而且您当然不拥有控制台窗口。您可能需要让您的控制台应用程序显示其自己的弹出 GUI 窗口以获取进度,然后为该窗口设置任务栏进度 -
如何确保我使用的 HWND 与任务栏上显示的相同?任何Windows工具?它确实适用于 cmd.exe 问题出在 Conemu 上。也许在使用 Conemu 时它会返回 conemu 的句柄而不是我的应用程序的句柄?
-
Windows 对 Conemu 一无所知。
GetConsoleWindow()返回 Windows 自己的控制台窗口的HWND,而不是 Conemu 的窗口。 Conemu 通过连接到 Windows 控制台系统来完成它的工作,但它并没有完全取代那个系统。对于您尝试做的事情,您可能需要 Conemu 的HWND。尝试使用FindWindow()或EnumWindows()找到它。 -
@RemyLebeau 感谢您的解释!我在想
GetConsoleWindow()会返回当前使用的控制台的 HWND,即调用应用程序的控制台,在这种情况下是 ConEmu。
标签: c++ winapi progress-bar taskbar conemu