Вы, вероятно, компилируете свое приложение в режиме Unicode. Таким образом, buf
на самом деле wchar_t[255]
, и когда вы выполняете header<<buf
, вы фактически выводите значение указателя buf
вместо его содержимого, так как header
является потоком не-Unicode и не знает, как записывать буферы Юникода.
Вы можете скомпилировать свое приложение как не-юникод (в общих настройках проекта установите многобайтовый набор символов) или использовать альтернативы юникода для stringstream и fstream (wstringstream, wfstream).
Это основная причина проблемы. Кроме того, theatrus прав насчет необходимости удалять недопустимые символы из имени файла, и вам также следует проверить, вернул ли GetForegroundWindow
NULL или GetWindowText
вернула пустую строку.