[英]Accessing ComInterface to VB6 OCX Control with win32 handle in c#
目前,我正在自动测试在vb6中开发的旧版应用程序,该应用程序使用了Janus Systems的GridEx2000b控件。
为此,我将Ranorex用作开发测试自动化的最喜欢的工具,以便可以使用c#开发测试代码。
我现在的问题是自动化GridEx 2000b控件,Ranorex开箱即用不提供任何支持。 因此,我试图找到一种解决方案,在该解决方案中,我可以使用为控件找到的Win32句柄引用GrixEx控件,以便可以使用组件中的ComInterface来导航控件的自动化。
我有一个解决方案的主意,但我不知道该怎么做,希望大家能为我提供帮助。
该问题的伪代码:
using GridEX20;
class GridExWrapper
{
public GridEX20.GridEXClass Instance;
public GridExWrapper(IntPtr win32handle)
{
Instance = (GridEX20.GridEXClass)Win32ControlUtilities.GetControlReference(win32Handle);
}
}
class Win32ControlUtilities
{
public static SomeKindOfHandle GetControlReference(IntPtr win32Handle)
{
...
...
...
}
}
我将从Ranorex或其他间谍工具获得win32handle。 然后,我可以像这样使用GridExWrapper。
using NUnit.Framework;
class Program
{
[Test]
public void control_should_have_9_items()
{
/// Get win32 handle from Ranorex
IntPtr win32handle = XXXXXX;
int expectedItemCount = 9;
GridEXClass control = new GridExWrapper(win32handle);
Assert.AreEqual(expectedItemCount, control.ItemCount);
}
}
您可以尝试使用Microsoft UI自动化库(System.Windows.Automation)来标识控件的属性。 有时,即使Ranorex失败了,MSUIA也会设法识别控件,因为它会查看控件的本机属性以进行识别。 无法保证,但值得一试。 这是有关使用MSUIA的教程的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.