我有一个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
的图片: