FindWindow找不到窗口

gin*_*0de 8 c++ winapi visual-c++

嘿伙计们我打算用C++制作一个简单的教练控制台但是第一步我遇到了FindWindow()的问题

#include <stdio.h>
#include <cstdlib>
#include <windows.h>
#include <winuser.h>
#include <conio.h>

LPCTSTR WindowName = "Mozilla Firefox";
HWND Find = FindWindow(NULL,WindowName);
int main(){
    if(Find)
    {
        printf("FOUND\n");
        getch();
    }
    else{
        printf("NOT FOUND");
        getch();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码我用来尝试命令FindWindow()但是当我执行输出时总是显示

未找到

我已经替换了属性Project上的字符集

使用Unicode字符集

至

使用多字节字符集

和

LPCTSTR

至

LPCSTR

要么

LPCWSTR

但结果总是一样的,我希望任何人都可以帮助我.

typ*_*232 14

FindWindow 只有具有确切指定标题的窗口才会找到它,而不仅仅是子串.

或者你可以:


搜索窗口类名称:

HWND hWnd = FindWindow("MozillaWindowClass", 0);
Run Code Online (Sandbox Code Playgroud)

枚举所有窗口并对标题执行自定义模式搜索:

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    char buffer[128];
    int written = GetWindowTextA(hwnd, buffer, 128);
    if (written && strstr(buffer,"Mozilla Firefox") != NULL) {
        *(HWND*)lParam = hwnd;
        return FALSE;
    }
    return TRUE;
}

HWND GetFirefoxHwnd()
{
    HWND hWnd = NULL;
    EnumWindows(EnumWindowsProc, &hWnd);
    return hWnd;
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ant 8

 HWND Find = ::FindWindowEx(0, 0, "MozillaUIWindowClass", 0);
Run Code Online (Sandbox Code Playgroud)

  • FindWindowEx 还搜索子窗口,从您可选指定的父窗口(第一个参数)开始。如果第一个参数为空,则该函数使用桌面窗口作为父窗口。该函数在桌面子窗口的窗口中进行搜索。 (2认同)

123*_*ing 5

根据MSDN

lpWindowName [输入,可选]

Type: LPCTSTR

The window name (the window's title). If this parameter is NULL, all window names match.
Run Code Online (Sandbox Code Playgroud)

因此,您的 WindowName 不能是“Mozilla Firefox”,因为 Firefox 窗口的标题永远不会是“Mozilla Firefox”,而可能是“Mozilla Firefox Start Page - Mozilla Firefox”或取决于网页名称的内容。这是示例图片 Firefox 的真正倾斜

因此,您的代码应该是这样的,(下面的代码仅适用 -仅当您具有确切的窗口标题名称时才有效:“Mozilla Firefox Start Page - Mozilla Firefox”,如上图。我已经在 Windows 8.1 上进行了测试并且它有效)

void CaptureWindow()
{


RECT rc;
HWND hwnd = ::FindWindow(0, _T("Mozilla Firefox Start Page - Mozilla Firefox"));//::FindWindow(0,_T("ScreenCapture (Running) - Microsoft Visual Studio"));//::FindWindow(0, _T("Calculator"));//= FindWindow("Notepad", NULL);    //You get the ideal?
if (hwnd == NULL)
{
    return;
}
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);

//Play(TEXT("photoclick.wav"));//This is just a function to play a sound, you can write it yourself, but it doesn't matter in this example so I comment it out.
}
Run Code Online (Sandbox Code Playgroud)