1

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

4

2 回答 2

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,请告诉我

于 2012-11-11T07:44:14.233 回答
0

您可以使用此代码检查焦点文本框。

foreach (Control item in this.Controls)
        {
            if (item is TextBox && item.Focused)
            {
                //Write your notification code here.
            }
        }
于 2012-11-11T08:08:05.057 回答