Что нового

[Blood and Soul]Как сделать ControlSend , если Control не определяеться?

zuroin

Новичок
Сообщения
8
Репутация
0
Доброго времени суток.
Проблема как мне кажеться двольно тривиальная, но не могу найти овтета ни в хелпе, ни на фоуме.

1.Есть игра, с помощью Autoit Window Info определяетсья только парметры из раздела Window( title, class, handle и т.д.) В разделе Control по всем параметрам пусто.
2.Нужно отослась в свернутое окно этой программы нажатия клавиш + , - ,=, возможно F1 и др.

Пробовал так :

Код:
WinWaitActive('client')
$hwnd = WinGetHandle('client')
WinMove($hwnd, '', 10, 10)
Sleep(2000)
While 1 = 1
sendkey($hwnd,0x39);ид клавиши
Sleep(200)
sendkey($hwnd,0x39);ид клавиши
Sleep(200)
sendkey($hwnd,0x39);ид клавиши
Sleep(200)
sendkey($hwnd,0x39);ид клавиши
Sleep(200)
WinMove($hwnd, '', 0, 0)
Sleep(500)
Wend
Func sendkey($hwnd,$key)
DllCall("user32.dll", "long", "PostMessage", "hwnd", $hwnd, "int", 0x0100, "int", $key,"int", 0)
EndFunc


В клиент игры не отсылает команды, а если ставлю курсор на чат, то 9-ки и другие символы пишет и окно двигает.

Пробовал :
Код:
WinWaitActive('client')
$hwnd = WinGetHandle('client')
WinMove($hwnd, '', 10, 10)
Sleep(2000)
While 1 = 1
ControlSend("client", "", "", "{9}")
Sleep(500)
Wend
Func sendkey($hwnd,$key)
DllCall("user32.dll", "long", "PostMessage", "hwnd", $hwnd, "int", 0x0100, "int", $key,"int", 0)
EndFunc

та же история...

Кстати обычным Send клавиши посылает, но нужно, что-бы окно было свернуто.
Подскажите, пожалуйста как это обойти или хотя-бы куда копать, спасибо.

Еще обнаружилась интересная особенность с экранной клавиатуры так-же не посылает , только в чат.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Как сделать ControlSend , если Control не определяеться?

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
Z

zuroin

Новичок
Сообщения
8
Репутация
0
Re: Как сделать ControlSend , если Control не определяеться?

Вроде-как все исправил, но отвечать по всей видимости все бояться.
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Re: Как сделать ControlSend , если Control не определяеться?

а что тут отвечать то? ничего толком не ясно... как это у окна нет никаких опознавательных знаков? само окно то есть?
 
Автор
Z

zuroin

Новичок
Сообщения
8
Репутация
0
Re: Как сделать ControlSend , если Control не определяеться?

Окно есть, но Control не определяет.
Только аттрибуты Window/
Это игра Blood and Soul.
Bs.ru


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

Попробовал сделать еще так :

Код:
$sKey = 0x39

Sleep(2000)
ControlSend("[CLASS:Client]", "", "", $sKey)


Опять-таки послыает только , если ставить курсор на чат...

Код:
$aWinList = WinList('proga')
$pid = WinGetProcess("proga")
For $i = 1 To $aWinList[0][0] Step +1
    If WinGetProcess($aWinList[$i][1]) = $Pid Then
        ControlSend($aWinList[$i][1], '', '', '{ENTER}')
        ControlSend($aWinList[$i][1], '', '', '{TAB}')
        ControlSend($aWinList[$i][1], '', '', '{F1}')
        Sleep(1000)   
        ExitLoop
    EndIf  
Next

Снова-таки, только в чат, в клиент клавиши не посылает
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Как сделать ControlSend , если Control не определяеться?

Если в теме упоминается игра, то тема должна быть названа соответствующим образом. И еще тред стартеру не плохо было бы почитать про эти самые контролы хоть где-нибудь т.к. BS - полноценная, хоть и убогая игра, со своим клиентом. При таком раскладе, отправить ControlSend ты можешь лишь в окно само по себе, но не в какой-нибудь определенный объект внутри него, т.к. у игр свои, уникальные ID которые командам WinAPI не доступны. А если же у тебя даже отправка контролсенда просто тупо в окно не проходит, тут уже вероятнее всего стоит защита и копать надо в другом направлении.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


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

"Как сделать ControlSend , если Control не определяеться?" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Автор
Z

zuroin

Новичок
Сообщения
8
Репутация
0
Название темы поправил.
Я прочитал про ControlSend, спасибо.
Как раз вся соль в том, что ControlSend отправляеться в окно, почти всеми методами, которые я пробовал. Но срабатывает только в том случае, если ставлю курсор на чат( есть скил который забинден на 1, если ставлю курсор в чат , то пишет "11111111"), но если чат не активен, то клиент не воспринимает контролы.
И повторюсь, что командой Send удачной посылает , правда при активном окне.

Понял, нужно копать в другом направлении, дайте направление и я попробую, не из ленивых.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну думаю для начала надо узнать какая защита стоит на этом BS, а далее уже гуглить по интернету как она снимается. При старте игры вероятнее всего там пол часа грузится гейм гвард, вот его то название тебе и надо узнать.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Явной защиты там нет при запуске ....поковырявшись в памяти тоже ничего не нашел ..как вариант так как игры BS и loong online абсолютно одинаковы устроенны (движок один и тот же ) попробуй обойти вариант с directinput..где то тема на форуме была...вроде прокатывало (но помню также сколько не искал offset в памяти так и не нашел ,для обеих этих игр)
 
Автор
Z

zuroin

Новичок
Сообщения
8
Репутация
0
Попробовал directinput.
Читал в этой(http://autoit-script.ru/index.php/topic,8460.msg60064.html#msg60064) теме.

Все как было посылает только, если курсор в чате.
Хотя в программе написанно"Не завершайте работу программы. Выполняеться отправка сообщений.



Заметил интересный ньюанс клиент использует свои msvcr80.dll и msvcp80.dll в тот момент как directinput использует системные msvcr100.dll и msvcp100.dll.
если удалить библиотеки из папки игры они ДО запуска игры восстанавливаються.
Может как-то можно обойти этот момент?)
Что-то мне подсказывает, что это может решить вопрос...
Библиотеку удалить вышло, но консоль всеравно не реагирует, получаеться собака зарыта не в DirectInput
 
Верх