为什么无法得到一些游戏的子窗口和控件?
我的代码如下:
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam )
{
CMyDlg *dlg=(CMyDlg *)lParam;
char wintext[Win_Text_Max_Len];
if(::IsWindowVisible(hwnd))
{
::GetWindowText(hwnd,wintext,Win_Text_Max_Len);
dlg->m_combowinCtrl.InsertString(dlg->m_combowinCtrl.GetCount(),wintext);//m_combowinCtrl为CComboBox对象
dlg->AllWindow.Add(hwnd);//AllWindow为CArray类的对象
}
return 1;
}void CMyDlg::OnBUTTONShuaXinWin()
{
// TODO: Add your control notification handler code here
while(m_combowinCtrl.GetCount()>0)
{
m_combowinCtrl.DeleteString(0);
}
AllWindow.RemoveAll();
EnumWindows(EnumWindowsProc,(LPARAM)this);
}
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
CMyDlg *dlg=(CMyDlg *)lParam;
CString str;
char wintext[Win_Text_Max_Len];
LVITEM lvi;
lvi.mask=LVIF_IMAGE|LVIF_TEXT; str.Format("0x%08X",(DWORD)hwnd);
lvi.pszText=(LPTSTR)(LPCTSTR)(str);
lvi.iItem=dlg->m_listchildwinCtrl.GetItemCount();//
lvi.iSubItem=0;//
dlg->m_listchildwinCtrl.InsertItem(&lvi);//m_listchildwinCtrl为CListCtrl对象 ::GetClassName(hwnd,wintext,Win_Text_Max_Len);
lvi.iSubItem++;
lvi.pszText=wintext;
dlg->m_listchildwinCtrl.SetItem(&lvi); str=wintext;
lvi.iSubItem++;
::GetWindowText(hwnd,wintext,Win_Text_Max_Len);
lvi.pszText=wintext;
dlg->m_listchildwinCtrl.SetItem(&lvi); RECT rect;
::GetWindowRect(hwnd,&rect);
str.Format("L:%4d T:%4d R:%4d B:%4d ",rect.left,rect.top,rect.right,rect.bottom);
lvi.iSubItem++;
lvi.pszText=(LPTSTR)(LPCTSTR)(str);
dlg->m_listchildwinCtrl.SetItem(&lvi);
return 1;
}void CMyDlg::OnBUTTONShuaXinChildWin()
{
// TODO: Add your control notification handler code here
m_listchildwinCtrl.DeleteAllItems();
if(m_combowinCtrl.GetCurSel()<0)
return;
EnumChildWindows(AllWindow[m_combowinCtrl.GetCurSel()],EnumChildProc,(LPARAM)this);
}
我的代码如下:
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam )
{
CMyDlg *dlg=(CMyDlg *)lParam;
char wintext[Win_Text_Max_Len];
if(::IsWindowVisible(hwnd))
{
::GetWindowText(hwnd,wintext,Win_Text_Max_Len);
dlg->m_combowinCtrl.InsertString(dlg->m_combowinCtrl.GetCount(),wintext);//m_combowinCtrl为CComboBox对象
dlg->AllWindow.Add(hwnd);//AllWindow为CArray类的对象
}
return 1;
}void CMyDlg::OnBUTTONShuaXinWin()
{
// TODO: Add your control notification handler code here
while(m_combowinCtrl.GetCount()>0)
{
m_combowinCtrl.DeleteString(0);
}
AllWindow.RemoveAll();
EnumWindows(EnumWindowsProc,(LPARAM)this);
}
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
CMyDlg *dlg=(CMyDlg *)lParam;
CString str;
char wintext[Win_Text_Max_Len];
LVITEM lvi;
lvi.mask=LVIF_IMAGE|LVIF_TEXT; str.Format("0x%08X",(DWORD)hwnd);
lvi.pszText=(LPTSTR)(LPCTSTR)(str);
lvi.iItem=dlg->m_listchildwinCtrl.GetItemCount();//
lvi.iSubItem=0;//
dlg->m_listchildwinCtrl.InsertItem(&lvi);//m_listchildwinCtrl为CListCtrl对象 ::GetClassName(hwnd,wintext,Win_Text_Max_Len);
lvi.iSubItem++;
lvi.pszText=wintext;
dlg->m_listchildwinCtrl.SetItem(&lvi); str=wintext;
lvi.iSubItem++;
::GetWindowText(hwnd,wintext,Win_Text_Max_Len);
lvi.pszText=wintext;
dlg->m_listchildwinCtrl.SetItem(&lvi); RECT rect;
::GetWindowRect(hwnd,&rect);
str.Format("L:%4d T:%4d R:%4d B:%4d ",rect.left,rect.top,rect.right,rect.bottom);
lvi.iSubItem++;
lvi.pszText=(LPTSTR)(LPCTSTR)(str);
dlg->m_listchildwinCtrl.SetItem(&lvi);
return 1;
}void CMyDlg::OnBUTTONShuaXinChildWin()
{
// TODO: Add your control notification handler code here
m_listchildwinCtrl.DeleteAllItems();
if(m_combowinCtrl.GetCurSel()<0)
return;
EnumChildWindows(AllWindow[m_combowinCtrl.GetCurSel()],EnumChildProc,(LPARAM)this);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货