说明:
本案例基于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):github.com/sysdzw/SetW…