2011-05-29 161 views
5

我正在制作一个C#WPF应用程序,并且每次用户在我的应用程序之外的某个地方单击时,我想要显示一个警告,并显示单击窗口的TITLE。要检测我的应用程序外部的点击次数,我正在使用LowLevelMouseProc。但是,我将如何获得专注于C#的窗口?C#获得焦点窗口?

在此先感谢!

编辑: 我知道这是不是与我原来的问题,但我怎么会得到关注,以及控制?

+0

第二个问题:您可能需要一个函数['GetFocus()'](http://msdn.microsoft.com/en-us/library/ms646294%28v=vs.85%29.aspx) - 阅读MSDN页面上的注释 – 2011-05-29 23:06:24

+0

您确定只想检测用户在应用程序外部点击*的情况吗?用户也可以使用键盘来切换窗口。您可以尝试查看WM_ACTIVATE消息:http://stackoverflow.com/questions/813356/determine-where-activation-is-going-when-a-form-is-deactivated(Winforms,但相同的基本思想适用于WPF以及当你从WPF窗口获得HWNDs时) – 2011-05-29 23:27:11

回答

3

关于如何获得焦点控制的后续问题,您可以使用GetGUIThreadInfo获得集中控制的HWND。请注意,您传递的是拥有外部窗口的线程,而不是外部窗口本身(函数文档告诉您如何从外部窗口句柄获取线程ID)。重点HWND通过GUITHREADINFO.hwndFocus成员返回。

请注意,通常情况下,你不能比HWND做得更好,因为前景窗口不一定是.NET应用程序。例如,如果外部窗口是WPF窗口,那么而不是会告诉您该窗口中的哪个WPF控件具有焦点,因为WPF控件没有HWND。

6

GetForegroundWindow应该这样做。

+0

谢谢你,那可行!我知道这与我原来的问题没有关系,但我怎样才能将控制集中在一起? – mattsven 2011-05-29 21:55:15