gpt4 book ai didi

c++ - Youtube 与 WINAPI GetForegroundWindow() 的交互?

转载 作者:行者123 更新时间:2023-11-30 03:53:38 26 4
gpt4 key购买 nike

我正在与 YouTube 进行奇怪的交互,并获得一个获取窗口标题的简单程序:我的小代码在这里:

#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 视频后,它不会再更新窗口标题,它会一直卡住在那里,是不是 youtube/flash player 窃听了 GetForegroundWindow?

最佳答案

包括额外的标题:

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

main 函数中的以下行之前:

std::wcout << windowTitle << endl;

添加以下内容:

_setmode(_fileno(stdout), _O_U16TEXT);

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

关于c++ - Youtube 与 WINAPI GetForegroundWindow() 的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30038792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com