Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как вытащить значения скорости из игр? Добавлено: 05.07.10 13:09  

Автор вопроса:  gryphon
Вот на днях закончил подключение приборки к компу. В принципе, все нормально работает и с этим все понятно. Теперь остается вопрос с написанием специальной программы, которая будет вытаскивать значения скорости (можно еще и тахометра) из какой-нить игры. Может кто-нибудь помочь мне с этим делом? Может у кого-то есть свои собственные наработки и пожелания...
P.S. Игра значения не имеет.

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 05.07.10 16:17
Можно попробовать метод ArtMoney - двигаться/не двигаться, найти адрес координат в памяти, рассчитать скорость

Ответить

Номер ответа: 2
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #2 Добавлено: 05.07.10 17:44
Не шути так больше :), как расчитать? Исходя из какого соотношения пространства и времени в игре и реальности?
В самом лучшем случае для твоего варианта придется сначала выбрать игру из списка "поддерживаемых".
Проще искать именно скорость, она должна быть.

Ответить

Номер ответа: 3
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #3
Добавлено: 05.07.10 20:26
В ArtMoney можно искать > или <.
Повышать и понижать скорость, если конечно пауза есть. Наверняка какая-нибудь скорость в переменной храниться.
Но это очень долго придется делать.

Ответить

Номер ответа: 4
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #4 Добавлено: 05.07.10 21:58
В инэтах масса тренеров для самых разных гонок и не только, есть и спидометры.
Но я думаю ТС больше интересует код получения значений из памяти других прог.

Ответить

Номер ответа: 5
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #5
Добавлено: 05.07.10 23:03
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
  3. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAdress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  5. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddess As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWriten As Long) As Long
  6. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  7. Private Const Process_All_Access As Long = &H1F0FFF
  8.  
  9.  
  10. Private Function GetByte(Txt As String, num As Integer) As Byte
  11. GetByte = Asc(Mid$(Txt, num, 1))
  12. End Function
  13.  
  14. Private Function Hex2Str(ByVal data As String) As String
  15. Dim i As Integer
  16. If Len(data) \ 2 = Int((Len(data) - 1) \ 2) Then data = 0 & data
  17. For i = 1 To Len(data) Step 2
  18. Hex2Str = Chr(Val("&H" + Mid$(data, i, 2))) & Hex2Str
  19. Next i
  20. End Function
  21.  
  22. Private Function Str2Hex(ByVal Txt As String) As String
  23. Dim i As Integer
  24. Dim buff As String
  25. For i = 1 To Len(Txt)
  26. buff = Hex(GetByte(Txt, i))
  27. If Len(buff) = 1 Then buff = "0" & buff
  28. Str2Hex = buff & Str2Hex
  29. Next i
  30. End Function
  31.  
  32. Private Function WriteMemory(WindowName As String, Adress As Long, Value As Long)
  33. Dim hWnd As Long, pid As Long, pHandle As Long
  34. hWnd = FindWindow(vbNullString, WindowName)
  35. If (hWnd = 0) Then
  36. MsgBox "Окно не найдено! Вероятно, программа не запущена", 32
  37. Exit Function
  38. End If
  39. GetWindowThreadProcessId hWnd, pid
  40. pHandle = OpenProcess(Process_All_Access, False, pid)
  41. WriteProcessMemory pHandle, Adress, Hex2Str(Hex(Value)), 4, 0&
  42. CloseHandle hProcess
  43. End Function
  44.  
  45. Private Function ReadMemory(WindowName As String, Adress As Long)
  46. Dim hWnd As Long, pid As Long, pHandle As Long, str As String * 4
  47. hWnd = FindWindow(vbNullString, WindowName)
  48. If (hWnd = 0) Then Exit Function
  49.  
  50. GetWindowThreadProcessId hWnd, pid
  51. pHandle = OpenProcess(Process_All_Access, False, pid)
  52.  
  53. ReadProcessMemory pHandle, Adress, str, 4, 0&
  54. ReadMemory = Val("&H" + Str2Hex(str))
  55. If Val(ReadMemory) < 0 Then ReadMemory = 65536 + Val(ReadMemory)
  56. CloseHandle hProcess
  57. End Function
  58.  
  59.  
  60. Private Sub cmdRead_Click()
  61. txtMoney.Text = ReadMemory("game13", &H14C514)
  62. End Sub
  63.  
  64. Private Sub cmdWrite_Click()
  65. WriteMemory "game13", &H14C514, Val(txtMoney.Text)
  66. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #6 Добавлено: 06.07.10 06:57
AWP, это написано на VB6? Можете выложить в виде файла проекта? Если что, вот мое мыло gryphon1(собака)bk.ru
P.S. Т.е вполне реально сделать программу под каждую игру?

Ответить

Номер ответа: 7
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #7 Добавлено: 06.07.10 07:06
Кстати, помниться раньше была программа-спидометр для GTA San Andreas, написанная на VB6. Называлась она SaCamHack. Там был и спидометр, и тахометр, и передача. Эх, найти бы исходничек от нее... Как-раз осталось бы перевести на VB.net и дописать ее.

Ответить

Номер ответа: 8
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #8
Добавлено: 06.07.10 12:26
Да тут две кнопки cmdRead, cmdWrite и текстовое поле txtMoney

Ответить

Номер ответа: 9
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #9 Добавлено: 08.07.10 14:53
Сегодня появилась минутка и испробовал данную прогу. Все хорошо, но на VB.NET не работает :( Если у кого есть исходничек под NET, выложите, пожалуйста, сюда. Буду очень благодарен!
В принципе, метода понятна, однако перебрать несколько тысяч адресов будет довольно проблематично. Сегодня решил сделать несколько иначе: я запустил GTASA Speedo и скал значения скорости тут. На машине разогнался до 420км/ч (на спец машинке, ибо другие могут ездить до 270км/ч), проверил и у меня оказалось три адреса. Я проверил все, но скорости тама нету. Парадокс!

Ответить

Номер ответа: 10
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #10 Добавлено: 08.07.10 15:04
Кстати, за ночь вот сие чудо сделал (см. http://radiokot.ru/forum/viewtopic.php?p=510459#p510459). Спидометр-мини! :) Управляется по USB, может принимать значения от 0 до 999. Вводите число и оно отображается на индикатор. Конфигурацию индикатора можно выбрать любую (т.е. индикатор можно подключить к любым ногам, а потом в программке указать, как подключили и все!). Кому интересно, могу исходничек выложить.

Ответить

Номер ответа: 11
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #11 Добавлено: 03.08.10 14:56
УРРРРА! Работает! Таки вычислил я этот поганый адрес! Теперь все работает в реальном времени. В скором времени доделаю приборку. Спасибо всем, кто откликнулся!

Ответить

Номер ответа: 12
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #12 Добавлено: 03.08.10 15:06
Ну сделаешь доску и что?
Ты пытаешься сделать симулятор в кузове реальной машины?

Ответить

Номер ответа: 13
Автор ответа:
 gryphon



Вопросов: 1
Ответов: 9
 Профиль | | #13 Добавлено: 03.08.10 16:30
Теперь возник вопрос с адаптацией данного кода под VB.NET. Кто-нибудь уже делал ReadProcessMemory под NET. Поискал в нете, особо ничего не понял.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам