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

在C+中设置控制台标题+;使用字符串 我想知道如何用字符串作为新的参数来改变C++中的控制台标题。 我知道您可以使用Win32 API的SetConsoleTitle函数,但它不接受字符串参数。 我需要这个,因为我正在做一个带有控制台效果和命令的Java本机接口项目。 我使用的是windows,它只需要与windows兼容。,c++,windows,console,java-native-interface,title,C++,Windows,Console,Java Native Interface,Title,该函数确实需要一个字符串参数。只是字符串的类型取决于是否使用UNICODE string str(L"Console title"); SetConsoleTitle(str.c_str()); 您必须使用例如\u T宏来确保文字字符串的格式正确(宽字符或单字节): 如果您使用的是例如std::string,事情会变得更复杂一些,因为您可能需要根据\u UNICODE宏在std::string和std::wstring之间进行转换 不必进行转换的一种方法是,如果未定义\u UNICODE,则始

该函数确实需要一个字符串参数。只是字符串的类型取决于是否使用UNICODE

string str(L"Console title");
SetConsoleTitle(str.c_str());
您必须使用例如
\u T
宏来确保文字字符串的格式正确(宽字符或单字节):

如果您使用的是例如
std::string
,事情会变得更复杂一些,因为您可能需要根据
\u UNICODE
宏在
std::string
std::wstring
之间进行转换

不必进行转换的一种方法是,如果未定义
\u 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字符串的函数所使用的字符串的指针:

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

注释很旧,但您可以使用系统方法来执行

#include <iostream>

int main(){
    system("title This is a title");
}
#包括
int main(){
系统(“标题这是一个标题”);
}

嘿,我想添加一个东西,它将我的应用程序名称随机化,就像一个随机字符串或其他东西,因此当我打开它时,它会更改控制台应用程序的名称

SetConsoleTitle
是否接受字符串Google first您的问题,这很容易找到…请注意,如果字符大小错误,则不需要显式转换字符串,只需显式调用相应版本的函数即可。在这种情况下,您可以调用setConsoleTitle(对于ANSI字符串)或setConsoleTitle(对于Unicode字符串)。从技术上讲,您应该使用
Unicode
TEXT()
,而不是
\u Unicode
\u T()
。前者是Win32宏,
setConsoleItle()
是Win32函数。后者是C运行时宏,只能与C运行时函数一起使用。实际上,
UNICODE
\u UNICODE
通常一起定义,因此
TCHAR
/
\u TCHAR
TEXT()
/
\u T()
可以互换。但我发现最好对使用宏的库使用正确的宏。另一方面,您的typedef可以简化为
typedef std::basic_string tstring,不需要
#ifdef
#include <iostream>

int main(){
    system("title This is a title");
}