我一直在努力了解Process.MainWindowHandle.
根据MSDN; "主窗口是在进程启动时创建的窗口.初始化后,可以打开其他窗口,包括Modal和TopLevel窗口,但与进程关联的第一个窗口仍然是主窗口." (重点补充)
但是在调试时我注意到MainWindowHandle似乎改变了价值......这是我没想到的,特别是在查阅上面的文档之后.
为了确认行为,我创建了一个带有计时器的独立WinForms应用程序,每隔100ms检查一次"DEVENV"(Visual Studio)进程的MainWindowHandle.
这是这个测试应用的有趣部分......
IntPtr oldHWnd = IntPtr.Zero;
void GetMainwindowHandle()
{
Process[] processes = Process.GetProcessesByName("DEVENV");
if (processes.Length!=1)
return;
IntPtr newHWnd = processes[0].MainWindowHandle;
if (newHWnd != oldHWnd)
{
oldHWnd = newHWnd;
textBox1.AppendText(processes[0].MainWindowHandle.ToString("X")+"\r\n");
}
}
private void timer1Tick(object sender, EventArgs e)
{
GetMainwindowHandle();
}
Run Code Online (Sandbox Code Playgroud)
当您(例如)单击VS内的下拉菜单时,您可以看到MainWindowHandle的值发生变化.

也许我误解了文档.
谁能摆脱光明?
aku*_*aku 11
@edg,
我想这是MSDN中的一个错误.您可以在Relfector中清楚地看到.NET中的"主窗口"检查如下所示:
private bool IsMainWindow(IntPtr handle)
{
return (!(NativeMethods.GetWindow(new HandleRef(this, handle), 4) != IntPtr.Zero)
&& NativeMethods.IsWindowVisible(new HandleRef(this, handle)));
}
Run Code Online (Sandbox Code Playgroud)
当.NET代码枚举窗口时,很明显第一个可见窗口(即顶级窗口)将符合此条件.
| 归档时间: |
|
| 查看次数: |
4476 次 |
| 最近记录: |