我正在用 C# 编写一个简单的应用程序。我希望这个应用程序在系统托盘中检测 Windows 上任何地方的焦点元素。如果焦点元素是文本框(用户可以输入文本的任何地方),则应用程序应在系统托盘上显示通知。我的问题是,如何检测一个焦点元素并检查它?
问问题
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
您可以使用此代码检查焦点文本框。
foreach (Control item in this.Controls)
{
if (item is TextBox && item.Focused)
{
//Write your notification code here.
}
}
于 2012-11-11T08:08:05.057 回答