在屏幕上的任何位置检测聚焦文本框

时间:2012-11-11 07:32:53

标签: c# .net windows

我正在用C#编写一个简单的应用程序。我想在systray中的这个应用程序检测Windows上任何位置的聚焦元素。如果聚焦元素是文本框(用户可以在任何地方输入文本),则应用程序应在系统托盘上显示通知。我的问题是,如何检测聚焦元素并进行检查?

2 个答案:

答案 0 :(得分:0)

没有绝对的方法,有太多的控件允许你添加文字。

您可以像我在我的应用程序中那样搜索插入符号位置,但它不能在每个地方工作,

这是我使用的代码,

        GUITHREADINFO lpgui = new GUITHREADINFO();
        IntPtr fore = GetForegroundWindow();
        uint tpid = GetWindowThreadProcessId(fore, IntPtr.Zero);
        lpgui.cbSize = Marshal.SizeOf(lpgui.GetType());
        bool flag = GetGUIThreadInfo(tpid, out lpgui);
        WINDOWINFO pwi = new WINDOWINFO();
        pwi.cbSize = (uint)Marshal.SizeOf(pwi.GetType());
        GetWindowInfo((IntPtr)lpgui.hwndCaret, ref pwi);

        if (flag)
        {
            if (!(lpgui.rcCaret.Location.X == 0 && lpgui.rcCaret.Location.Y == 0))
            {

//TODO

            }
        }

这种方式在太多的应用程序中运行良好,您可以将此代码放在计时器或任何您想要的地方

你必须使用winapi,如果你不熟悉api,请通知我

答案 1 :(得分:0)

您可以使用此代码检查焦点TextBox。

foreach (Control item in this.Controls)
        {
            if (item is TextBox && item.Focused)
            {
                //Write your notification code here.
            }
        }