FindWindowA找不到一些窗口

时间:2019-03-11 18:48:56

标签: c++ winapi findwindow

我是c ++的新手,FindWindowA在某些进程而不是其他进程中工作,例如: FindWindowA(NULL, "Discord");将起作用 但是FindWindowA(NULL, "Fortnite");不会。

enter image description here

有人知道为什么吗? 谢谢。

2 个答案:

答案 0 :(得分:2)

FindWindow仅找到顶级窗口。如果要搜索与窗口标题完全匹配的内容,则必须考虑隐藏字符(空格,制表符等)。

即使您找到了窗口标题,也仅在未本地化该窗口的情况下才起作用-即,如果创建该窗口的程序已被本地化为另一种语言,那么您还必须本地化搜索字符串。

一种更可靠的方法是搜索类名称,因为通常不会进行本地化:FindWindow("myclass", NULL);

当然,如果有一个隐藏的顶级窗口创建了包含您要查找的窗口的子窗口,则此操作仍然会失败。要获取该窗口,可以调用EnumWindows获取每个顶级窗口的句柄,然后为找到的每个顶级窗口调用EnumChildWindows

答案 1 :(得分:1)

Fortnite的窗口有一个或两个空格

sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
sd.OutputWindow = FindWindow((L"UnrealWindow"), (L"Fortnite  "));
sd.SampleDesc.Count = 1;
sd.Windowed = TRUE;