C#如何遍历程应用程序中的所有窗体

C#如何遍历程应用程序中的所有窗体,第1张

for (int i = Application.OpenForms.Count - 1i >= 0i--)

{

if (Application.OpenForms[i].Name != "index")

Application.OpenForms[i].Close()

}

//这是我做的 关闭所有已打开的窗口 功能

char classname[128]

static bool IsFindWindow(HWND hwnd, LPARAM lParam) //如果是类函数,需要写成静态函数。

{

TCHAR buf[128]={0}

if(::IsWindow(hwnd)&&::IsWindowVisible(hwnd))

{

::GetClassName(hwnd, buf, sizeof(buf))

if(memcmp(buf,classname,10) 0= 0)

return true

}

return false

}

std::vector <HWND>g_AllWindow

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam) //注意:类型是BOOL 或INT,不是bool

{

if(IsFindWindow(hwnd, lParam))

{

g_AllWindow.push_back(hwnd)

}

return 1//要一直return 1.因为需要遍历所有的窗口,一旦返回0 将停止遍历。

}

然后在button的click事件里

strcpy(classname,"Notepad")//给classname赋值

if(::EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL))

{

HWND hwnd=g_AllWindow.back()

::SendMessage(hwnd,WM_CLOSE,0,0)如果有类名是Notepad的窗口在运行,关闭它

}

UserVar ID="无标题" "ID"//在自定义输入你要查找窗口的数字串,特别字眼都可以

hwnd =

Plugin.Window.Search(ID)//遍历所有窗口,查找含有“数字串,特别字眼”的窗口并存入hwnd中

(这里按键自带的命令是这样的,你打开记事本 标题含有"无标题",使用这个命令 它会得到该记事本的窗口句柄XX并赋值到变量hwnd

具体结果"XX|" 如果有多个结果 会是这样 "XX1|XX2|XX3")

bb = Split(hwnd, "|")//把所有句柄分开存到数组 (这个是分割字符串,以字符串"|"分割变量hwnd里的字符串并把各项结果以数组形式赋值到变量bb)

cc = CLng(bb(0)) //Clng是强制转换为整数 因为bb这个数组里的成员类型都是字符串,所以要转换一下,方便比较 bb(0) 这里出现下标越界说明bb这个数组里并没有序号为0的这个成员 换句话说就是没有找到窗口


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12207101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存