如何判断文本框是否集中在操作系统中?

时间:2012-10-01 07:11:31

标签: c#

我需要对键盘进行编程,并进行一些配置和自定义。 如果在键盘之前聚焦了任何文本区域,我需要将其配置为启用。 主要是我需要知道选择了什么控件。

键盘是一个独立的应用程序,因此只需访问操作系统就无法直接处理控件。

有关更多解释,我将告诉你情景:

  1. 用户运行键盘应用程序,其中“最顶层”设置,并且ShowInTaskBar未设置,并且键盘已禁用。
  2. 用户点击窗口中的任何文本控件,如记事本或Microsoft Word或Paint中的TextBox,然后单击键盘应用程序后启用。

  3. 用户点击键盘应用程序及其键,在步骤2之前选择的TextBox上写入文本,请注意前一个TextBox将失去焦点,但键盘仍然会启用。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用Focused property

foreach (var control in this.Controls)
{
    if (control.Focused)
    {
          ....
        }
}

链接:http://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.focused.aspx

答案 1 :(得分:0)

您将需要两个Windows API函数

GetActiveWindow(无效); GetWindowClass()

首先会给你活动的窗口(Focussed窗口),第二个会告诉你它是否是一个文本窗口。

您需要更多函数sendmessage(...)来获取窗口的当前文本以及设置文本。

更多关于Windows API。

答案 2 :(得分: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

        }
    }