InPtr hwnd = GetForegroundWindow();
public static void GetAppActiveWindow(IntPtr hwnd)
{
uint remoteThreadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero);
uint currentThreadId = GetCurrentThreadId();
//AttachTrheadInput is needed so we can get the handle of a focused window in another app
AttachThreadInput(remoteThreadId, currentThreadId, true);
//Get the handle of a focused window
IntPtr focussed = GetFocus();
StringBuilder activechild = new StringBuilder(256);
GetWindowText(focussed, activechild, 256);
string textchld = activechild.ToString();
if (textchld.Length > 0)
{
Console.WriteLine("The active Child window is " + textchld + " .");
}
//Now detach since we got the focused handle
AttachThreadInput(remoteThreadId, currentThreadId, false);
}
這是它終於解決了這個問題:)
你爲什麼要與其他應用程序的窗口搞亂?如果這用於測試自動化,則可以使用System.Windows.Automation命名空間。 – 2012-04-10 09:21:20
這不是測試自動化....它需要很長時間來解釋我的應用程序打算做什麼,但我會盡快給你介紹,我必須預先填充活動應用程序中的子窗口列表,跟蹤用戶的動作(點擊),並通過引用使用EnumChildWindows所做的查找來指導他下一步該做什麼,因此我需要確切知道哪個子窗口具有焦點。你可以請給我一些指示,以瞭解如何使用System.Windows.Automation來完成....提前致謝! – Ajit 2012-04-10 11:48:24
哦,這是針對計算機培訓的。 System.Windows.Automation可能仍然有用。您可以閱讀文檔以加快速度;我不打算在評論中教你。 – 2012-04-10 13:44:11