2009-06-18 22 views
6

Tôi đang cố gắng viết một công cụ cho phép tôi kiểm tra trạng thái của một ứng dụng dựa trên PowerBuilder. Những gì tôi đang nghĩ đến là một cái gì đó giống như Spy ++ (hoặc, thậm chí đẹp hơn, 'Snoop' vì nó tồn tại cho các ứng dụng .NET) cho phép tôi kiểm tra cây đối tượng (và các thuộc tính của các đối tượng) của một số GUI dựa trên PowerBuilder.Spy ++ cho các ứng dụng PowerBuilder

Tôi đã làm tương tự cho các ứng dụng thông thường (MFC) cũng như các ứng dụng .NET, nhưng tiếc là tôi chưa bao giờ phát triển ứng dụng trong PowerBuilder, vì vậy tôi thường nghĩ về hai vấn đề tại thời điểm này:

  1. Có một số API (tốt nhất là trong Java hoặc C/C++) có sẵn cho phép một cây ngang qua các đối tượng trực quan của ứng dụng PowerBuilder không? Tôi đọc một chút về hệ thống giao diện Native PowerBuilder, nhưng có vẻ như điều này có nghĩa là viết các phần mở rộng PowerBuilder trong C/C++ mà sau đó có thể được gọi từ ngôn ngữ kịch bản PowerBuilder, phải không?

  2. Nếu có một số API có sẵn - có thể ứng dụng PowerBuilder thậm chí còn lộ ra một số API hỗ trợ IPC cho phép tôi kiểm tra trạng thái của phân cấp đối tượng PowerBuilder mà không nằm trong quá trình ứng dụng PowerBuilder? Có lẽ có một giao diện tự động hóa có sẵn, hoặc một cái gì đó dựa trên COM - hoặc có thể cái gì khác?

Ngay bây giờ, ấn tượng của tôi là có thể cần phải tiêm một DLL vào quá trình ứng dụng PowerBuilder và sau đó truy cập vào chạy PowerBuilder VM vì vậy mà tôi có thể truy vấn nó cho cây đối tượng. Một số loại cơ chế IPC sau đó sẽ cho phép tôi chuyển thông tin này ra khỏi quy trình của ứng dụng PowerBuilder.

Có ai có một số kinh nghiệm với điều này hoặc có thể làm sáng tỏ một số liệu có ai đã cố gắng làm điều này chưa?

Trân trọng,

  • Frerich

Trả lời

6

Đầu tiên, câu trả lời dễ dàng: Tôi nghĩ những gì bạn đang cố gắng làm đã được thực hiện, sắp xếp. Rex from Enable làm những gì tôi nghĩ rằng bạn đang sau, nhưng IIRC từ nói chuyện với các nhà phát triển, nó phụ thuộc vào mã móc được xây dựng trong ứng dụng.

Điều này dẫn đến gợi ý rằng tôi không nghĩ bạn có thể làm những gì tôi nghĩ bạn đang cố gắng làm hoàn toàn từ bên ngoài từ ứng dụng. Bạn có thể lấy tay cầm cửa sổ với WinAPIs và làm một số điều cơ bản với điều đó, nhưng không nhiều như bạn muốn. Và nhận được thông tin về DataWindows với WinAPIs? Quên đi.

I tin Tôi đã nghe về một API giống như API bạn đang hỏi, nhưng tôi chưa bao giờ nghe nói đến bất kỳ ai khác rằng các nhà sản xuất công cụ phần mềm tự động kiểm tra. Nếu điều này là đúng (và chất lượng của thông tin này là dọc theo dòng "nghe nó trong hành lang"), tôi nghi ngờ có thể có một số vấn đề bảo mật ứng dụng trong việc cho phép điều này nhận ra. (Tôi biết bạn muốn không bao giờ muốn để lây nhiễm sang ứng dụng của tôi, hoặc poke xung quanh và tìm ra bí mật của tôi. nụ cười)

Ngay cả với móc vào không gian bộ nhớ PowerBuilder VM, tôi không nhận thức được việc có thể để có được một danh sách các đối tượng trong bộ nhớ mà không có một số khung công tác của khung công tác PowerScript (ví dụ: điền một danh sách trên mọi mở và hàm tạo với các đối tượng xử lý). Khi bạn đã có một cửa sổ xử lý, bạn có thể dễ dàng đi qua các mảng điều khiển của nó (và các lớp con của nó kiểm soát mảng) để có được một danh sách các đối tượng trên cửa sổ, nhưng những thứ như xử lý cho các biến cá thể NVO sẽ có vấn đề.

Tôi ngưỡng mộ ý tưởng. Tôi muốn tôi có tin tốt hơn (khác hơn là Rex có thể giải quyết vấn đề của bạn mà không bị đau đầu khi tự làm). Bây giờ tôi đang mong chờ hơn nữa những gì eran có thể phát hành! nụ cười

Chúc may mắn,

Terry.

3

Tôi vừa mới tạo ra một công cụ như vậy, nhưng tôi đã lừa dối một chút. Đã thực sự về để hỏi cùng một câu hỏi bản thân mình trên các nhóm tin PB. Giải pháp của tôi được tạo thành từ hai phần:

Công cụ giống như gián điệp - một ứng dụng độc lập như Spy ++, cho phép bạn kéo mục tiêu vào điều khiển, sử dụng chức năng Windows API (mặc dù được viết bằng PB).

Cơ sở hạ tầng nội bộ cho ứng dụng đích - được đặt tại tổ tiên của tất cả các cửa sổ của ứng dụng. Sau khi được cấp một số xử lý (cửa sổ) nào đó, nó đi qua mảng Control [] và tìm kiếm điều khiển có xử lý khớp với đối tượng đã cho. Nếu cần thiết, nó cũng đệ quy vào các thùng chứa kiểm soát như các tab.

Khi người dùng chọn một điều khiển, công cụ gián điệp đầu tiên tìm cửa sổ chứa của nó bằng cách sử dụng Windows API. Khi được tìm thấy, công cụ sẽ gửi thông báo tùy chỉnh đến cửa sổ đó, sau đó được xử lý bởi cơ sở hạ tầng của ứng dụng. Việc kiểm soát sau đó được đặt trong ứng dụng PB và các chi tiết của nó cuối cùng được gửi lại cho công cụ gián điệp, trình bày chúng cho người dùng.

Tôi nghi ngờ phần cơ sở hạ tầng có thể được thay thế bằng một số thứ bên ngoài, vì tôi đã thấy các công cụ dường như có thể thực hiện điều đó (Visual Expert, QTP). Tuy nhiên, tôi không có thời gian để điều tra thêm, và giải pháp này tương đối dễ phát triển.

Tôi phải nói, câu hỏi của bạn xuất hiện vào một thời điểm đáng ngạc nhiên. Xem this recent question of mine. Nếu bạn quan tâm đến công cụ tôi đã tạo, hãy thả cho tôi nhận xét.

Các vấn đề liên quan