如何防止窗口从另一个应用程序打开?

时间:2010-03-09 12:17:18

标签: c# .net itunes winforms

我会阻止iTunes打开一个窗口。 我google了很多,但找不到一个允许我控制这些东西的iTunes库,所以我想我必须回到基础并在它打开后关闭它,但是如何?

我想:

  • 每500毫秒勾选一次计时器
  • 检查窗口手柄是否已打开
  • 关闭它

这可能吗? 如何在其他计算机上识别此应用程序的窗口(我将放弃我的应用程序)?

语言是C#.Net 2.0。

3 个答案:

答案 0 :(得分:1)

是的,它是一个找到窗口并关闭它的选项。但是,用户仍然会看到它。

您可以使用FindWindow的PInvoke方法或使用C#(更喜欢那些)

using System.Diagnostics;
Process[] processes = Process.GetProcessesByName("notepad");
foreach (Process p in processes)
{
    p.CloseMainWindow();
}

From here

这仅用于关闭顶级应用程序,我不知道您是否可以使用Process找到子窗口。 我知道你可以使用PInvoke,参见示例here

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

答案 1 :(得分:0)

也许我在这里错了,因为我几乎是一个非常有用的编码员,但是让我试一试:

这甚至可能吗?控制窗口关闭的机制在应用程序(在您的示例中:iTunes)本身和操作系统中。如果一个应用程序可以覆盖另一个应用程序的代码并关闭一个窗口,这似乎是一个巨大的安全漏洞。看起来似乎不合理

看起来我错了。忽略!

答案 2 :(得分:0)

当然有办法做到这一点,我之前使用过的方法是基于win32API,你需要看看以下内容:

  1. FindWindow
  2. SendMessage
  3. 简而言之,您可以使用计时器,当它触发时使用FindWindow(使用窗口标题栏或应用程序“class”)来获取句柄,一旦您将SendMessage发送到至少一个窗口WM_CLOSE或WM_DESTROY