C#枚举所有的窗体的两种方法
1、直接查找游戏窗口,找到后作处理。
2、C#枚举所有窗口,列表显示,然后再处理。
我这里按第二种方式做。首先是一些准备工作,如,了解如何调用系统API,见以前的博文。枚举窗口要用的一些
API:EnumWindows,GetWindowText,GetParent,IsWindowVisible.
EnumWindows:枚举窗口
GetWindowText:取得窗口标题
GetParent:取得当前窗体的父窗体(非常重要,用于判断是否为顶级窗体)
IsWindowVisible:判断窗体是否可见,用于过滤到不可见窗体。
C#枚举代码如下:
- namespaceHideProcess
- {
- publicdelegateboolCallBack(inthwnd,inty);
- publicpartialclassForm1:Form
- {
- [DllImport("user32.dll")]
- publicstaticexternintEnumWindows(CallBackx,inty);
- [DllImport("user32")]
- publicstaticexternintGetWindowText(inthwnd,StringBuilderlptrString,intnMaxCount);
- [DllImport("user32")]
- publicstaticexternintGetParent(inthwnd);
- [DllImport("user32")]
- publicstaticexternintIsWindowVisible(inthwnd);
- publicboolReport(inthwnd,intlParam)
- {
- intpHwnd;
- pHwnd=GetParent(hwnd);
- if(pHwnd==0&&IsWindowVisible(hwnd)==1)
- {
- StringBuildersb=newStringBuilder(512);
- GetWindowText(hwnd,sb,sb.Capacity);
- if(sb.Length>0)
- {
- this.comboBox1.Items.Add(sb.ToString());
- }
- }
- returntrue;
- }
- publicForm1()
- {
- InitializeComponent();
- }
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- Process[]ProcArray=Process.GetProcesses();
- comboBox1.Items.Clear();
- EnumWindows(this.Report,0);
- }
- }
- }
有一个combobox和button,点击按钮,将所有窗口列举显示在下拉框。接下来的工作就是设置窗体为隐藏。但是有一个缺点
隐藏后无法显示。留待以后解决。利用C#枚举所有的窗体就讲到这里。
【编辑推荐】