我运行了许多python脚本和程序来聚合和编辑Attachmate Extra中的数据。直到最近,我的公司还在使用旧版本的Attachmate Extra。我正在测试新版本(反射桌面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。系统:
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>')
用于与主机交互。
经过更多的文档阅读和更多的试验和错误,我解决了它。 "额外。系统"出于遗留原因而保留,因此在技术上仍然可以工作。但是,要连接到反射的活动会话,这有效:
system = win32com.client.GetObject('Reflection Workspace')
然后获取活动视图:
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 并搜索"控制键代码"。应该会显示它们的列表。例如,我的显示ControlKey_F1=10。
screen.SendKeys("N")
仍然可以用于发送单个击键,例如 N 键,但 SendControlKey 似乎已经取代了命令键,例如 Enter、Page Up 和功能键。
在这方面推出了python包py_reflection,
如何开始:
通过 pip 安装软件包:
py -m pip install py_reflection
运行软件包(在终端中运行以下命令(:
python
>>>from py_reflection import app
>>>app.run()
API 终结点及其说明: ** 所有终结点都有一个通用参数view_idx(整数,可选(。使用此参数可在模拟器中的会话之间切换。
/send_keys:使用此终结点在模拟器中按键。要传递的参数:文本(字符串(,x(整数(,y(整数(
/get_text:使用此终结点从特定坐标获取文本。要传递的参数:x(整数(,y(整数(
/press_key:使用此端点按特殊控制键: 要传递的参数:control_key(字符串全部大写(。可用的控制键:">
F1"、"F2"、"F3"、"F4"、"F5"、"F6"、"F7"、"F8"、"F9"、"F10"、"F11"、"F12"、"F13"、"F14"、"F15"、"F16"、"F17"、"F18"、"F19"、"制表符"、"删除"、"左"、"下"、"上"、"右"、"上翻"、"下页"、"清除"、"结束"、"输入"/get_text_coordinates:使用此终结点获取模拟器屏幕中存在的文本坐标。要传递的参数:文本(字符串(、total_row_count(整数,可选(、total_column_count(整数,可选(
/check_text_present:使用此终结点检查模拟器屏幕中是否存在给定文本。要传递的参数:文本(字符串(、total_row_count(整数,可选(、total_column_count(整数,可选(
/move_cursor:使用此终结点将光标移动到指定的坐标。要传递的参数:x(整数(,y(整数(
/get_view_count:使用此终结点获取在模拟器中打开的会话数。
更多信息请访问 pypi.org