Python Win32com与反射桌面的接口

Python Win32com与反射桌面的接口,python,attachmate-extra,attachmate-reflection,Python,Attachmate Extra,Attachmate Reflection,我运行了许多python脚本和程序来聚合和编辑Attachmate Extra中的日期。直到最近,我的公司还在使用旧版本的Attachmate Extra。我正在测试新版本(Reflection Desktop v.16.2),我的脚本不再工作。我借助于对这些问题的有益建议建造了它们。我希望能够控制(刮,写等)在新版本的屏幕 这就是我现在的位置。运行此代码将创建一个新窗口: system = win32com.client.Dispatch("ReflectionIBM.Session

我运行了许多python脚本和程序来聚合和编辑Attachmate Extra中的日期。直到最近,我的公司还在使用旧版本的Attachmate Extra。我正在测试新版本(Reflection Desktop v.16.2),我的脚本不再工作。我借助于对这些问题的有益建议建造了它们。我希望能够控制(刮,写等)在新版本的屏幕

这就是我现在的位置。运行此代码将创建一个新窗口:

system = win32com.client.Dispatch("ReflectionIBM.Session")
system.Visible = True
…但从那以后,我无法执行以前使用的任何命令。例如,运行这个

system.MoveCursor(11, 65)
在模拟器中创建一个新选项卡,该选项卡不连接到会话。 我已经查阅了所有的反射文档,寻找答案。这让我相信旧的会话方法不再必要,但我不确定。我认为我包装了正确的对象,文档中说遗留命令仍然有效,但我还没有弄清楚如何链接它们

以下是我之前用于连接Attachmate的行,仅供参考:

system = win32com.client.Dispatch("EXTRA.System")
sess0 = system.ActiveSession
Screen = sess0.Screen
感谢您的帮助。我一直在搜索win32com浏览器中的命令列表,并在注册表中查找可用的类,但我不知道要查找什么。谢谢大家!

编辑:

我以前在Attachmate中使用了几个函数来读取、写入和移动光标。例如:

def write(screen,row,col,text):
    screen.row = row
    screen.col = col
    screen.SendKeys(text)

write(screen, 10, 65, "test")
有没有办法让它在反射中再次工作?

我仍然不知道为什么它会这样工作。在VBA中,GetObject方法在“反射工作区”上工作,但在python中,它没有生成我可以找到的任何可用属性。对于python,要获取活动会话对象,我必须使用EXTRA.System:

from win32com.client.gencache import EnsureDispatch
screen = EnsureDispatch("EXTRA.System").ActiveSession.Screen
从那里看,代码似乎与VBA基本相同

screen.GetString(row, col, len)
screen.PutString(data, row, col)
screen.SendKeys('<PF1>')
然后,要获取活动视图,请执行以下操作:

screen = system.GetObject("Frame").SelectedView.Control.Screen
或特定编号视图:

screen = system.GetObject("Frame").view(1).Control.Screen
与反射交互的代码也发生了变化,现在看起来像:

screen.GetText(row, col, len)
screen.PutText2(data, row, col)
screen.SendControlKey(ControlKeyCode)
似乎没有提供控制键的代码。但是,可以在反射附带的Visual Basic对象浏览器中找到定义。在反射中,在“宏”选项卡上,单击Visual Basic,然后按F2键并搜索ControlKeyCode。他们的名单应该会出现。例如,mine显示ControlKey_F1=10

screen.SendKeys("N")
仍然可以用于发送单个按键笔划,如N键,但SendControlKey似乎已经取代了命令键,如Enter键、Page Up键和功能键。

我仍然不知道为什么会这样。在VBA中,GetObject方法在“反射工作区”上工作,但在python中,它没有生成我可以找到的任何可用属性。对于python,要获取活动会话对象,我必须使用EXTRA.System:

from win32com.client.gencache import EnsureDispatch
screen = EnsureDispatch("EXTRA.System").ActiveSession.Screen
从那里看,代码似乎与VBA基本相同

screen.GetString(row, col, len)
screen.PutString(data, row, col)
screen.SendKeys('<PF1>')
然后,要获取活动视图,请执行以下操作:

screen = system.GetObject("Frame").SelectedView.Control.Screen
或特定编号视图:

screen = system.GetObject("Frame").view(1).Control.Screen
与反射交互的代码也发生了变化,现在看起来像:

screen.GetText(row, col, len)
screen.PutText2(data, row, col)
screen.SendControlKey(ControlKeyCode)
似乎没有提供控制键的代码。但是,可以在反射附带的Visual Basic对象浏览器中找到定义。在反射中,在“宏”选项卡上,单击Visual Basic,然后按F2键并搜索ControlKeyCode。他们的名单应该会出现。例如,mine显示ControlKey_F1=10

screen.SendKeys("N")

仍然可以用于发送单个按键笔划,如N键,但SendControlKey似乎已经取代了命令键,如Enter键、Page Up键和功能键。

您找到解决方法了吗?我能够使用旧的Attchmate代码“EnsureRedispatch(“EXTRA.System”).ActiveSession.Screen”使其正常工作,虽然win32com.client.GetObject(“反射工作区”)没有产生错误,但我无法通过Python找到任何可用的属性,即使它在VBA中工作。非常感谢您的响应。你能发布你的完整代码标记吗?我让反射代码工作了,完整代码见我的答案。你找到解决方案了吗?我能够使用旧的Attchmate代码“EnsureRedispatch(“EXTRA.System”).ActiveSession.Screen”使其正常工作,虽然win32com.client.GetObject(“反射工作区”)没有产生错误,但我无法通过Python找到任何可用的属性,即使它在VBA中工作。非常感谢您的响应。你能发布你的完整代码标记吗?我让反射代码工作了,完整代码见我的答案。谢谢!我需要进一步测试这一点,并重写大块代码以符合VBA,但这非常有用。我能够像VBA中的普通命令一样使用“SendKeys”命令。您知道如何让我的函数(见上文)使用新逻辑吗?请参阅上面我编辑过的文章。有些命令对我有效,有些则无效。我想知道这是否是版本问题。GetText命令起作用;PutString没有。那是个错误,我已经改正了。看起来有两个基于文档的选项。PutText1和PutText2。我使用PutText2,因为PutText1添加了一个长度参数!我需要进一步测试这一点,并重写大块代码以符合VBA,但这非常有用。我能够像VBA中的普通命令一样使用“SendKeys”命令。您知道如何让我的函数(见上文)使用新逻辑吗?请参阅上面我编辑过的文章。有些命令对我有效,有些则无效。我想知道这是否是版本问题。GetText命令起作用;PutString没有。那是个错误,我已经改正了。看起来有两个基于文档的选项。PutText1和PutText2。我使用PutText2作为PutText1添加长度参数。以下是指向文档的链接: