【解決方法】WindowsのどこでもアクティブなC#WPFキャレット

[ad_1]

やあ
ビデオ チュートリアルを作成するときに使用する C# および WPF のキーボード ショートカット (ホットキー) を表示するプログラムを作成しています。

これまでに行ったことはすべて、かなりうまく機能しています。 問題は、キーボード ショートカットを処理したくない場合があることです。つまり、ショートカットを表示したくない場合があります。

これは、ユーザーがキャレットが点滅している編集可能なテキストボックスまたは要素に何かを入力している場合です。

私はここでそのような作品の解決策を見つけました:
アプリケーション内でのキャレット位置の取得[^]

位置や、カーソルがアクティブで画面上のどこかで点滅している以外のことを知る必要はありません。 次に、押されているキーの表示を無視し、画面に表示しません。 上記のコードの問題は、一部のアプリでは機能するが、他のアプリでは機能しないことです。 3dsmax ではすべて正常に動作しますが、Maya では入力ボックスを 2 回クリックするだけで動作しますが、シネマ 4d などの他の 3D プログラムではまったく動作しません。

C# と WPF を使用して、外部プログラムで点滅するキャレット/アクティブなキャレットを検出する方法はありますか?

ありがとう
ロブ

私が試したこと:

私が試してみました:

public void GetCaretPosition()
{

    guiInfo = new GUITHREADINFO();
    guiInfo.cbSize = (uint)Marshal.SizeOf(guiInfo);

    // Get GuiThreadInfo into guiInfo
    GetGUIThreadInfo(0, out guiInfo);

}
private void EvaluateCaretPosition()
 {

     // RJA - This method is used to determine if user is trying to type text
     // RJA - if so, we wont show it as shortcuts
     caretPosition = new Point();

     // Fetch GUITHREADINFO
     GetCaretPosition();

     caretPosition.X = (int)guiInfo.rcCaret.Left + 25;
     caretPosition.Y = (int)guiInfo.rcCaret.Bottom + 25;

     if ((int)caretPosition.X != 25 || (int)caretPosition.Y != 25)
     {
         Globals.bCaretActive = true;
     }
     else
     {
         Globals.bCaretActive = false;
     }

     txtCaret.Text = ((int)caretPosition.X).ToString() + " / " + ((int)caretPosition.Y).ToString();

 }

[ad_2]

コメント

タイトルとURLをコピーしました