首先,我是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!
有人可以告诉我为什么并可能帮助我理解这个问题吗?
非常感谢
编辑:根据max
的要求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的问题,是不起作用的计时器。
答案 0 :(得分:3)
是的,这不能在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。也可以启用编辑+继续,你会喜欢它。
请注意,您的GetAsyncKeyState()声明几乎肯定也是错误的。它返回Short,而不是Integer。
答案 1 :(得分:0)
尝试以这种方式声明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)