我將阻止打開來自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);
也許我錯了這裏,因爲我非常的業餘編碼器,但是讓我來拍這個:
這甚至可能嗎?控制窗口關閉的機制在應用程序中(在您的示例中爲iTunes)本身和操作系統。這似乎是一個巨大的安全漏洞,如果一個應用程序可以覆蓋另一個應用程序的代碼並關閉一個窗口。似乎並不合理
看起來我在這裏錯了。忽視!
當然有辦法做到這一點,我之前使用的方法是基於win32APIs,你要看看下面:
簡而言之,您可以使用計時器,當它觸發時使用FindWindow(使用窗口標題欄或應用程序「class」)來獲取句柄,一旦您將SendMessage發送到至少有一個WM_CLOSE的窗口或WM _DESTROY
它是可行的,它可能會引起一些眉毛,但它肯定是你可以做的事情。如果你想更加松鼠,看看應用程序掛鉤....再次它可能會引起一些眉毛,但有合法用途 – curtisk
啊好的,謝謝你的信息! – joslinm
以備將來參考,這樣您就可以避免將來的用戶羣的一些後顧之憂:如果您實際上沒有回答主要問題,那麼您應該爲主要問題添加評論,這是討論區域(評論),只應回答是答案(雖然他們可以在他們下面有評論,像這裏..) – curtisk