我正在尝试使用WinAPI中的FindWindow()
,我想向用户询问窗口标题的输入:
char *input;
cout << "Window title: ";
cin >> input;
非常标准。
现在,如何将其转换为LPCWSTR
的{{1}}?
我已尝试过以下操作:FindWindow()
,_T(input)
,TEXT(input)
,但这些都没有奏效。
我还尝试使用(LPCWSTR)input
代替wchar_t
,但我需要char
其他地方,因此我使用char
代替wchar_t
时遇到了很多错误。
答案 0 :(得分:4)
为什么你认为你想要LPCWSTR
? LPCWSTR
用于为UNICODE
编译的程序中。如果您在任何地方使用char类型,那么您应该将项目属性字符集从“使用UNICODE
字符集”更改为“使用多字节字符集”。如果您这样做,那么FindWindow
将接受一个字符数组,如
char input[256];
答案 1 :(得分:3)
您可以使用cin和cout的广泛变体:
wchar_t input[256]; // don't really use a fixed size buffer!
wcout << L"Window title: ";
wcin >> input;
答案 2 :(得分:3)
我会用:
#ifdef UNICODE
typedef std::wstring String;
#define Char wchar_t
#define out wcout
#define in wcin
#else
typedef std::string String;
#define Char char
#define out cout
#define in cin
#endif
String input;
out << _T("Window title: ");
in >> input;
FindWindow(input.c_str(), ...);
如果您确定是否定义了UNICODE
,则无法进行定义,但我建议使用typedef作为字符串类型并使用字符串而不是api指针类型,因为它类型更安全且更易于阅读码。在这种情况下,您需要调用c_str()
方法,该方法返回指向第一个元素的指针。您也可以使用&string[0]
。
答案 3 :(得分:0)
首先,您可以将用户输入为wchar_t*
而不是char*
。我认为这将是最好的选择。
LPCWSTR
是指向宽字符数组的指针,因此您需要将每个char
转换为wchar_t
。
所以,假设你有:
char arr[] = "Some string";
所以你的行动:
size_t size = strlen(arr);
wchar_t* wArr = new wchar_t[size];
for (size_t i = 0; i < size; ++i)
wArr[i] = arr[i];
如果您需要LPCWSTR
,只需使用&wArr[0]
(或其他一些索引)。
重要提示:不要忘记取消分配内存。