Imports System.Runtime.InteropServices
Public Class Form1
Private Const hotKey_ClickThruToggle As Integer = 100 ' Our hot key ID
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
' mouse-click-thru is off by default.
Me.Text = "Click-Thru Off"
' register a hot key (Control+Q) to toggle mouse-click-thru option.
If Not RegisterHotKey(Me.Handle, hotKey_ClickThruToggle, fsModifier.CONTROL Or fsModifier.NOREPEAT, CUInt(Keys.Q)) Then
MessageBox.Show("RegisterHotKey 'Control+Q' failed!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
' set default opacity to 0%, opacity can be set using a trackbar.
Me.Opacity = 1D
TrackBar1.Minimum = 0
TrackBar1.Maximum = 8 ' Limit opacity to 80%.
' load an image.
Me.BackgroundImageLayout = ImageLayout.None
Me.BackgroundImage = New Bitmap("m:\Windows_Vista_Logo.jpg")
End Sub
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
' UnRegister our hot key
UnregisterHotKey(Me.Handle, hotKey_ClickThruToggle)
End Sub
' Window messages
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Static clickThruOn As Boolean
If m.Msg = WM_HOTKEY Then
If m.WParam.ToInt32 = hotKey_ClickThruToggle Then ' Control+Q detected.
If Not clickThruOn Then ' set click-thru on.
clickThruOn = True
SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) Or WS_EX_TRANSPARENT)
Me.TopMost = True
Me.Text = "Click-Thru On"
Else ' disable click thru
clickThruOn = False
SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) And Not WS_EX_TRANSPARENT)
Me.Text = "Click-Thru Off"
End If
End If
End If
' proc all msgs.
MyBase.WndProc(m)
End Sub
Private Sub TrackBar1_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll
' set form opacity
Me.Opacity = 1D - (TrackBar1.Value / 10)
End Sub
#Region "API"
Private Const WM_HOTKEY As Int32 = &H312
Private Enum fsModifier As UInt32
NONE = &H0
ALT = &H1
CONTROL = &H2
SHIFT = &H4
WIN = &H8
NOREPEAT = &H4000
End Enum
<DllImport("User32.dll")> _
Private Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Int32, ByVal fsModifiers As UInt32, ByVal vk As UInt32) As Boolean
End Function
<DllImport("User32.dll")> _
Private Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Int32) As Boolean
End Function
Private Const GWL_EXSTYLE As Integer = (-20)
Private Const WS_EX_TRANSPARENT As Integer = &H20
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Integer) As Integer
#End Region
End Class