Quindi, in pratica, ho questo software che emette i dati in un modulo elenco. Grazie ai commenti qui abbiamo capito che è molto probabile scritto in .NET.Ottieni i nomi degli elementi da un controllo elenco di applicazioni .NET utilizzando winapi o mfc
Voglio eseguire la scansione dell'elenco in modo da poter eseguire alcuni algoritmi sui dati.
Utilizzando Spy ++ ho scoperto che ciò che contiene questo elenco è intitolato "Panel2" e posso ottenere l'handle di questo (la sua classe è "WindowsForms10.Window.8.app") utilizzando EnumChildWindows.
Tuttavia non so come arrivare alla lista stessa così posso leggere i suoi articoli. Ho provato EnumChildWindows sulla maniglia "Panel2" e l'output della didascalia di tutte quelle finestre, ma sono tutti vuoti.
Il pannello 2 può essere la lista degli attuatori? In tal caso, posso semplicemente lanciarlo su (CListCtrl *)?
Axilles menziona nei commenti che probabilmente è scritto in .NET, sarà possibile ottenere il controlID/handle nell'elenco usando qualcosa come http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1?
CWnd* mainWindow;
CWnd* panel;
CListCtrl* list;
BOOL CALLBACK findWindow(HWND hwnd,LPARAM lParam)
{
char text[8];
GetWindowText(hwnd,text,8);
if(strcmp(text,"Fetcher") == 0)
{
mainWindow= CWnd::FromHandle(hwnd);
return false;
}
return true;
}
BOOL CALLBACK findPanel(HWND hwnd,LPARAM lParam)
{
char text[7];
GetWindowText(hwnd,text,7);
if(strcmp(text,"Panel2") == 0)
{
panel = CWnd::FromHandle(hwnd);
return false;
}
return true;
}
void CAnalyzeDlg::OnBnClickedButton1()
{
mainWindow = 0;
while(mainWindow == 0)
{
::EnumWindows(findWindow,0);
}
mainWindow ->ActivateTopParent();
while(panel == 0) ::EnumChildWindows(mainWindow ->m_hWnd,findPanel,0);
CWnd* pointTest = NULL;
CString text = "";
int xx = 337;
int yy = 95;
while(yy < 1024 && (pointTest == NULL || strcmp(text,"") == 0 || strcmp(text,"Panel2") == 0))
{
pointTest = mainWindow->ChildWindowFromPoint(CPoint(xx,yy));
yy++;
if(pointTest != 0)
pointTest->GetWindowTextA(text);
}
if(strcmp(text,"") != 0)
MessageBox(0,text,0); // This never shows
}
Avete un gestore del Panel2? – besworland
Come ho detto. Sì. – David
Prima di tutto, sembra che la tua app sia scritta in .NET ("causa di" WindowsForms "nel nome della classe). Secondo: per ottenere l'handle della finestra, dovresti chiamare 'FindWindow' o' FindWindowEx', e solo dopo quella chiamata 'EnumChildWindows'. Scusa se capisco la domanda in modo incorretto. – eraxillan