Таймер и 64-битный процессор, я озадачен - PullRequest
0 голосов
/ 30 сентября 2010

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

На моем компьютере все хорошо и красиво, потом я компилирую, перемещаю его в конечный пункт назначения, и я не работаю! Сначала я подумал, что это проблема ОС, но на обеих машинах есть win7, потом я подумал, что это проблема компиляции, установил Visual Studio на другом ПК, перекомпилировал все еще без удачи, потом меня осенило, может это проблема 32 бит против 64 бит?

К сожалению, у меня недостаточно знаний об этом, и поэтому я прошу вас.

Код выглядит так:

Private Sub mainTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mainTimer.Tick

Dim keyStart As Boolean
keyStart = GetAsyncKeyState(Keys.A)
If keyStart = True Then
    timeClicker.Enabled = True
    timeClicker.Start()
End If

Dim keyStop As Boolean
keyStop = GetAsyncKeyState(Keys.S)
If keyStop = True Then
    timeClicker.Stop()
    timeClicker.Enabled = False

End If

End Sub

Private Sub timeClicker_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timeClicker.Tick
    mouse_event(mouseclickdown, 0, 0, 0, 0)
    mouse_event(mouseclickup, 0, 0, 0, 0)
End Sub

MainTimer имеет интервал 100, а timeClicker имеет интервал 10, оба они объявлены в проекте формы (не в коде). MainTimer работает отлично (я провел тесты), это timeClicker, который вообще не работает!

Может кто-нибудь сказать мне, почему и, возможно, помочь мне понять проблему?

Большое спасибо

РЕДАКТИРОВАТЬ: в соответствии с макс.

Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwExtraInfo As Long)

Private Const mouseclickup = 4
Private Const mouseclickdown = 2

Кстати, не проблема mouse_event, таймер не работает.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

Да, это не может работать на 32-битной машине, ему удается прокрутить на 64-битной машине, но это просто удача.Ваше объявление pinvoke относится к эпохе VB6, оно совершенно неверно для VB.NET.Остерегайтесь этого, есть много ненужных объявлений.Сайт pinvoke.net - хорошая ставка, чтобы сделать это правильно.Исправление:

Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Integer, ByVal dx As Integer, _
    ByVal dy As Integer, ByVal cbuttons As Integer, ByVal dwExtraInfo As IntPtr)

Еще одна вещь, которую вы хотите сделать на своем компьютере разработчика, чтобы вы могли отладить это для 32-битной машины, - это Project + Properties, вкладка Compile, прокрутка вниз, Advanced Compile Options, Target CPU =x86.Также включите Edit + Continue, вам это понравится.

Обратите внимание, что ваше объявление GetAsyncKeyState () также почти наверняка неверно.Возвращает Short, а не Integer.

0 голосов
/ 30 сентября 2010

Попробуйте объявить mouse_event следующим образом:

Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cbuttons As Integer, ByVal dwExtraInfo As IntPtr)

И назовите это так:

mouse_event(0, 0, 0, 0, IntPtr.Zero)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...