获取具有未完全已知标题的窗口的句柄。 (C#)

时间:2009-03-12 07:46:35

标签: c# api

标题部分是静态的,带有变量后缀。例如“Window Title { - user_id}”

如何在不知道确切标题的情况下获取句柄?

3 个答案:

答案 0 :(得分:14)

查看所有进程并检查MainWindowTitle。 (您可以使用正则表达式,或StartsWith等)

foreach(Process proc in Process.GetProcesses())
{
   if(proc.MainWindowTitle.StartsWith("Some String"))
   {
      IntPtr handle = proc.MainWindowHandle;
      // ...
   }
}

答案 1 :(得分:5)

This CodeProject article描述了如何枚举顶级窗口(基于Win32 API EnumWindows)。 您可以轻松修改它以过滤部分窗口标题:修改EnumWindowsCallBack。

HTH。

答案 2 :(得分:2)

按类名和父窗口句柄获取。例如:使用win32api获取启动按钮句柄。首先,您使用spyxx工具了解父窗口类名称。

[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr handleParent, IntPtr handleChild, string className, string WindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string className, string windowTitle);

用法:

IntPtr handle = FindWindowEx(FindWindow("Shell_TrayWnd",null), new IntPtr(0), "Button", null);