0

いくつかの構成とカスタマイズを使用して、キーボードをプログラムする必要があります。キーボードの前にテキスト領域がフォーカスされている場合に有効になるように構成する必要があります。主に、どのコントロールが選択されているかを知る必要があります。

キーボードはスタンドアロン アプリケーションであるため、OS にアクセスするだけで直接コントロールを処理することはできません。

詳細については、シナリオを説明します。

  1. ユーザーがキーボード アプリケーションを実行すると、その「最上位」が設定され、設定が解除されShowInTaskBar、キーボードが無効になります。
  2. ユーザーがウィンドウ内の任意のテキスト コントロール (Microsoft Word またはペイントのメモ帳や TextBox など) をクリックすると、キーボード アプリケーションが有効になります。

  3. ユーザーがキーボード アプリケーションとそのキーをクリックして、前の手順 2 で選択した TextBox にテキストを書き込むと、前の TextBox はフォーカスを失いますが、キーボードは引き続き有効になることに注意してください。

4

3 に答える 3

0

2 つの Windows API 関数が必要です。

GetActiveWindow(無効); GetWindowClass()

1 つ目はアクティブなウィンドウ (フォーカス ウィンドウ) を表示し、2 つ目はそれがテキスト ウィンドウかどうかを知らせます。

ウィンドウの現在のテキストを取得し、テキストを設定するには、さらに関数 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 に答える
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 に答える