首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FindWindow找不到窗口

使用FindWindow找不到窗口
EN

Stack Overflow用户
提问于 2016-02-13 00:07:21
回答 1查看 3.7K关注 0票数 2

我一直在尝试使用C++捕获窗口并将其复制到剪贴板。我设法让代码在记事本上工作,但奇怪的是,它找不到我尝试过的其他窗口:“计算器”、“写字板”等。

代码如下:

代码语言:javascript
复制
    RECT rc;
HWND hwnd = ::FindWindow(TEXT("Notepad"), NULL);    //the window can't be min
if (hwnd == NULL)
{
    cout << "it can't find any 'note' window" << endl;
    getchar();
    return 0;
}
GetClientRect(hwnd, &rc);

//create
HDC hdcScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcScreen);
HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top);
SelectObject(hdc, hbmp);

//Print to memory hdc
PrintWindow(hwnd, hdc, PW_CLIENTONLY);

//copy to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hbmp);
CloseClipboard();

//release
DeleteDC(hdc);
DeleteObject(hbmp);
ReleaseDC(NULL, hdcScreen);

cout << "success copy to clipboard, please paste it to the 'mspaint'" << endl;

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-02-13 00:14:27

你找不到窗口的最可能的原因是你使用了错误的名称。

如果您阅读了::FindWindow方法的文档,您将意识到您是通过它们的类名来搜索窗口的。正如您提到的,您可以通过简单地搜索" Notepad“来找到Notepad,这是预期的,因为窗口类被称为Notepad。然而,并不是所有的窗口类的命名都如此简单。例如,计算器窗口类实际上被称为"CalcFrame“类。

找到要搜索的正确名称的最好方法是使用名为"Spy++“的工具,并使用它的find函数。此工具通常作为visual studio安装的一部分提供。如果有帮助,请告诉我。

下面是一个示例代码,它可以完美地工作。

代码语言:javascript
复制
#include "stdafx.h"

#include <iostream>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

    std::cout << "This is amazing..."<< std::endl;

    HWND hwnd = ::FindWindow( TEXT("CalcFrame"), NULL );

    if (hwnd != NULL)
    {
        std::cout << "Found." << std::endl;
    }
    else
    {
        std::cout << "Not found." << std::endl;
    }

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35367085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档