c# - SAP:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“sapfewse.GuiTextField”
问题描述
我正在尝试使用 c# 与 SAP gui 窗口交互。在此处使用此解决方案:解决方案,我已成功连接到我打开的 GUI 窗口。我可以发送命令
frame.Maximize();
正如预期的那样,这将最大化窗口。
当我尝试将一些文本放入文本框中时,麻烦就来了。
((GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd")).Text = "InputText";
//or
GuiTextField targetField =
(GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd");
//or
GuiTextField targetField =
(GuiTextField)session.FindById("wnd[0]/tbar[0]/okcd", "GuiTextField");
targetField.Text = "InputText";
我得到的错误是:
System.InvalidCastException
HResult=0x80004002
Message=Unable to cast COM object of type 'System.__ComObject' to interface type 'sapfewse.GuiTextField'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B4D89EE3-6EFD-4F4C-9F42-AD42B71C8EB7}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
如果我改为尝试这个:
var x = session.FindById("wnd[0]/tbar[0]/okcd");
然后我的监视窗口告诉我 x 是 GuiComponent 类型,而不是我希望的 GuiTextField。
这将运行:
GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");
但是 targetField 没有 text 属性。
我需要做什么来解决这个问题?谢谢!
解决方案
找到答案,把它留在这里,以防它可以帮助别人。
看着
GuiComponent targetField = (GuiComponent)session.FindById("wnd[0]/tbar[0]/okcd");
我发现 targetField 有一个 Type 属性:
var tmp = targetField.Type;
结果是 GuiOkCodeField。
所以需要的代码是:
((GuiOkCodeField)session.FindById("wnd[0]/tbar[0]/okcd")).Text= "InputText";
tldr; 使用 ((GuiOkCodeField)session.FindById("wnd[0]/tbar[0]/okcd")).Text= "InputText";
推荐阅读
- javascript - 你如何清理上传的图像
- powershell - 如何获取 Azure DSC 配置以读取名称为参数的自动化帐户变量?
- node.js - Firestore + Passport.js 会话功能
- c# - UWP 已绑定复选框是否已选中?
- docker - 无法连接到虚拟机 Docker
- javascript - 使用“margin:auto”时不尊重“pointer-event:none”
- python - 如何使用python将xml存储到xlsx
- arrays - 设置 Azure 位置策略限制
- git - 如何在一台开发机器上拥有多个 git 帐户?
- c# - 在 Unity 中获取 Gizmo 位置