FindWindow не находит окно

Эй, ребята, я планирую сделать простую консоль тренера с 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("FOUNDn");
        getch();
    }
    else{
        printf("NOT FOUND");
        getch();
    }
}

приведенный выше код я использую, чтобы попробовать, будет ли команда FindWindow (), но при выполнении вывода всегда показывать

НЕ НАЙДЕНО

Я заменил набор символов в проекте свойств из

Используйте Набор Символов Unicode

to

использовать Многобайтовый Набор Символов

и

LPCTSTR

to

LPCSTR

или

LPCWSTR

но результат всегда один и тот же, надеюсь, кто-нибудь может мне помочь.

4 ответов


 HWND Find = ::FindWindowEx(0, 0, "MozillaUIWindowClass", 0);

FindWindow находит окно, только если оно имеет точный указанный заголовок, а не только подстроку.

вы можете:


поиск имени класса окна:

HWND hWnd = FindWindow("MozillaWindowClass", 0);

перечислить все окна и выполнять пользовательские шаблоны поиска по названиям:

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;
}

вам нужно использовать полное имя приложения (как показано в Диспетчере задач Windows -> вкладка приложения)

пример:

Google - Mozilla Firefox

(после открытия вкладки Google в Firefox)


по данным MSDN

lpWindowName [in, необязательно]

Type: LPCTSTR

The window name (the window's title). If this parameter is NULL, all window names match.

таким образом, ваше имя окна не может быть "Mozilla Firefox", потому что название окна Firefox никогда не "Mozilla Firefox", но это может быть "Mozilla Firefox Start Page - Mozilla Firefox" или что-то зависит от имени веб-страницы. Вот пример картины Firefox's real tiltle

таким образом, ваш код должен быть таким, (код ниже работает только - только работать если у вас есть точное название окна: "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.
}