vb.net通过Windows窗体单击,只需单击鼠标右键或鼠标左键

时间:2018-07-24 06:28:32

标签: vb.net

here所述,我设法拥有一个可以单击的Windows窗体。

我(对于这个问题,我认为大部分)相关的代码部分如下:

首次导入:

...
Imports System.Runtime.InteropServices
...

然后定义和导入DLL

...
Private InitialStyle As Integer
Dim PercentVisible As Decimal
...
<DllImport("user32.dll", EntryPoint:="GetWindowLong")> Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="SetWindowLong")> Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="SetLayeredWindowAttributes")> Public Shared Function SetLayeredWindowAttributes(ByVal hWnd As IntPtr, ByVal crKey As Integer, ByVal alpha As Byte, ByVal dwFlags As Integer) As Boolean
End Function
...

最后使用它

...
InitialStyle = GetWindowLong(Me.Handle, -20)
PercentVisible = 0.8
SetWindowLong(Me.Handle, -20, InitialStyle Or &H80000 Or &H20)
SetLayeredWindowAttributes(Me.Handle, 0, 255 * PercentVisible, &H2)
...

如前所述,此代码使单击Windows窗体成为可能,因此单击到达位于Windows窗体后面的程序。在我看来,最好将该功能描述为部分或整个显示器的彩色滤光片。

是否可以通过仅通过表格传递左击的方式来修改代码?需要鼠标右键才能打开上下文菜单等。

1 个答案:

答案 0 :(得分:0)

如果要接收鼠标事件,则必须像这样从窗口样式中删除&H20

SetWindowLong(Me.Handle, -20, InitialStyle Or &H80000)

但是这可以防止所有鼠标事件在表单中传播。现在,您可以根据需要处理事件。而且,您必须将与鼠标左键单击相关的事件全部传播给其他应用程序。