だから基本的に私はリスト形式でデータを出力するこのソフトウェアを持っています。ここのコメントのおかげで、.NET で記述されている可能性が高いことがわかりました。
リストをスキャンして、データに対していくつかのアルゴリズムを実行できるようにします。
Spy++ を使用すると、このリストを保持しているものに「Panel2」というタイトルが付けられていることがわかり、EnumChildWindows を使用してこれ (そのクラスは「WindowsForms10.Window.8.app」) へのハンドルを取得できます。
ただし、リスト自体にアクセスする方法がわからないため、そのアイテムを読み取ることができます。「Panel2」ハンドルで EnumChildWindows を試し、これらすべてのウィンドウのキャプションを出力しましたが、すべて空です。
panel2 を実際のリストにすることはできますか? もしそうなら、私はそれを (CListCtrl*) にキャストできますか?
Axilles はコメントで、おそらく .NET で書かれていると述べています。
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
}