Domanda

Sto cercando di scrivere uno strumento che mi consente di ispezionare lo stato di un'applicazione basata su PowerBuilder. Quello a cui sto pensando è qualcosa come Spy ++ (o, ancora più bello, 'Snoop' come esiste per le applicazioni .NET) che mi permette di ispezionare l'albero degli oggetti (e le proprietà degli oggetti) di alcune GUI basate su PowerBuilder.

Ho fatto lo stesso per le applicazioni ordinarie (basate su MFC) e per quelle .NET, ma sfortunatamente non ho mai sviluppato un'applicazione in PowerBuilder, quindi in genere sto pensando a due problemi a questo punto:

  1. Sono disponibili alcune API (preferibilmente in Java o C / C ++) che consentono di attraversare il file albero di oggetti visivi di un'applicazione PowerBuilder? Ho letto un po 'sul sistema di interfaccia nativa di PowerBuilder, ma sembra che questo significhi scrivere estensioni di PowerBuilder in C / C ++ che possono quindi essere chiamate dal linguaggio di script di PowerBuilder, giusto?

  2. Se è disponibile qualche API - forse le applicazioni PowerBuilder espongono persino una sorta di API abilitata per IPC che mi consente di ispezionare lo stato di una gerarchia di oggetti PowerBuilder senza essere all'interno del processo dell'applicazione PowerBuilder? Forse c'è un'interfaccia di automazione disponibile o qualcosa basato su COM - o forse qualcos'altro?

In questo momento, la mia impressione è che probabilmente è necessario iniettare una DLL nel processo dell'applicazione PowerBuilder e quindi ottenere l'accesso alla VM PowerBuilder in esecuzione in modo che io possa interrogarla per l'albero degli oggetti. Una sorta di meccanismo IPC mi permetterà quindi di trasportare queste informazioni fuori dal processo dell'applicazione PowerBuilder.

Qualcuno ha qualche esperienza con questo o può far luce sul fatto che qualcuno abbia già provato a farlo?

Cordiali saluti,

  • Frerich
È stato utile?

Soluzione

Innanzitutto, la risposta semplice: penso che quello che stai cercando di fare sia stato fatto, in un certo senso. Rex da Enable fa quello che penso tu stia cercando, ma IIRC dal parlare con gli sviluppatori, dipende dagli hook di codice integrati nell'applicazione.

Il che porta al suggerimento che non penso che sarai in grado di fare ciò che penso tu stia provando a fare completamente esternamente dall'applicazione. Puoi afferrare le maniglie delle finestre con WinAPI e fare alcune cose di base, ma non quanto vuoi. E ottenere informazioni su DataWindows con WinAPI? Dimenticalo.

Credo di aver sentito parlare di un'API come quella di cui stai chiedendo, ma non ho mai sentito parlare di nessun altro che i produttori di strumenti software di test automatizzati ci mettono le mani sopra. Se questo è vero (e la qualità di queste informazioni è in linea con "udito nel corridoio"), sospetto che potrebbero esserci alcuni problemi di sicurezza delle applicazioni nel far uscire questo. (So ??che non non vorresti mai infettare la mia domanda, o curiosare e scoprire i miei segreti. sorridi )

Anche con gli hook nello spazio di memoria della VM di PowerBuilder, non sono consapevole di poter ottenere un elenco di oggetti in memoria senza alcuni hook del framework PowerScript (ad es. compilare un elenco su ogni open e costruttore con handle di oggetti). Una volta che hai un handle di finestra, puoi facilmente attraversare i suoi array di controllo (e le sue sottoclassi array di controllo) per ottenere un elenco di oggetti sulla finestra, ma cose come gli handle alle variabili di istanza NVO sarebbero problematiche.

Ammiro l'idea. Vorrei avere notizie migliori (a parte forse Rex potrebbe risolvere il tuo problema senza il mal di testa di farlo da solo). Ora non vedo l'ora di scoprire cosa potrebbe rilasciare Eran! sorriso

Buona fortuna

Terry.

Altri suggerimenti

Ho appena creato uno strumento del genere, ma ho barato un po '. Stavo per fare la stessa domanda anche sui newsgroup di PB. La mia soluzione è composta da due parti:

Strumento simile a una spia : un'app autonoma che come Spy ++, ad esempio, ti consente di trascinare un bersaglio su un controllo, utilizzando le funzioni dell'API di Windows (sebbene scritto in PB).

Infrastruttura interna per applicazioni di destinazione - situata all'antenato di tutte le finestre dell'applicazione. Una volta assegnato un certo handle (windows), passa attraverso l'array Control [] e cerca il controllo il cui handle corrisponde a quello specificato. Se necessario, ricorre anche in contenitori di controllo come le schede.

Quando l'utente seleziona un controllo, lo strumento spia cerca prima la sua finestra contenente usando l'API di Windows. Quando viene trovato, lo strumento invia un messaggio personalizzato a quella finestra, che viene quindi gestito dall'infrastruttura dell'app. Il controllo si trova quindi nell'app PB e i suoi dettagli vengono infine rispediti allo strumento spia, che li presenta all'utente.

Sospetto che la parte dell'infrastruttura possa essere sostituita con qualcosa di esterno, poiché ho visto strumenti che sembrano essere in grado di farlo (Visual Expert, QTP). Tuttavia, non ho avuto il tempo di indagare ulteriormente e questa soluzione è stata relativamente facile da sviluppare.

Devo dire che la tua domanda arriva con un tempismo sorprendente. Vedi questa mia recente domanda . Se sei interessato allo strumento che ho creato, inviami un commento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top