Что нового

Как узнать класс окна, если у него класс присваевается как у системы?

La2Angel

Новичок
Сообщения
156
Репутация
1
Программа не от Windows, это сторонний софт. При попытке через AWI класс окна пишет #32770.
Как можно узнать его класс или как можно закрыть процесс окно? Если процесс можно поменять, а титл изменить? За что можно ещё зацепиться для закрытия окна?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
MSDN говорит: #32770 - The class for a dialog box. (Класс для диалогового окна.)

MSDN

Похоже больше ни как окно с классом #32770 не отловить если их 2 или 3 на рабочем столе
(если только не проверять путь exe запущенного процесса и не сравниватся с ним ;D)

А кто будет менять заголовок окна с классом #32770? если ни кто, то ловите окно по Title.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
La2Angel [?]
За что можно ещё зацепиться для закрытия окна?
Обычно у подобных окон есть скрытый текст, можно проверять по тексту.
Также как идентификатор можно проверять процесс окна, или его родительское окно.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Это чит для игры, мне нужно его убить. Чит можно запустить с любого места, т.е. его не отловить по пути. Так же можно поменять название exe и сменить титл и все, окно получается не найти? Я делал получить класс окна у чита, мне в класс пришло текст следующего рода: Button, Scroll, Edit, и т.д. То есть все что у него есть. Даже не знаю как и что ещё сделать.....

P.S. скрытый текст возвращает то же самое, что и получения класса окна.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
La2Angel [?]
Чит можно запустить с любого места, т.е. его не отловить по пути. Так же можно поменять название exe
Возможно у exe есть внутренние идентификаторы (поля типа Версия файла, Автор и т.п.)?
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Есть, но если новый чит выпустят, как тогда быть ?)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Следите за обновлением чита, а то с чем будете сравнивать напишите в ini файл чтоб можно было его изменять
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Можно идентифицировать по координатам или размеру окна.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Да окно не может изменить свой размер!
А как по размеру высечь окно, если их например много?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
La2Angel [?]
пришло текст следующего рода: Button, Scroll, Edit, и т.д. То есть все что у него есть.
А если получать эти данные и сравнивать их с эталонной строкой? Например:
Код:
$sTestString = 'Edit|msctls_statusbar32|'

Run('notepad.exe')
$hWin = WinWait('[CLASS:Notepad]', '', 5)
If $hWin Then
	$sText = StringReplace(WinGetClassList($hWin), @LF, '|')
	If Not StringCompare($sText, $sTestString) Then
		MsgBox(64, 'Info', 'Оно')
	EndIf
Else
	MsgBox(16, 'Error', 'WinWait')
EndIf
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Можно, хорошая идея, а как идея с поиском по размеру окна. Есть только вопрос, при запуске этого чита, и делая запрос WinList() он возврашает аш 390 окон!!! Хотя запущен один лишь чит :smile:))
Чего-то я не понял, даже без программы вин лист возвращает количество найденных окон теперь уже 400 штук! Это как о_О ?


Добавлено:
Сообщение автоматически объединено:

Странно, при WinList() запросе на Windows Seven, он определяет Пуск как окно и т.д. Каждую вкладку.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Большушее спасибо за идеи ваши, вот тоже сам придумал вариант, но выше вин лист с поиском на тот класс надо добавить в него и будет гуд)

Код:
$list=WinList()

For $i=1 to $list[0][0]

$size=WinGetClientSize($list[$i][0])
;MsgBox(0, "Active window's client size is (width,height):", $size[0] & " " & $size[1])
If $size[0]=365 Or $size[1]=340 Then WinKill($list[$i][0])

Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
La2Angel
Можно сразу размеры указывать.
Код:
#include <Array.au3>

$aList = WinList('[Class:#32770; X:15; Y:13; W:640; H:455]');на свои поменяйте
_ArrayDisplay($aList)
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Вопрос по этой же теме, а почему тут скрипт после циклов 10 вылетает ?

Код:
$listsize=WinList('[Class:#32770]')
For $i5=1 to $listsize[0][0]
$size=WinGetClientSize($listsize[$i5][0])
$w=$size[0]
$h=$size[1]
If $w=365 Or $h=340 Then WinKill($listsize[$i5][0])
If $w=293 Or $h=407 Then WinKill($listsize[$i5][0])
Next


Пишет ошибка не понятно значение $size[0] - хотя циклов 10 нормально убивает окно?
 

Nelsy

Знающий
Сообщения
35
Репутация
8
Тебя наверное уже здесь нет но все же попробуй так.
Код:
$listsize=WinList('[Class:#32770]')
For $i=1 To $listsize[0][0]
	$aSize=WinGetClientSize($listsize[$i][0])
	If IsArray($aSize) Then _ ; если это массив то
		If $aSize[0]=365 And $aSize[1]=340 Or $aSize[0]=293 And $aSize[1]=407 Then WinKill($listsize[$i][0])
Next
 
Верх