문제

PowerBuilder 기반 애플리케이션의 상태를 검사할 수 있는 도구를 작성하려고 합니다.내가 생각하는 것은 일부 PowerBuilder 기반 GUI의 개체 트리(및 개체의 속성)를 검사할 수 있는 Spy++(또는 .NET 응용 프로그램에 존재하는 더 좋은 'Snoop')와 같은 것입니다.

나는 일반(MFC 기반) 응용 프로그램과 .NET 응용 프로그램에 대해 이미 동일한 작업을 수행했지만 불행히도 PowerBuilder에서 직접 응용 프로그램을 개발한 적이 없으므로 일반적으로 이 시점에서 두 가지 문제에 대해 생각하고 있습니다.

  1. PowerBuilder 애플리케이션의 시각적 객체의 트리를 가로 질러 API (바람직하게는 Java 또는 C/C ++)가 있습니까?PowerBuilder Native Interface 시스템에 대해 조금 읽었지만 이는 PowerBuilder 스크립트 언어에서 호출할 수 있는 C/C++로 PowerBuilder 확장을 작성하기 위한 것 같습니다. 맞습니까?

  2. 사용 가능한 API가 있는 경우 PowerBuilder 애플리케이션은 PowerBuilder 애플리케이션 프로세스 내에 있지 않고 PowerBuilder 개체 계층 구조의 상태를 검사할 수 있는 일종의 IPC 지원 API를 노출할 수도 있습니까?사용 가능한 자동화 인터페이스나 COM 기반 인터페이스 또는 다른 것이 있을 수도 있습니다.

지금 당장은 PowerBuilder 애플리케이션의 프로세스에 DLL을 삽입한 다음 실행 중인 PowerBuilder VM에 액세스하여 개체 트리에 대해 쿼리할 수 있어야 한다는 인상을 받았습니다.그러면 일종의 IPC 메커니즘을 통해 이 정보를 PowerBuilder 애플리케이션 프로세스 외부로 전송할 수 있습니다.

누구든지 이것에 대한 경험이 있거나 이미 이 작업을 시도했는지 여부를 밝힐 수 있습니까?

친애하는,

  • 프레리히
도움이 되었습니까?

해결책

첫째, 쉬운 대답은 다음과 같습니다.나는 당신이 하려는 일이 어느 정도 이루어졌다고 생각합니다. Enable의 렉스 내 생각에 당신이 원하는 것을 수행하지만 IIRC가 개발자와 이야기한 바에 따르면 이는 애플리케이션에 내장된 코드 후크에 따라 다릅니다.

이는 내 생각에 당신이 하려고 하는 일을 응용 프로그램 외부에서 완전히 수행할 수 없을 것이라는 제안으로 이어집니다.WinAPI를 사용하여 창 핸들을 잡고 몇 가지 기본적인 작업을 수행할 수 있지만 원하는 만큼은 아닙니다.그리고 WinAPI를 사용하여 DataWindows에 대한 정보를 얻으시나요?잊어 버려.

믿다 나는 당신이 질문한 것과 같은 API에 대해 들어본 적이 있지만, 자동화된 테스트 소프트웨어 도구 제조업체가 이를 사용하고 있다는 다른 사람의 이야기는 들어본 적이 없습니다.이것이 사실이라면(그리고 이 정보의 품질이 "복도에서 들었다"와 같다면), 이 정보를 공개하는 데 일부 애플리케이션 보안 문제가 있을 수 있다고 의심됩니다.(알아요 당신은 내 애플리케이션을 감염시키고 싶지도 않고, 여기저기 샅샅이 뒤져 내 비밀을 알아내고 싶지도 않습니다. 이를 드러내고 웃다)

PowerBuilder VM 메모리 공간에 대한 후크가 있어도 일부 PowerScript 프레임워크 후크(예:모든 열기 및 생성자에 개체 핸들이 있는 목록을 채웁니다.창 핸들이 있으면 해당 컨트롤 배열(및 하위 클래스 컨트롤 배열)을 쉽게 탐색하여 창에 있는 개체 목록을 얻을 수 있지만 NVO 인스턴스 변수에 대한 핸들과 같은 작업은 문제가 될 수 있습니다.

나는 그 아이디어에 감탄했다.더 좋은 소식이 있었으면 좋겠습니다(Rex가 직접 문제를 해결해야 하는 번거로움 없이 문제를 해결할 수도 있다는 것 외에는).이제 에란이 어떤 제품을 출시할지 더욱 기대됩니다! 이를 드러내고 웃다

행운을 빌어요,

테리 직물.

다른 팁

방금 그런 도구를 만들었지만 약간의 속임수를 썼습니다.실제로 PB 뉴스그룹에서도 같은 질문을 하려고 했습니다.내 솔루션은 두 부분으로 구성됩니다.

스파이 같은 도구 - Spy++와 같은 독립형 앱, 즉Windows API 함수를 사용하여 대상을 컨트롤로 끌 수 있습니다(PB로 작성되었지만).

대상 애플리케이션을 위한 내부 인프라 - 모든 응용 프로그램 창의 조상에 위치합니다.특정 (창) 핸들이 주어지면 Control[] 배열을 통해 핸들이 주어진 핸들과 일치하는 컨트롤을 찾습니다.필요한 경우 탭과 같은 제어 컨테이너로 재귀되기도 합니다.

사용자가 컨트롤을 선택하면 스파이 도구는 먼저 Windows API를 사용하여 컨트롤이 포함된 창을 찾습니다.발견되면 도구는 해당 창에 사용자 지정 메시지를 보내고, 이 메시지는 앱의 인프라에서 처리됩니다.그런 다음 컨트롤은 PB 앱에 위치하며 해당 세부 정보는 최종적으로 스파이 도구로 다시 전송되어 사용자에게 표시됩니다.

인프라 부분을 외부의 것으로 대체할 수 있을 것으로 생각됩니다. 이를 수행할 수 있는 것으로 보이는 도구(Visual Expert, QTP)를 본 적이 있기 때문입니다.하지만 더 자세히 조사할 시간이 없었고 이 솔루션은 개발하기가 상대적으로 쉬웠습니다.

나는 당신의 질문이 놀라운 타이밍에 나왔다고 말하고 싶습니다.보다 최근에 제가 받은 질문이에요.제가 만든 도구에 관심이 있으시면 댓글을 남겨주세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top