鼠标事件后右键和左键单击交换

时间:2014-06-09 21:57:07

标签: vb.net mouseevent

我使用的是Windows 7和VB2010,但我从来没有研究过它,我是一个autodidact(我从互联网上复制一些代码然后将它粘贴在一起,希望它能正常工作)而且我不会&#39甚至说英语,但希望你能理解我在写什么。

我试图创建一个在另一个窗口中点击的程序(另一个进程),它似乎工作得很好。但是当过程结束时我需要关闭并重新启动它 但这里有一个错误:无论我在哪里尝试模拟点击(现在我点击桌面),它都无法正常工作。相反,当我模拟左键单击桌面菜单打开(具有桌面选项的那个,如创建新文件夹,更改桌面背景等),如果我尝试点击某些内容,即使在我的表单上,也不会发生任何事情(即使我将鼠标放在按钮上,它也不会突出显示)。当我尝试模拟右键时,也没有任何事情发生 使其恢复正常的唯一方法是物理上正确,然后用鼠标左键单击。但我需要这样才能在没有我干预的情况下发生有什么方法可以解决这个问题吗? (有时即使您在桌面上模拟了十几个随机和左右的左键和右键,也会发生这种情况) 这是我的代码:

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 Integer)
Private Const mouseclickdown = 2
Private Const mouseclickup = 4
Private Const rightclickdown = 8
Private Const rightclickup = 10


Cursor.Position = New Point(x,y)
System.Threading.Thread.Sleep(100)
mouse_event(mouseclickdown, 0, 0, 0, 0)
System.Threading.Thread.Sleep(100)
mouse_event(mouseclickup, 0, 0, 0, 0)


Cursor.Position = New Point(x,y)
System.Threading.Thread.Sleep(100)
mouse_event(rightclickdown, 0, 0, 0, 0)
System.Threading.Thread.Sleep(100)
mouse_event(rightclickup, 0, 0, 0, 0)

1 个答案:

答案 0 :(得分:0)

你的代码很接近,但我发现了一些潜在的问题。

首先,rightclickup应为16,而不是10.您可能在网上找到的代码片段通常使用十六进制表示这些常量。十六进制的16看起来像数字10。

其次,C#中的mouse_event()声明实际上使用了指针作为最后一个参数。我传入一个新的IntPtr实例,而不是传入零。我现在还不确定VB的等价物;这可能不是一个真正的问题。

尝试更改该常量,并告诉我它是否适用于你。