Domanda

è possibile tramite l'API di Windows per enumerare e iterare i controlli VCL su un modulo (TForm) appartenente a un'applicazione Win32 esterna scritta in C ++ Builder o Delphi.

Ciao.

È stato utile?

Soluzione

No. Prima di tutto, considera che l'API di Windows non ha idea di cosa sia il "VCL" è. Non conosce " TButton " o " TStringGrid, " e certamente non conosce " TImage " o " TLabel, " che non hanno nemmeno le maniglie delle finestre.

È possibile utilizzare EnumChildWindows per ottenere handle per i controlli con finestre. Puoi guardare i nomi delle loro classi per determinare da dove provengono " TButton " o " TStringGrid, " ma anche in questo caso, non avresti accesso ad alcuna struttura relativa agli oggetti. Non avresti un riferimento a un oggetto e quindi non potresti leggere alcuna proprietà o chiamare alcun metodo.

TestComplete , dal QA automatizzato, offre l'accesso ai moduli e alle classi di un programma da un esterno programma, che suona come quello che potresti provare a fare. Funziona avendo un'unità inclusa nel programma Delphi e quell'unità fornisce essenzialmente una backdoor per il programma TestComplete da usare per interrogare gli interni del programma. Ciò richiede la collaborazione dello sviluppatore dell'applicazione; non puoi sic TestComplete su un programma arbitrario.

Altri suggerimenti

Puoi guardare i DFM, che sono memorizzati come risorse nell'eseguibile.

Anders Ohlsson ha messo insieme una applicazione VCL Scanner che fa proprio questo poco fa. È disponibile anche il codice sorgente .

Fino a Delphi 2006, è possibile utilizzare vcltest3.dll per questo. Ma ora devi andare come propone Rob Kennedy.

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