高分求怎样枚举桌面上的所有主窗口???

sun_wyz 2005-01-21 03:55:10
怎样枚举桌面上的所有主窗口???
还有怎么样枚举包括子窗口的所有窗口?(不包括按钮工具栏那些所谓的窗口)
还有怎么样判断一个窗口是不是子窗口???

请给出代码!谢谢!分不够再加。。
...全文
282 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
特招 2005-01-24
  • 打赏
  • 举报
回复
up
constantine 2005-01-22
  • 打赏
  • 举报
回复
constantine.vicp.net
csdnbcb
123456

有一个xitong的文件里面就有了

sun_wyz 2005-01-22
  • 打赏
  • 举报
回复
非常感谢楼上!!!明天考完式我就去下载!!!
僵哥 2005-01-21
  • 打赏
  • 举报
回复
!GetParent(hwnd)就表示是主窗体
僵哥 2005-01-21
  • 打赏
  • 举报
回复
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
unsigned long *pPid;
unsigned long result;
void *hg;
unsigned long id;
if(hwnd==NULL)
return false;
hg=GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
pPid=(unsigned long *)GlobalLock(hg);
result=GetWindowThreadProcessId(hwnd,pPid);
if(result)
{
char title[110];
char classname[95];
char totalstr[256];
bool isShow=true;
int len;
len=GetClassName(hwnd,classname,95);
classname[len]='\0';
len=GetWindowText(hwnd,title,110);
title[len]='\0';
AnsiString ch=AnsiString(title).Trim().SubString(1,3);
char buf[MAX_PATH+1]="";
char buf1[MAX_PATH+1]="";
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,FALSE,*pPid);
if( NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ),
&cbNeeded ) )
{
len=GetModuleFileNameEx( hProcess, hMod,buf,sizeof buf);
buf[len]='\0';
len=GetModuleBaseName( hProcess, hMod,buf1,sizeof buf1);
buf1[len]='\0';
}
CloseHandle(hProcess);
}
if(GetParent(hwnd)!=NULL&&Form1->RMain->Checked)//是否只显示主窗体
isShow=false;
if(!IsWindowVisible(hwnd)&&Form1->RShow->Checked)//是否显示隐藏窗体
isShow=false;
if(isShow&&AnsiString(buf)!=Application->ExeName)//非本就用程序
{
TListItem *lListItems;
lListItems=Form1->ListView1->Items->Add();
lListItems->Caption=AnsiString(buf1);
lListItems->Data=hwnd;
lListItems->Checked=IsWindowVisible(hwnd);
lListItems->SubItems->Add(AnsiString(title));
lListItems->SubItems->Add(IsWindowVisible(hwnd)?"可见":"隐藏");
lListItems->SubItems->Add("0x"+IntToHex((int)hwnd,2));
lListItems->SubItems->Add(AnsiString(classname));
lListItems->SubItems->Add(IntToStr(*pPid));
lListItems->ImageIndex=GetNormalIcon(AnsiString(buf));
lListItems->SubItems->Add(AnsiString(buf));
}
}
else
{
GlobalUnlock(hg);
GlobalFree(hg);
return false;
}
GlobalUnlock(hg);
GlobalFree(hg);
return true;
}
BeRoy 2005-01-21
  • 打赏
  • 举报
回复
在cb茶馆里找嘛,有他发的帖子
sun_wyz 2005-01-21
  • 打赏
  • 举报
回复
楼上的兄弟!你的ftp在哪里啊???
constantine 2005-01-21
  • 打赏
  • 举报
回复
我的ftp里面有一个,好想在哪个62个例子那里
Maconel 2005-01-21
  • 打赏
  • 举报
回复
用GetWindow一层一层找。
可以通过窗体所属的类型来分辨是窗口还是按纽文本框什么的。
JetKingLau 2005-01-21
  • 打赏
  • 举报
回复
偶的一个例子,楼主试试
//---------------------------------------------------------------------------
static BOOL CALLBACK EnumWindowsProcess(HWND hwnd,LPARAM lParam)
{
TStrings *list = (TStrings*)lParam;

char buf[256];
::GetWindowText(hwnd,buf,256);

if( GetParent(hwnd) == NULL &&
IsWindowVisible(hwnd) &&
strlen(buf) > 0 &&
list->IndexOf(buf) == -1 ) {//判断是否是自己要的窗口
list->Add(buf);
}

return true;
}
//---------------------------------------------------------------------------
Boolean TitleOfVisibleWindows(TStrings *list)//列把所有可见的窗口标题
{
if( list == NULL )
return(false);
FARPROC EnumProcInstance =
MakeProcInstance(
(FARPROC)EnumWindowsProcess,
AfxGetInstanceHandle()
);
bool Return = EnumWindows((WNDENUMPROC)EnumProcInstance,(LPARAM)list);
FreeProcInstance(EnumProcInstance);
return(Return && list->Count > 0);
}
//---------------------------------------------------------------------------
JetKingLau 2005-01-21
  • 打赏
  • 举报
回复
忘记了,大概就是这两个函数:
EnumWindow
EnumChildWindow

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