1

C#で簡単なアプリを書いています。このアプリをシステム トレイで、Windows のどこにでもあるフォーカスされた要素を検出する必要があります。フォーカスされた要素がテキスト ボックス (ユーザーがテキストを入力できる場所) である場合、アプリは systray に通知を表示する必要があります。私の問題は、フォーカスされた要素を検出してチェックする方法ですか?

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

このコードを使用して、フォーカスされたTextBoxをチェックできます。

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