Найти окно стороннего приложения по заголовку - C#
Формулировка задачи:
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Diagnostics;
- using System.Threading;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- namespace FindWindowByTitle
- {
- public partial class Form1 : Form
- {
- [DllImport("USER32.DLL")]
- private static extern int GetWindowText(IntPtr IntPtr, StringBuilder lpString, int nMaxCount);
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowProc lpEnumFunc, string winName);
- public delegate bool EnumWindowProc(IntPtr hWnd, string winName);
- public Form1()
- {
- InitializeComponent();
- }
- bool FindWindowByTitle(IntPtr hwnd, string winName)
- {
- StringBuilder str = new StringBuilder(200);
- GetWindowText(hwnd, str, 200);
- if (!str.ToString().Contains(winName))
- return true;
- return false;
- }
- private void Form1_Click(object sender, EventArgs e)
- {
- Process p= Process.GetProcessesByName("impacthost")[0];
- IntPtr hwin = new IntPtr();
- hwin = p.MainWindowHandle;
- EnumChildWindows(hwin, new EnumWindowProc(FindWindowByTitle), "Gq_MvWorkspace");
- }
- }
- }
FindWindowByTitle
правильно находит искомое окно, возвращает false. Но как теперь по выходе изFindWindowByTitle
получить найденный десктиптор? Была надежда, что он будет передан в переменнуюhwin
, но она осталась неизменной. Как тут быть?Решение задачи: «Найти окно стороннего приложения по заголовку»
textual
Листинг программы
- using System;
- using System.Text;
- using System.Windows.Forms;
- using System.Diagnostics;
- using System.Runtime.InteropServices;
- namespace WindowsFormsApplication107
- {
- public partial class Form1 : Form
- {
- [DllImport("USER32.DLL")]
- private static extern int GetWindowText(IntPtr IntPtr, StringBuilder lpString, int nMaxCount);
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowProc lpEnumFunc, WindowFinderInfo winName);
- public delegate bool EnumWindowProc(IntPtr hWnd, WindowFinderInfo winName);
- public Form1()
- {
- InitializeComponent();
- }
- bool FindWindowByTitle(IntPtr hwnd, WindowFinderInfo winName)
- {
- StringBuilder str = new StringBuilder(200);
- GetWindowText(hwnd, str, 200);
- if (!str.ToString().Contains(winName.Name))
- return true;
- winName.Handle = hwnd;
- return false;
- }
- private void button1_Click(object sender, EventArgs e)
- {
- IntPtr hwin = new IntPtr();
- hwin = Process.GetCurrentProcess().MainWindowHandle;
- var info = new WindowFinderInfo() { Name = "button1" };
- EnumChildWindows(hwin, new EnumWindowProc(FindWindowByTitle), info);
- MessageBox.Show(info.Handle == null ? "Пустой хєндл" : info.Handle.ToString());
- }
- }
- public class WindowFinderInfo
- {
- public string Name;
- public IntPtr? Handle;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д