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