c++ - 使用字符串在 C++ 中设置控制台标题

标签 c++ windows console java-native-interface title

我想知道如何使用字符串作为新参数在 C++ 中更改控制台标题。
我知道您可以使用 Win32 API 的 SetConsoleTitle 函数,但它不接受字符串参数。
我需要这个,因为我正在做一个带有控制台效果和命令的 Java native 界面项目。
我使用的是 Windows,它只需要与 Windows 兼容。

最佳答案

SetConsoleTitle函数确实确实接受一个字符串参数。只是字符串的种类取决于是否使用 UNICODE。

你必须使用例如T 宏以确保文字字符串的格式正确(宽字符或单字节):

SetConsoleTitle(T("Some title"));

如果您正在使用例如std::string 事情变得有点复杂,因为您可能需要在 std::stringstd::wstring 之间进行转换,具体取决于UNICODE 宏。

如果未定义 UNICODE,则不必进行该转换的一种方法是始终仅使用 std::string,或者仅使用 std::wstring 如果已定义。这可以通过在 "stdafx.h" 头文件中添加一个 typedef 来完成:

#ifdef UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

如果您的问题是 SetConsoleTitle 不接受 std::string(或 std::wstring),那是因为它有与没有字符串类(或根本没有类)的 C 程序兼容。在这种情况下,您使用 c_str的字符串类获取指向要与需要旧式 C 字符串的函数一起使用的字符串的指针:

tstring title = T("Some title");
SetConsoleTitle(title.c_str());

还有另一种解决方案,那就是使用函数的显式窄字符“ASCII”版本,它有一个 A 后缀:

SetConsoleTitleA("Some title");

当然还有一个宽字符变体,带有 W 后缀:

SetConsoleTitleW(L"Some title");

关于c++ - 使用字符串在 C++ 中设置控制台标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219182/

相关文章:

C++ nonlohmann json读取子对象

C++:宏参数中可以有空格吗?

windows - 如何在 Windows shell 中向文件类型添加辅助动词?

c# - 我需要帮助在 C# 中显示文本文件中的单词(字符串)

console - 如何从控制台运行 rake 任务?

c++ - 带有自定义分配器但没有其他参数的 std::function 构造函数有什么意义?

c++ - 将 Boost Spirit 解析器从 boost::variant 转换为 std::variant

c# - 如何将进程输出重定向到 System.String

windows - 如何运行 Windows 批处理文件但隐藏命令窗口?

windows - 如何使批处理文件通过新的Windows终端运行?