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

时间:2015-02-07 17:18:02

标签: c# winapi vb6 ocx gridex

我目前正在自动化测试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);
    }

}

1 个答案:

答案 0 :(得分:0)

您可以尝试Microsoft UI自动化库(System.Windows.Automation)来识别控件的属性。有时即使Ranorex失败,MSUIA也会设法识别控件,因为它会查看控件的本机属性以进行识别。不保证但值得一试。Here is a link to a tutorial on using MSUIA.