Может кому-то пригодится поиск окон по неполному названию, где-то видел коммент с просьбой сделать такой поиск окон. Пишите часть названия процесса/окна/контрола и оно находит первый попавшийся по полному совпадению. Чем больше символов напишите, тем выше шанс что найден нужное окно.
Примеры:
1) "Кальк" вернет "Калькулятор" (если открыт).
2) "Блокнот" вернет "Безымянный — Блокнот" (если открыт новый документ в блокноте).
3) "Кибор Бот Автокликер" вернет "Кибор Бот Автокликер :: Поиск окна по неполному названию — Google Chrome" (если открыта данная страница в Хроме).
CODE://подключаем ф-и WinApi
external(INT, "FindWindowEx", "FindWindowExA", "user32.dll");
external(VOID, "GetWindowText", "GetWindowTextA", "user32.dll");
function findprocess (string str)
//прописываем ф-ю. ищет запущенный процесс по неполному названию
//находит первый попавшийся при точном совпадении
//возвращает полное название первого найденного процесса
//чем длиннее будет строка поиска тем больше шанс что найдется нужный процесс
{
char chrstr[256];
strcpy (#chrstr[0], str);
char buffer[512];
int strsize, bufsize;
strsize = size (#chrstr[0]);
string processname = "Процесс не найден"; // что оставить в случае не нахождения
int hWnd = FindWindowEx (0, 0, 0, 0);
int s = 0;
int exitwhile = 0;
while (hWnd != 0 && exitwhile == 0)
{
buffer[0] = formatic (0);
GetWindowText (hWnd, address (#buffer[0]), 512);
bufsize = size (#buffer[0]);
s = 0;
for (int i = 0; i < bufsize - strsize + 1; i++)
{
for (int j = 0; j < strsize; j++)
{
if (chrstr[j] == buffer[i + j]) s++;
else { s = 0; j = strsize; }
}
if (s == strsize)
{
processname = format (#buffer[0]);
i = bufsize;
exitwhile = 1;
}
}
hWnd = FindWindowEx (0, hWnd, 0, 0);
}
return processname;
}
//запускаем
string strinput = input ("Какой процесс искать?");
messagebox (findprocess (strinput));
Всем бобра =)(Отредактировано автором: 01 Апреля, 2017 - 10:48:43) |