【发布时间】:2010-03-09 12:17:17
【问题描述】:
我将阻止从 iTunes 打开一个窗口。 我用谷歌搜索了很多,但找不到可以让我控制这些东西的 iTunes 库,所以我想我必须回到基础并在它打开后关闭它,但是如何?
我认为:
- 每 500 毫秒打一个计时器
- 检查窗口句柄是否打开
- 关闭它
这可能吗? 如何在其他计算机上通过此应用程序识别窗口(我将放弃我的应用程序)?
语言是 C#.Net 2.0。
【问题讨论】:
我将阻止从 iTunes 打开一个窗口。 我用谷歌搜索了很多,但找不到可以让我控制这些东西的 iTunes 库,所以我想我必须回到基础并在它打开后关闭它,但是如何?
我认为:
这可能吗? 如何在其他计算机上通过此应用程序识别窗口(我将放弃我的应用程序)?
语言是 C#.Net 2.0。
【问题讨论】:
是的,它是一个查找窗口并关闭它的选项。但是用户仍然会看到它。
您可以使用 FindWindow 的 PInvoke 方法或使用 C# 方法(首选那些)
using System.Diagnostics;
Process[] processes = Process.GetProcessesByName("notepad");
foreach (Process p in processes)
{
p.CloseMainWindow();
}
这只是为了关闭顶级应用程序,我不知道你是否可以找到带有进程的子窗口。 我知道您可以使用 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);
【讨论】:
当然有办法做到这一点,我之前使用的一种方法是基于 win32API,您需要查看以下内容:
简而言之,您可以使用计时器,并在它触发时使用 FindWindow(使用窗口标题栏或应用程序“类”)来获取句柄,一旦您将 SendMessage 发送到至少一个窗口WM_CLOSE 或 WM_DESTROY
【讨论】: