gpt4 book ai didi

C# Process.MainWindowHandle 总是返回 IntPtr 零

转载 作者:可可西里 更新时间:2023-11-01 08:19:10 26 4
gpt4 key购买 nike

这是我的代码:

            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# Process.MainWindowHandle 总是返回 IntPtr 零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16185217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com