2010-03-09 227 views
1

我將阻止打開來自iTunes的窗口。 我搜索了很多,但無法找到一個允許我控制這些事情的iTunes庫,所以我認爲我必須回到基礎並在打開後關閉它,但是如何?如何防止從其他應用程序打開窗口?

我想:

  • 勾選定時器每500毫秒
  • 檢查窗口句柄打開
  • 關閉它

這可能嗎? 如何在其他計算機上識別此應用程序的窗口(我將放棄我的應用程序)?

語言是C#.Net 2.0。

回答

1

是的,它是一個查找窗口並關閉它的選項。但用戶仍然會看到它。

你可以做FindWindow函數的PInvoke的方法或使用C#的人(喜歡的)

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

From here

這僅用於封閉頂部的應用程序,我不知道你是否能找到子流程與流程。 我知道你可以用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); 
0

也許我錯了這裏,因爲我非常的業餘編碼器,但是讓我來拍這個:

這甚至可能嗎?控制窗口關閉的機制在應用程序中(在您的示例中爲iTunes)本身和操作系統。這似乎是一個巨大的安全漏洞,如果一個應用程序可以覆蓋另一個應用程序的代碼並關閉一個窗口。似乎並不合理

看起來我在這裏錯了。忽視!

+0

它是可行的,它可能會引起一些眉毛,但它肯定是你可以做的事情。如果你想更加松鼠,看看應用程序掛鉤....再次它可能會引起一些眉毛,但有合法用途 – curtisk

+0

啊好的,謝謝你的信息! – joslinm

+0

以備將來參考,這樣您就可以避免將來的用戶羣的一些後顧之憂:如果您實際上沒有回答主要問題,那麼您應該爲主要問題添加評論,這是討論區域(評論),只應回答是答案(雖然他們可以在他們下面有評論,像這裏..) – curtisk

0

當然有辦法做到這一點,我之前使用的方法是基於win32APIs,你要看看下面:

  1. FindWindow
  2. SendMessage

簡而言之,您可以使用計時器,當它觸發時使用FindWindow(使用窗口標題欄或應用程序「class」)來獲取句柄,一旦您將SendMessage發送到至少有一個WM_CLOSE的窗口或WM _DESTROY

相關問題