none
VB程序频繁切换窗口如何避免“分组相似任务栏按钮”现象 RRS feed

  • 问题

  • 我用的是windows XP SP2
    我用VB写了一个多窗口轮流切换的程序:既我把当前Windows打开的窗口句柄都获取并存为一个long型数组
    用SetCursorPos轮流切换为当前激活窗口,以便我的工作。
    刚开始启动程序工作得都很正常,不过有时,我窗口开多了(有的临时窗口不在数组内)来回切换时,就打不开了!
    窗口明明在任务栏上就是点不开!?右击任务栏上的窗口标题弹出“关闭组”(我已经把“分组相似任务栏按钮”
    复选框勾去掉了啊!)有关的代码如下:
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function GetForegroundWindow Lib "user32" () As Long

    Private arr(10) As Long '窗口句柄数组

    Sub ChangeW() '切换窗口
    Dim a, b, c As Long
    Dim k As Long
    '0:关闭窗口,1:正常大小显示窗口,2:最小化窗口3:最大化窗口
    b = ShowWindow(arr(turns), 1)
    a = SetCursorPos(100 + arect(turns).Left, 20 + arect(turns).Top)
     mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    turns = turns + 1
    If turns > whCount Then
        turns = 0
        For k = 0 To 5  '最小化所有窗口,为下次操作做准备
        b = ShowWindow(arr(k), 2)
        Next
    End If
    Label5.Caption = turns & "/" & whCount
    End Sub


    www.haodd123.com 我是半路出家,而且是自学 学的是C#语言,希望回帖的高手们留意一下,谢谢大家的帮助
    2010年10月14日 18:20

答案

  • 当窗口增多的时候,Windows会把多余的窗口隐藏起来。

    你可以试下点任务栏,取消选择锁定任务栏,然后拖动它的高度,使得它变成2排或者3排,看看是否解决。

    建议不要使用模拟鼠标的方式操作它,有另外两个思路:一个是用 SetForegroundWindow 和 SetWindowPos 直接切换,另一个是任务栏的切换区其实是一个 TabControl,可以使用 FindWindow 依次找到它的 Handle,直接操作。

    2010年10月19日 1:19