C# 用c中的win32句柄访问VB6 OCX控件的ComInterface#

C# 用c中的win32句柄访问VB6 OCX控件的ComInterface#,c#,winapi,vb6,ocx,gridex,C#,Winapi,Vb6,Ocx,Gridex,目前,我正在对一个用vb6开发的遗留应用程序进行自动化测试,该应用程序使用来自Janus Systems的GridEx2000b控件 为此,我使用Ranorex作为我最喜欢的开发测试自动化的工具,这样我就可以使用c#开发测试代码 我现在的问题是自动化GridEx 2000b控件,Ranorex开箱即用不支持该控件。因此,我试图找到一个解决方案,在这个解决方案中,我可以使用Win32句柄引用GrixEx控件,这样我就可以使用组件中的ComInterface来导航控件 我有一个解决方案的想法,但我不

目前,我正在对一个用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也会在查找控件的本机属性以进行标识时设法识别该控件。不保证,但值得一试。

我不熟悉这个控件,那么:
GetControlReference()
应该返回什么样的东西呢?该函数的作用是什么?控件本身,GridEx2000并不是真正的情况,它可以是嵌入到任何VB6应用程序中的任何OCX控件。GrixEx是VB6应用程序中使用的OCX控件。GetControlReference不是一个现有的方法,而是一个模拟我想要实现的想法的尝试。我想以某种方式封送或挂接到VB6应用程序中的OCX控件中,这样我就可以使用相同的gridex互操作类,并拥有一个可以在.Net中控制的对象。VB6应用程序中对象的远程控制形式。