Youtube 与 WINAPI GetForegroundWindow() 的交互?

Youtube interaction with WINAPI GetForegroundWindow()?

我与 YouTube 的互动很奇怪,还有一个简单的程序可以获取 window 的 window 标题: 我的小代码在这里:

#include <Windows.h>
#include <tchar.h>
#include <iostream>
#include <string>

wstring getWindowTitle()
{
    // stores the program title
    wstring title;
    // handle to the window
    HWND handle = GetForegroundWindow();
    // length of the title
    int len = GetWindowTextLengthW(handle) + 1;
    // programs title
    wchar_t * programTitle = new wchar_t[len];
    // gets the window title
    GetWindowTextW(handle, programTitle, len);
    // adds program title to our w string to store it in
    title += programTitle;
    return title;
}

int main()
{
    wstring windowTitle;
    windowTitle = L"Title is: ";
    while (1)
{
    windowTitle = getWindowTitle();
    std::wcout << windowTitle << endl;
    Sleep(3000);
}
    return 0;
}

只要没有播放 YouTube 视频,它就可以工作。例如,这是我的命令行文本:

C:\Windows\system32\cmd.exe
Mozilla Firefox Start Page - Mozilla Firefox
YouTube - Mozilla Firefox
McDonalds Artisan Grilled Chicken Sandwich? FAIL! - YouTube - Mozilla Firefox

在我打开 youtube 视频后,它不会再更新 window 标题,它会一直冻结在那里,是不是 youtube/flash 玩家窃听了 GetForegroundWindow?

包括额外的 headers:

#include <io.h>
#include <fcntl.h>

在您的 main 函数中的以下行之前:

std::wcout << windowTitle << endl;

添加以下内容:

_setmode(_fileno(stdout), _O_U16TEXT);

主要问题(并且不是您代码中的唯一问题)是 wcout 在内部处理某些 Unicode 字符的方式。因此,当您的应用程序在前台 windows 遇到某个 Unicode 字符时,它会停止执行。它与 YouTube 或您的 Flash 播放器无关。阅读控制台应用程序中的 Unicode 和 Unicode。