为什么无法得到某些窗口上的控件
为什么无法得到一些游戏的子窗口和控件?
我的代码如下:
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);
}
...全文
相关推荐
SPIN控件的使用问题
我的程序哪里错了为什么不能调节,,不知道哪里出错了,请大家看看,要写20字真是烦人
适用excel2007的mscomct2控件
如何XP系统中excel2007不能打开这个控件时,可以用这个,本人经多次调适,最终确定的版本。
android SurfaceView 使用示例 why SurfaceView上 不可以用控件的轻微解释
NULL 博文链接:https://byandby.iteye.com/blog/824535
C#通过窗口名获取程序所有控件句柄
通过窗口名获取程序所有控件句柄,并绘制句柄结构树。
MFC窗口控件随窗口大小进行自适应
此工程实现了MFC窗口控件随窗口大小进行自适应,封装了WidgetResize类用来调整控件大小位置,非常好用。


界面
