clswindow使用案例:窗口图钉-窗口置顶(含源码)

156 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

说明:

本案例基于clswindow开发的一个小软件,功能是方便的对目标窗口设置置顶还是取消置顶。软件启动后会在每个窗口的标题栏右端加一个置顶功能的小控制块。通常情况下点击它会使得对应的窗口置顶,如果要取消置顶可以再次点击一下。

测试环境:win7x64

提示: 在win10上可能有一些位置遮挡本身的最小化等按钮,后期会调整。

部分代码摘录:

说明: 以下是部分代码摘录,您会看到软件大量使用了SetTop等方法。完整代码可以从底部github获得,里面有直接的编译好的exe可以直接使用。

Private Sub addControlBox()
    Dim w As New clsWindow, s$, v, i%
    w.GetWindowByTitleEx ".+?", 0, s, True, , DisplayedWindow
    v = Split(s, " ")
    For i = 0 To UBound(v)
        If v(i) <> Me.Hwnd Then
            If Not isHasAddControlBox(v(i)) Then
                w.Hwnd = v(i)
                If InStr("|SetWindowTop|Program Manager|", "|" & w.Caption & "|") = 0 Then
                    lngHandleHwnd = w.Hwnd
                    Call createControlWindow
                End If
            End If
        End If
    Next
End Sub

.
.
.

Private Sub setTagPos()
    isClickHandle = True
    wTag.SetTop Not wTag.IsTopmost
    
    Set Image1.Picture = IIf(wTag.IsTopmost, imgAfter.Picture, imgBefore.Picture)
    If wTag.IsTopmost Then
        wTag.SetTop
        wTag.Focus
        wMe.SetTop
    End If
    wTag.Focus
End Sub

Private Sub Timer1_Timer()
    If Not wTag.CheckWindow Then '如果窗口不存在就关闭
        Unload Me
    End If
    
    If wTag.IsForegroundWindow Then '如果当前是活动窗口,那么需要显示并移动控制窗口
        lngLeft = (wTag.Left + wTag.Width) * 15 - Me.Width - 60 * 15
        lngTop = wTag.Top * 15 + 60
        If Me.Left <> lngLeft Or Me.Top <> lngTop Then '位置需要更新时再移动
            Me.Move lngLeft, lngTop
        End If
        Me.Visible = True
        wMe.SetTop
    ElseIf Not wMe.IsForegroundWindow Then
        Me.Visible = False
    End If
    
    If wTag.IsTopmost <> isTop Then
        isTop = Not isTop
        Set Image1.Picture = IIf(isTop, imgAfter.Picture, imgBefore.Picture)
    End If
End Sub


点击下变成置顶,并且图标发生变化:

如果要退出可以点击右下角托盘,选择菜单“退出”

 

软件及源码下载

软件下载: github.com/sysdzw/SetW…
源码(github): github.com/sysdzw/SetW…