C#枚舉全部的窗體的兩種方法ide
一、直接查找遊戲窗口,找到後做處理。ui
二、C#枚舉全部窗口,列表顯示,而後再處理。this
我這裏按第二種方式作。首先是一些準備工做,如,瞭解如何調用系統API,見之前的博文。枚舉窗口要用的一些spa
API:EnumWindows,GetWindowText,GetParent,IsWindowVisible.orm
EnumWindows:枚舉窗口遊戲
GetWindowText:取得窗口標題ci
GetParent:取得當前窗體的父窗體(很是重要,用於判斷是否爲頂級窗體)string
IsWindowVisible:判斷窗體是否可見,用於過濾到不可見窗體。it
C#枚舉代碼以下:io
- 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#枚舉全部的窗體就講到這裏。