Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多个conemu窗口-如何区分?_Python_Windows_Autohotkey_Pywinauto_Conemu - Fatal编程技术网

Python 多个conemu窗口-如何区分?

Python 多个conemu窗口-如何区分?,python,windows,autohotkey,pywinauto,conemu,Python,Windows,Autohotkey,Pywinauto,Conemu,Windows 8.1,ConEmu 170316[32]{Preview} 我有多个Conemu实例在运行,其中每个实例等于一个“工作区” 我希望能够使用autohotkey或pywinauto切换到此工作区。然而,它们需要一个选择正确窗口的标准,并且通常我使用窗口标题和/或窗口类类型的组合 conemu中是否有任何设置可以帮助我实现窗口选择的标准标识?如果没有,我将不得不在启动conem窗口时在某个地方写下PID,然后在窗口激活时阅读它以打开正确的窗口。我只能说pywinauto。调用app

Windows 8.1,ConEmu 170316[32]{Preview}

我有多个Conemu实例在运行,其中每个实例等于一个“工作区”

我希望能够使用autohotkey或pywinauto切换到此工作区。然而,它们需要一个选择正确窗口的标准,并且通常我使用窗口标题和/或窗口类类型的组合


conemu中是否有任何设置可以帮助我实现窗口选择的标准标识?如果没有,我将不得不在启动conem窗口时在某个地方写下PID,然后在窗口激活时阅读它以打开正确的窗口。

我只能说pywinauto。调用
app=Application().start('ConEmu64.exe')
pywinauto已记住进程PID,并且每个新的WindowsSpecification对象都采用此PID。当然,只有在您控制ConEmu(或任何其他应用程序)的启动时,这才是真的。有关更多详细信息,请参阅

方法
app.connect(title=“some unique tab name”)
也将记住
app
对象中的PID。但如果有几个实例具有相同的标题,则需要使用
found\u index=0
标准来消除歧义。或者右键单击选项卡并选择“重命名选项卡…”上下文菜单项,以更改窗口标题


我看了一眼科内姆。工具栏和选项卡甚至对Spy++也是可见的。因此,大多数操作都可以自动化。只是不确定选项卡中的控制台。如果您想键入一些命令,最好使用标准的Python模块
子流程
,因为控制台程序的GUI自动化看起来非常奇怪

(ty)-参见选项1:

1) 使用-title“Window name”开关显式设置新ConEmu实例的窗口标题。下面的示例启动新的ConEmu窗口,标题为“我的服务器”,并在其中使用ssh连接到your.server.com。不管您是运行另一个选项卡还是任务中的多个选项卡,ConEmu窗口标题仍然是我的服务器。因此,您可以依靠标题来选择类名为VirtualConsoleClass的窗口

选项2也有效。我必须(1)创建配置,(2)在ahk/pywinauto中硬编码散列id。仅使用窗口标题名称似乎是正确的做法,在我的情况下,应用程序id设置似乎有些过分

2) Windows7引入了AppUserModelID。ConEmu使用可执行路径名和一些开关(如-config,-loadcfgfile,-quake)创建一个散列来形成AppID,您可以在About/SysInfo中看到。当前版本显示1D5372066082F23B41BA6AAA278E56E9D::163。后面的::163描述了ConEmu内部协议版本,该版本将来可能会(而且很可能会)更改。散列本身应保持不变。您可以使用Windows API函数GetApplicationUserModelId从运行ConEmu进程中查询ID


谢谢大家!

我认为这个问题更适合超级用户,因为你问的是程序设置,而不是编程。@BrenBarn不一定。我愿意接受其他建议,这些建议不一定只涉及更改设置。如果我必须用python编写一些代码来绕过这个限制(我建议使用一种非常简单的方法),我很乐意这样做。接受建议。如何运行ConEmu实例?我不明白你为什么要使用外部热键管理器来激活ConEmu窗口…这里有一个常见问题解答:@Maximus谢谢你的精彩ConEmu。谢谢你富有洞察力的回复。“只有当您控制ConEmu(或任何其他应用程序)的启动时,这才是真的。”->是的,我不一定要将其保存在内存中,我可以将激活程序保存在一个众所周知的位置(可能会有所不同)。或者右键单击选项卡并选择“重命名选项卡…”上下文菜单项以更改窗口标题。“->选项卡以编程方式命名。我不想点击任何东西。在任何时间点,任何选项卡都可能已被选中,因此我需要检查窗口表,以便与我知道的该会话的所有选项卡进行匹配。“我看了一眼科内姆。工具栏和选项卡甚至对Spy++也是可见的。因此,大多数操作都可以自动化。只是不确定选项卡中的控制台。如果您想键入一些命令,最好使用标准的Python模块子流程,因为控制台程序的GUI自动化看起来非常奇怪“谢谢,这很有意思。我只是需要现在激活正确的窗口(我的“工作区”),然后我可以使用conemu本机机制导航选项卡。您还可以从python动态构建conemu命令行/命令文件(例如,我在指定的文件夹中为每个git repo构建一组git控制台)。非常简单且功能强大。如果使用不同的
-config
开关,您将拥有不同的AppID。