Получить дескриптор окна внешне работающей программы через переполнение стека

Есть внешне работающая программа, для которой мне нужна возможность изменить размер. Для меня важен тот факт, что часть названия — это версия и другая конкретная информация, связанная с этим экземпляром. Я знаю подстроку, которая должна быть согласованной между версиями.
Я попытался использовать функцию Findwindow (), которая хорошо работает, если у вас есть точная формулировка заголовка, но не когда у вас есть только часть. Я также пробовал EnumWindows, но я считаю, что имеет те же ограничения (мне не очень повезло с этим).
Я чувствую, что самое простое, что я мог бы сделать (если это возможно), это получить дескриптор окна от имени изображения, чтобы выполнить изменение размера.
Идеи?

2

Решение

Вот рабочий код, который я только что протестировал на MSVS 2010 и который отлично работает:

#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <windows.h>BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring)
{
const DWORD TITLE_SIZE = 1024;
TCHAR windowTitle[TITLE_SIZE];

if (GetWindowText(hwnd, windowTitle, TITLE_SIZE))
{
//_tprintf(TEXT("%s\n"), windowTitle);
// Uncomment to print all windows being enumerated
if (_tcsstr(windowTitle, LPCTSTR(substring)) != NULL)
{
// We found the window! Stop enumerating.
return false;
}
}
return true; // Need to continue enumerating windows
}

int main()
{
const TCHAR substring[] = TEXT("Substring");
EnumWindows(FindWindowBySubstr, (LPARAM)substring);
}
4

Другие решения

EnumWindows была предназначена специально для этого. Вы создаете свою собственную функцию обратного вызова для передачи в EnumWindows, и она будет вызывать вашу функцию обратного вызова для каждого перечисляемого окна и передавать ее как часть окна. Вы можете вызвать GetWindowText внутри вашей функции обратного вызова, чтобы получить заголовок окна и искать этот текст, как и любой другой. Какие проблемы у вас были с этим кодом? Почему бы вам не опубликовать это?

1

По вопросам рекламы [email protected]