C# 使用切换使透明/可点击的VB.net窗体可点击

C# 使用切换使透明/可点击的VB.net窗体可点击,c#,vb.net,C#,Vb.net,因此,我正在开发一个透明的附加组件VB.net程序,只有在单击shift时才能单击该程序。例如,它只会停留在那里,但单击会通过它,除非我按住shift f.E 我看到了并测试了代码, 然而,我试图改变一些控制,但没有一个能够给我一种“切换”。我能为它做些什么 欢迎用C#回答,如果不能用VB编写C#,我也可以编写C# 编辑:我一直试图使用的代码是 Imports System.Runtime.InteropServices Public Class Form1 Private Initial

因此,我正在开发一个透明的附加组件
VB.net程序
,只有在
单击shift
时才能单击该程序。例如,它只会停留在那里,但单击会通过它,除非我按住shift f.E

我看到了并测试了代码,

然而,我试图改变一些控制,但没有一个能够给我一种“切换”。我能为它做些什么

欢迎用C#回答,如果不能用VB编写C#,我也可以编写C#

编辑:我一直试图使用的代码是

Imports System.Runtime.InteropServices

Public Class Form1

Private InitialStyle As Integer
Dim PercentVisible As Decimal

Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    InitialStyle = GetWindowLong(Me.Handle, -20)
    PercentVisible = 0.8

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

    SetLayeredWindowAttributes(Me.Handle, 0, 255 * PercentVisible, &H2)

    Me.BackColor = Color.Red
    Me.TopMost = True
End Sub

<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

End Class
导入System.Runtime.InteropServices
公开课表格1
作为整数的私有InitialStyle
显示为十进制的百分比
私有子表单_Load(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
InitialStyle=GetWindowLong(Me.Handle,-20)
可见百分比=0.8
SetWindowLong(Me.Handle,-20,初始样式或&H80000或&H20)
SetLayeredWindowAttributes(Me.Handle、0、255*PercentVisible和H2)
Me.BackColor=Color.Red
Me.TopMost=正确
端接头
公共共享函数GetWindowLong(ByVal hWnd作为IntPtr,ByVal nIndex作为Integer)作为Integer
端函数
公共共享函数SetWindowLong(ByVal hWnd作为IntPtr,ByVal nIndex作为Integer,ByVal dwNewLong作为Integer)作为Integer
端函数
公共共享函数将LayeredWindowAttributes(ByVal hWnd作为IntPtr,ByVal crKey作为整数,ByVal alpha作为字节,ByVal dwFlags作为整数)设置为布尔值
端函数
末级
编辑2:我需要它能够使控件也可以单击

例如:


可以设计一个倒计时时钟,用户将在其屏幕上看到,但如果他在该区域单击,则不会发生任何事情,并且单击将通过,如果用户想要与程序交互,他将按住Shift键,并且程序现在可以单击

您需要删除
WS_EX_TRANSPARENT
窗口样式,以使其对鼠标可见。因此,如果我删除它,它应该可以工作吗?让我测试一下,我有点迷路了。你如何继续移除它?我所使用的代码并不是我所相信的。选中编辑。