2015-02-07 1 views
0

저는 Janus Systems의 GridEx2000b 컨트롤을 사용하는 vb6에서 개발 된 레거시 응용 프로그램 테스트를 자동화하고 있습니다.ComInterface에서 VB6 OCX 컨트롤에 C#에서 win32 핸들 사용 #

이렇게하려면 테스트 자동화를 개발하는 데 내가 좋아하는 도구 인 Ranorex를 사용하고 있으므로 C#을 사용하여 테스트 코드를 개발할 수 있습니다.

내 문제는 이제 Ranorex에서 제공되는 GridEx 2000b 컨트롤을 자동화하는 것입니다. 따라서 컨트롤을 찾을 수있는 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); 
    } 

} 
+0

나는이 컨트롤에 익숙하지 않다 : 어떤 종류의 것은'GetControlReference()'가 반환해야하는 것인가? 그 기능은 무엇을 하는가? – andlabs

+0

컨트롤 자체, GridEx2000 실제로는 아니지만, 어떤 VBX 응용 프로그램에 포함 된 모든 OCX 컨트롤 수 있습니다. –

+0

GrixEx는 VB6 응용 프로그램에서 사용되는 OCX 컨트롤입니다. GetControlReference는 기존 방법이 아니라 달성하고자하는 아이디어를 시뮬레이션하려는 시도입니다. VB6 응용 프로그램에서 OCX 컨트롤을 마샬링하거나 연결하려고합니다. 그래야 동일한 gridex interop 클래스를 사용하고 .NET에서 제어 할 수있는 개체를 가질 수 있습니다. VB6 응용 프로그램 내에서 개체의 원격 제어 양식. –

답변

0

Microsoft UI 자동화 라이브러리 (System.Windows.Automation)를 사용하여 컨트롤의 속성을 확인할 수 있습니다. 때때로 Ranorex가 실패하더라도 MSUIA는 식별을 위해 컨트롤의 기본 속성을 조사 할 때 컨트롤을 인식하고 관리합니다. 보증은 없지만 시험해 볼 가치가 있습니다. Here is a link to a tutorial on using MSUIA.