问题描述
你好,我有简单的代码,它正在打印实际的窗口名称,但是我无法将输出保存到.txt文件中 我知道wprintf的代码用于在屏幕上打印。
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
HWND ActualWindow;
fstream LogFile;
int main()
{
while (true)
{
_getch();
HWND ActualWindow = GetForegroundWindow();
wchar_t NewName[128];
GetwindowText(ActualWindow,NewName,128);
wprintf(NewName); //Its printing actual window name
LogFile.open("dat.txt",fstream::app);
if (LogFile.is_open())
{
LogFile << wprintf(NewName); //its saving some numbers
LogFile.close();
}
}
return 0;
}
解决方法
您正在打印wprintf()
的返回值,而不是在打印NewName
的内容。您需要将LogFile << wprintf(NewName)
替换为LogFile << NewName
。
但是,您将向期望基于wchar_t
的字符串的std::fstream
写入基于char
的字符串,因此没有为{{ 1}}字符串,实际上您将为operator<<
指针调用wchar_t
(因为所有指针都隐式转换为operator<<
)。这样,您最终会看到一个正在打印到文件的内存地址,而不是字符串内容。
尝试使用void*
代替void*
,然后std::wofstream
应该可以正常工作。
否则,请使用std::fstream
,然后可以使用LogFile << NewName
缓冲区而不是GetWindowTextA()
缓冲区,然后char[]
将按预期工作(您将拥有将wchar_t[]
替换为std::fstream
。