2014-01-09 106 views
2

我有一個WPF應用程序通過套接字連接與C++ MFC應用程序進行通信。如果用戶在C++應用程序中按下特定按鈕,則會顯示一個新的WPF窗口。打開時強制窗口有焦點

下面是被調用來啓動WPF窗口中的代碼:就是以這種方式顯示不會有鍵盤焦點

var window = new Window(); 
window.Topmost = true; 
window.Show(); 
window.Activate(); 
window.Topmost = false; 

某些機器上,第一個窗口(也只有第一個窗口) 。它將在C++應用程序的前面,但C++應用程序仍然有鍵盤焦點。有什麼我可以做的強制WPF窗口每次都採取鍵盤焦點?

+0

'window.Focus()'應該爲你做。 – evanmcdonnal

+0

'window.Focus()'每次都返回false。 – battmanz

+0

'window.Focus()'返回一個布爾值,標識該窗口是否有焦點。我的猜測是,當你調用'Focus()'時,你的窗口並沒有焦點,所以它總是假的......給你的窗口焦點,使用'window.Focus()= true; –

回答

1

事實證明,window.Activate()正在恢復false。縱觀該方法的documentation,它說,

決定被激活的窗口是否是相同的那些由Win32 SetForegroundWindow函數(User32.dll中)使用的規則。

用於SetForegroundWindow的文檔,然後指出:

,可以設置前景窗口可以使另一過程通過調用AllowSetForegroundWindow函數來設置前臺窗口的方法。

因此,解決方案是讓C++應用程序使用AllowSetForegroundWindow函數爲WPF應用程序設置前景窗口的權限。

0

您是否試過將上的Window設置爲true,然後再調用window.Focus()

2

試試這個:

var window = new Window();  
window.Show(); 
window.Activate(); 
window.Focus(); 
window.Topmost = true; 
window.Topmost = false;