这是我的代码:
using (Process game = Process.Start(new ProcessStartInfo() {
FileName="DatabaseCheck.exe",
RedirectStandardOutput = true,
CreateNoWindow = true,
UseShellExecute = false }))
{
lblLoad.Text = "Loading";
int Switch = 0;
while (game.MainWindowHandle == IntPtr.Zero)
{
Switch++;
if (Switch % 1000 == 0)
{
lblLoad.Text += ".";
if (lblLoad.Text.Contains("...."))
lblLoad.Text = "Loading.";
lblLoad.Update();
game.Refresh();
}
}
问题是,game.MainWindowHandle 始终是 IntPtr.Zero。我需要找到运行进程的 IntPtr 来确认游戏是由启动器启动的,所以我让游戏发送它的 IntPtr 并让启动器响应(如果可以的话)。但为此,我必须具体了解运行进程的 IntPtr。
提前致谢!
主窗口是当前具有焦点的进程打开的窗口(TopLevel 窗体)。您必须使用Refresh
刷新 Process 对象的方法获取当前主窗口句柄(如果已更改).
您可以获得MainWindowHandle
属性仅适用于本地计算机上运行的进程。 MainWindowHandle 属性是唯一标识与进程关联的窗口的值。
仅当进程具有图形界面时,该进程才有与其关联的主窗口。如果关联的进程没有主窗口,则 MainWindowHandle 值为零。对于已隐藏的进程(即在任务栏中不可见的进程),该值也为零。对于在任务栏最右侧的通知区域中显示为图标的进程来说,可能会出现这种情况。
如果您刚刚启动一个进程并想要使用其主窗口句柄,请考虑使用 WaitForInputIdle 方法来允许进程完成启动,确保主窗口句柄已创建。否则,将会抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)