运行可执行文件后以编程方式关闭对话框

时间:2014-05-26 17:20:19

标签: c# process window

我有一个执行多次计算的.EXE,由另一家公司实施。我无权访问此可执行文件的源代码,并且试图修改其行为是不可能的。

我的问题是:

我在c#中编写代码来调用此EXE并读取其文件输出。 EXE完成计算后,它会打开一个MessageBox - > "计算完成",并且仅在点击" OK按钮"输出文件被写入。这真的很糟糕,因为用户必须手动点击鼠标才能关闭MessageBox。我想知道是否有可能以编程方式关闭此MessageBox?

我用谷歌搜索了我的猜测是可以使用MainWindowHandle,但我不确定。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

您可以致电FindWindow找到MessageBox,然后使用SendMessage发送关闭消息

[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd,uint Msg,int wParam,int lParam);

[DllImport("user32.dll", EntryPoint = "FindWindow")] 
private static extern IntPtr FindWindow(string lp1, string lp2);

public const int WM_SYSCOMMAND = 0x0112;
public const int SC_CLOSE = 0xF060;

IntPtr window = FindWindow(null, "MessageBox Title Here");
if (window != IntPtr.Zero)
{
   SendMessage(window, WM_SYSCOMMAND, SC_CLOSE, 0);  
}

了解更多here