Что нового

не определяется мышь

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Есть некоторые игры в которых Мышка заменяется прицелом. и не работает.

проще гоовря когда мы "ручками" ведет мышь, - на мониторе мышь остается неподвижной, а лишь меняется изображаение (сдигается влево или вправо в зависиомсти от того куда двигаем мышь).

как в таких ситуациях поступать?

пример игры World of Tanks
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
проблема не достаочно понятна описана, или никто это еще не решил?


можно ли хобя сделать MouseMove() только не К х,у а просто в право, влево или вниз...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
x+1 y+1 в цикле попробуй. Тут достаточно обсасывалась тема WoT, и вообще твоя проблема в целом. Ищи по форуму.
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
а можно ли как нибудь отправить в процесс инормацию, что мыш переместилась?
тоесть мышь даже может не перемешаться...просто отправить инормацию процессу
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
через user32.dll так можно сделать если память мне не изменяет.
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
можешь показать код реализации, если не трудно?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
_MouseOp($WinTi, "Click", "Left", 2, 58, 91)
_MouseOp($WinTi, "Drag", "Left", 1, 100, 100, 200, 200)
Func _MouseOp($WinTi,$CType,$Button,$Clicks, $X1, $Y1 ,$X2=0 , $Y2=0)
Local $LB = 0x0001 ;LeftButton
Local $RB = 0x0002 ;RightButton
Local $LBDown = 0x0201 ;LB Down
Local $RBDown = 0x0204 ;RB Down
Local $LBUp = 0x0202 ;LB Up
Local $RBUp = 0x0205 ;RB Up
Local $MM = 0x0200 ;MouseMove
Local $i = 0
Select
Case $Button = "Left"
$Button = $LB
$ButtonDown = $LBDown
$ButtonUp = $LBUp
Case $Button = "Right"
$Button = $RB
$ButtonDown = $RBDown
$ButtonUp = $RBUp
EndSelect
Select
Case $CType = "Click"
For $i = 1 to $Clicks
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi),"int",$MM,"int",0,"long",_MakeLong($X1, $Y1))
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$ButtonDown,"int",$Button,"long",_MakeLong($X1, $Y1))
DllCall("user32.dll", "int", "SendMessage","hwnd",WinGetHandle( $WinTi ),"int",$ButtonUp,"int",$Button,"long",_MakeLong($X1, $Y1))
Next
Case $CType = "Drag"
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi),"int",$MM,"int",0,"long",_MakeLong($X1, $Y1))
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$ButtonDown,"int",$Button,"long",_MakeLong($X1, $Y1))
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$MM,"int",0,"long",_MakeLong($X2, $Y2))
DllCall("user32.dll", "int", "SendMessage","hwnd",WinGetHandle( $WinTi ),"int",$ButtonUp,"int",$Button,"long",_MakeLong($X2, $Y2))
EndSelect
EndFunc
Func _MakeLong($LoWord,$HiWord)
Return BitOR($HiWord*0x10000,BitAND($LoWord,0xFFFF))
EndFunc

За основу использовался UDF отсюда: http://www.autoitscript.com/forum/index.php?showtopic=7112&hl=EVE%20Online
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
тяжко...
особенно когда английский не знаешь)

код ты вырвал я такЪ понял.

при компиляции он матерхнулся на отсутсвие $WinTi в первых строчках. он должен нести название Окна\процессса?

какие библиотеки надо подключить?


---------
код для осознания моего тяжеловат.
мы назначили переменные после нажатие левой или правой. это в первом селекте.
а во втором ...
Клик и драг? что мы делаем? считываем из ДЛЛ или вписывает туда?


проще говоря- обХЯсни тупому пошагово два момента

1.
Код:
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$MM,"int",0,"long",_MakeLong($X2, $Y2))


2.
Код:
BitOR($HiWord*0x10000,BitAND($LoWord,0xFFFF))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я если честно не помню
Код:
WinGetHandle($WinTi)

Отправляет хендл указанного окна в длл
$MM - код передвижения мыши
Код:
_MakeLong($X1, $Y1)

