Enumera i controlli VCL in un'applicazione esterna
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.
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.