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