координаты куда двинуть
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
ну как раз это мне было понятно...
только КОД ММ=0x0200 , - принципиально какое значение,оно несет какуюто функциональную нагрузку, кроме ИН(ID)

мне болеее непонятно ЗАчем побитовое сложение в функции МэйкЛонг - BitOR($HiWord*0x10000,BitAND($LoWord,0xFFFF))
а также что мы здесь получаем или отдаем - "int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$MM,"int",0,"long"
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
пробывал
Код:
$return = DllCall("user32.dll", "int", "SetCursorPos","int","300","int","500")


не помогло
а MoveTo или Mouse Events нам не поможет вместо SendMessage?
как это можно реализовать?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Лучше почитать в msdn, я эксперементировал с этой функцией хз сколько лет назад.
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Белфигор, ты не поверишь, но я перерыл твои темы даже за 2009 год.
иначе я бы тебя такЪ не мучил.

перерыл на сайте майкрософт эту информацию.
многие опросы мне до сих пор не понятны.

и мне очен нужна помощь. задача ж проста. сообщить окну(процессу) что мышь двигается в том то или томто направлении.
проблеама только в том что этот процесс перехватывает видимо ккординаты мыши раньше поэтому способы стандарнтые не помогюат менно поэтому была идея через длл.

бЪясни мне как эот работает, пожалуйста(я про тот код чтот ы мне скидывапл раньше)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Оножешь вот: http://www.autoitscript.com/forum/topic/7112-minimized-clicking-great-for-game-bots/page__hl__EVE%20Online
Там под д2 изначально это делали, и не факт что оно обойдет защищенный процесс, на EVE Online оно работало в текущем виде, глубже я не копал. Почитай тему на оффсайте, там и баги вроде описываются. А я прихожу щас с работы и на маломальски сложный вопрос ответить у меня уже нет сил.
+ у меня на момент написания сообщения 23:22 и мне пора спать :о
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
тебе не говрили что ты моральный садист?
--
на протяжении четырех дней уже листаю эти темы.
не могу просто разобраться
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну а у меня нет времени, я сижу за компом всего пару часов в день, после вахтовой работы :(
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
а если мы немножко переделаем идею.

Можем ли мы запретить программе получать данные из user32.dll к примеру.
и самим передавать ей эти данные?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если честно без понятия.

По поводу передвижения мыши, думаю есть смысл для решения проблемы попробовать вскрыть память игры, и задавать положение прицела за счет ротации и угла наклона, как вероятнее всего приложение и ориентируется само по себе.
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
та же проблема("не определяется мышь") стоит не только поклоников World of tanks но и Cs.

Белфигор, подскажи, как мы можем сделать "инЪекцию", и втюхать часть своего кода в программу?


-----
попробывал включить блокиратор движения мыши. вне игры мышь стоит. в игре - двигается

Код:
#include <GUIConstantsEx.au3>
#include "MouseOnEvent.au3"

_Example_Intro()
;_Example_Limit_Window()

Sleep(3000)	

Func _Example_Intro()
;MsgBox(64, "Attention!",    "Блокируем нажатие (удерживание) главной (левой) кнопки мышки, и при событии вызываем нашу функцию.", 5)

    ;Disable Primary mouse button *down*, and call our function when mouse button *down* event is recieved
    _MouseSetOnEvent($MOUSE_MOVE_EVENT, "MousePrimaryDown_Event")
    Sleep(15000)
    _MouseSetOnEvent($MOUSE_MOVE_EVENT) ;Разблокировка кнопки мышки

    ToolTip("")


EndFunc

Func MousePrimaryDown_Event()
    ToolTip("Primary Mouse Down Blocked")
EndFunc

Func MouseSecondaryUp_Event()
    ToolTip("Secondary Mouse Up Blocked")
EndFunc

Func _Quit()
    Exit
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код свой в игры инжектить мне никогда не требовалось, поэтому затрудняюсь ответить, но где-то тут на форуме кто-то пример для PW выкладывал. Я же тебе предлагаю сперва в памяти игры с помощью Cheat Engine покопаться и попробовать писать в нее свои значения для камеры.
 
Верх