检测程序消息框

时间:2017-04-21 15:32:18

标签: c#

我有一个C ++游戏,在Windows 10上启动它时,有时会显示MessageBox错误,并且无法正常启动。 80%的时间它会正常启动,我可以使用它。

我想避免尝试多次手动启动它,所以我正在考虑为我创建一个应用程序。

但我的意思是 - 尝试启动游戏。等待MessageBox检测。如果它确实检测到MessageBox,则终止游戏并重试。如果过了5秒且没有MessageBox,请退出该应用程序。

我知道我可以使用FindWindow,然后使用GetDlgItem并使用GetWindowText来检查是否MessagBox,但它似乎没有工作。

    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    internal static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
    [DllImport("user32.dll")]
    static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);

    static void Main(string[] args)
    {
        IntPtr gameHandle = FindWindow(null, "Game");

        while (gameHandle == IntPtr.Zero)
        {
            gameHandle = FindWindow(null, "Game");
        }

        IntPtr dlgHandle = GetDlgItem(gameHandle, 0xFFFF);
        StringBuilder sb = new StringBuilder();
        GetWindowText(dlgHandle, sb, 30);
        Console.WriteLine(sb.ToString());
    }

出于某种原因,dlgHandle返回0。

在我解决了这个问题之后,我可以检查MessageBox文本是否与错误匹配,然后我就可以知道它是否是错误。为什么它会返回0呢?

编辑:我担心游戏正在使用它自己的MessageBox实施,这就是GetDlgItem返回0的原因。这里&# 39;它发送的MessageBox的图片:enter image description here

0 个答案:

没有答案