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。
我与 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。