按字母顺序将应用程序窗口并排排序

2024-05-16 04:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个蝙蝠可以同时启动35个屏幕共享连接。现在,我右键单击任务栏并“显示窗口并排显示”,但顺序有点随机。我想知道是否有一种程序化的方法来调整显示和排序,无论是从命令行、Python、C++或java、Java,还是任何语言都可以工作得最好,我对环境不挑剔。计算机运行的是Windows7,如果这是相关信息的话。有没有人知道什么API或东西可以指引我正确的方向?在


Tags: 方法命令行语言环境屏幕排序顺序计算机
2条回答

试试看

来源:https://github.com/atinfo/awesome-test-automation

好吧,各位,我用的是pywinauto,在四处搜寻之后,我找到了答案。对于每个人来说,这不是一个完美的模板,但是我将解释我的思维过程和一些片段。我尽我所能从各个角度去订窗户。但是我忽略了一个细节:你需要它们的顺序与它们在图形上的顺序完全不一致。我建议您对两个数组进行排序,一个基于您想要它们的顺序(即按标题、文本或类),另一个基于所有位置的顺序。不管怎么说,按密码

以下是如何与任务栏交互以设置所有窗口:

import pywinauto
from pywinauto import taskbar

explorer = pywinauto.application.Application.connect(path = "explorer.exe")
pywinauto.controls.HwndWrapper.HwndWrapper(pywinauto.taskbar.TaskBarHandle()).RightClick()
explorer.PopupMenu.Menu().GetMenuPath("Show windows side by side")[0].Click()

可能是一种更干净的方法,但这对我有效。在

接下来,收集您关心的窗口:

^{pr2}$

这只会找到所有的窗口。您可以缩小您想要的范围,在文档中有更多的内容,但side-by-side并不是一开始就具有排他性的。在

我在这里列出了两个不同属性的列表,一个是带有程序句柄和程序标题的数组列表,另一个是基于当前实例窗口的坐标列表:

for i in range (0, len(initlist)):
    orderlist.append([initlist[i], pywinauto.controls.HwndWrapper.HwndWrapper(initlist[i]).Texts(), pywinauto.controls.HwndWrapper.HwndWrapper(initlist[i])])
    poslist.append(pywinauto.controls.HwndWrapper.HwndWrapper(initlist[i]).Rectangle())

现在,我发现用图形表示它们的最好方法是在行之前遍历列。有些人可能不同意,但Windows并不总是拥有与我所看到的完全相同的行数。因此,我们需要对第一个列表进行排序:

orderlist = sorted(orderlist, key=lambda x: x[1])

按标题索引排序。然后我们对第二个列表进行排序:

poslist = sorted(poslist, key=lambda x: x.top + (x.left * 10000))

注意我是如何加权x.left的。我们实际上没有二维数组或网格要排序,所以我对左边进行加权,因为下一列中的任何内容都在列表的下方。在

最后,我们再次遍历列表以交换窗口:

for x in range(0, len(orderlist)):
    orderlist[x][2].MoveWindow(poslist[x].left, poslist[x].top, poslist[x].width(), poslist[x].height())

这将把orderlist坐标中的所有窗口设置为我们想要的所有窗口的排序坐标。作为额外的奖励,对于那些不均匀的窗口,它将调整它们的大小,使它们在视觉上与并排一样。在

希望这是清楚的,并帮助某人在未来。在

相关问题 更多 >