这是我的代码:
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方法以允许该进程完成启动,并确保已创建了主窗口句柄。否则,将引发异常。
关于c# - C#Process.MainWindowHandle始终返回IntPtr零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16185217/