Что нового

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

yukuru

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

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

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

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

yukuru

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


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

Belfigor

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

yukuru

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

Belfigor

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

yukuru

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
Код:
_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 598
Репутация
938
Я если честно не помню
Код:
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 598
Репутация
938
Лучше почитать в msdn, я эксперементировал с этой функцией хз сколько лет назад.
 
Автор
Y

yukuru

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

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

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
Оножешь вот: 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 598
Репутация
938
Ну а у меня нет времени, я сижу за компом всего пару часов в день, после вахтовой работы :(
 
Автор
Y

yukuru

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

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

Belfigor

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

По поводу передвижения мыши, думаю есть смысл для решения проблемы попробовать вскрыть память игры, и задавать положение прицела за счет ротации и угла наклона, как вероятнее всего приложение и ориентируется само по себе.
 
Автор
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 598
Репутация
938
Код свой в игры инжектить мне никогда не требовалось, поэтому затрудняюсь ответить, но где-то тут на форуме кто-то пример для PW выкладывал. Я же тебе предлагаю сперва в памяти игры с помощью Cheat Engine покопаться и попробовать писать в нее свои значения для камеры.
 
Верх