【问题标题】:vb.net Click through windows form, just right or left mouseclickvb.net 通过windows窗体点击,鼠标右击或左击
【发布时间】:2018-07-24 16:13:11
【问题描述】:

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

我(我认为这个问题最)相关的代码部分如下:

首次导入:

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

然后定义和导入 DLLs

...
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 窗体后面的程序。在我看来,最好将该功能描述为部分或整个显示器的滤色器。

是否有可能以这样的方式修改代码,只在表单中传输左键?需要单击鼠标右键才能打开上下文菜单等...

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    如果你想接收鼠标事件,你必须像这样从你的窗口样式中删除&amp;H20

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

    但这会阻止所有鼠标事件通过您的表单传播。现在您可以根据需要处理事件。而且鼠标左键相关事件必须自己传播给其他应用程序。

    【讨论】:

    • 如何将鼠标点击相关事件传播到其他应用程序?
    • 如果您想弄乱这些 Windows 消息,则必须处理它们。从这里开始找到正确的窗口句柄stackoverflow.com/questions/280818/…,然后使用 SendMessage 传播所有相关事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多