标题部分是静态的,带有变量后缀。例如“Window Title { - user_id}”。
如何在不知道确切标题的情况下获取句柄?
答案 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);