阻止进程子窗口?

时间:2011-05-22 07:02:03

标签: c# .net winapi windows-services process

我正在C#.NET中启动一个进程,由于某种原因,它在最初启动时会打开一个消息框。我需要从我的应用程序中找到一些方法来阻止此消息框被打开,或者基本上从我的代码中“单击”消息框上的“确定”按钮。

当我们将它作为服务运行时,消息框导致进程挂起,因此我现在需要找到一些方法来阻止该框打开或者只是从我的代码中关闭它(选择OK)。

我一直在查看一些Win32 API示例,但我以前从未使用它,它看起来有点奇怪。任何建议都会很棒!

修改

这是一个批处理文件,作为解决问题的方法提供。但是,如果可能的话,我更愿意让它运行可执行文件。解释是使用-supw参数(在服务器上设置密码)会弹出此消息框。此批处理文件已经过测试并可以正常运行,但它要求您创建一个重复的可执行文件(murmur2.exe),这是一个贫民窟。

set /p VAR= < superadmin.txt
start murmur2.exe -supw %var%
ping 0.0.0.0 -n 3 > NUL
tskill murmur2
murmur.exe

1 个答案:

答案 0 :(得分:2)

PostMessage(FindWindow("#32770",*Title of the message box*),WM_CLOSE,NULL,NULL);

由于可能(机会很小)是同一个同时具有相同标题的类名打开的窗口,这不是一种防故​​障方式。然而,替代品只是一种矫枉过正。如果你真的想让它成为失败证明,你必须调用EnumWindows来枚举所有顶级窗口,然后为每个窗口调用GetWindowThreadProcessId并将窗口的进程ID与你启动的进程进行比较' ID。如果它们相等,则可以调用GetClassNameGetWindowText来比较类名(对于常见对话框始终为“#32770”)和消息框的标题,以验证您是否正在尝试关上正确的窗口。一旦完成,您可以使用您找到的hWnd使用WM_CLOSE调用PostMessage。