保存到文件的实际窗口名称

问题描述

你好,我有简单的代码,它正在打印实际的窗口名称,但是我无法将输出保存到.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