質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

1回答

2205閲覧

WPFのsoftwarekeyboadで自分のwindowに文字入力したい

cancat

総合スコア313

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/08/22 08:56

こんにちは。
WPFのapplicationを作っています。

###前提・実現したいこと
xamlでTextBoxを配置し、そこにFocusしたらsoftware keyboardを表示し、入力できるようにしようと考えました。

###発生している問題・エラーメッセージ
http://sturnus.hateblo.jp/entry/2014/08/10/025238
でsoftware keyboardを入手、sourcecodeに組み込みました。

C#

1KeyBoardWindow key = new KeyBoardWindow(); 2 3textbox.GotFocus += Textbox_GotFocus; 4textboxbox.LostFocus += Textbox_LostFocus; 5 6private void Textbox_GotFocus(object sender, RoutedEventArgs e) { 7 key.Show(); 8} 9 10private void Textbox_LostFocus(object sender, RoutedEventArgs e) { 11 key.Hide(); 12} 13

このコードで、MainWindowから呼び出してsoftwarekeyboardを表示できるようになりました。

ところが、そのsoftwarekeyboardは、たとえば外部のメモ帳には文字入力できるのですが、MainWindowのTextboxには文字入力できないのです。
どうしたら自分自身のMainWindowのTextboxに文字入力できるようになるのでしょう?

C#

1 //ウインドウをアクティブにしない--------------------------------------- 2 [DllImport("user32.dll")] 3 private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 4 5 [DllImport("user32.dll")] 6 private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 7

というようなところがあり、

C#

1 protected override void OnSourceInitialized(EventArgs e) 2 { 3 base.OnSourceInitialized(e); 4 5 var helper = new WindowInteropHelper(this); 6 SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE); 7 } 8

という処理をしています。
softwarekeyboardのWindowをActiveにする処理の問題なのかなと思います。

C#

1 // var helper = new WindowInteropHelper(this); 2// SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE); 3 4``` のようにコメントアウトしましたが、MainWindowのTextboxには文字入力できない状況には変化がありませんでした。 5 6アドバイスよろしくお願いします。 7 8###補足情報(言語/FW/ツール等のバージョンなど) 9Microsoft Visual Studio Community 2015 10 Version 14.0.25424.00 Update 3 11 Microsoft .NET Framework 12 Version 4.6.01038 13 14インストールされているバージョン:Community 15 16Visual C# 2015 00322-20000-00000-AA575 17 Microsoft Visual C# 2015 18 19です。 20 よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/01 10:21

WPFのコントロールは、ウィンドウハンドルをそもそも持って居なかったと思いますので、WinAPIを実行しようとしても無理だと思います。 https://teratail.com/questions/52025
guest

回答1

0

まず .NET のバージョンを 4.6.2 以降に上げてみてください。後のことはそこからです。

ソフト キーボードのサポート

追記

低評価する場合はきちんと理由を書きましょう。嫌がらせの低評価はしかるべき措置を取ります。

投稿2021/02/01 09:56

編集2021/02/04 08:23
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問