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