0

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

键盘是一个独立的应用程序,因此它不能直接处理控件,只需访问操作系统即可。

为了获得更多解释,我将告诉你场景:

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

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

4

3 回答 3

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

于 2012-10-01T07:53:36.737 回答
0

您将需要两个 Windows API 函数

获取活动窗口(无效);获取窗口类()

第一个会给你活动窗口(焦点窗口),第二个会让你知道它是否是一个文本窗口。

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

它更多地是关于 Windows API。

于 2012-10-01T10:16:07.910 回答
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

        }
    }
于 2012-11-19T05:58:14.690 回答