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

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

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

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

Q&A

解決済

1回答

2855閲覧

WPFクラスライブラリでの画面でIME制御用のコンテキストを取得したい

Display

総合スコア2

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

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

0グッド

0クリップ

投稿2021/03/11 01:31

VB.NET 2015を使用してダイアログっぽい画面を表示するWPFクラスライブラリを作成しようとしています。

画面としてテキストボックス、ボタンを1個づつ配置

xaml

1<Window x:Class="frm" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:CharInput" 7 mc:Ignorable="d" 8 Title="frame"> 9 <Grid> 10 <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="34" VerticalAlignment="Top" Width="150" Margin="10,59,0,0"/> 11 <Button x:Name="btn" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="90" Height="30"/> 12 </Grid> 13</Window>

ボタン押下時処理

VB

1Public Class frm 2 ' コンテキスト・ハンドルの取得 3 <DllImport("Imm32.dll")> 4 Private Shared Function ImmGetContext(ByVal hWnd As IntPtr) As IntPtr 5 End Function 6 7 <DllImport("Imm32.dll")> 8 Private Shared Function ImmGetCandidateList(ByVal hImc As IntPtr, ByVal deIndex As Integer, lpCandidateList As CANDIDATELIST, ByVal dwBufLen As Integer) As Integer 9 End Function 10 11 Private Structure CANDIDATELIST 12 Dim dwSize As Integer 13 Dim dwStyle As Integer 14 Dim dwCount As Integer 15 Dim dwSelection As Integer 16 Dim dwPageStart As Integer 17 Dim dwPageSize As Integer 18 Dim dwOffset As Integer 19 End Structure 20 21 Private Sub btn_Click(sender As Object, e As RoutedEventArgs) Handles btn.Click 22 Dim imeContext As IntPtr 23 Dim winHandle As IntPtr 24 Dim ioKana As String = "アイ" 25 Dim udtCandidateList As New CANDIDATELIST 26 Dim bufferSize As Integer 27 28 winHandle = New WindowInteropHelper(Me).Handle 29 imeContext = ImmGetContext(winHandle) 30 31 bufferSize = ImmGetCandidateList(imeContext, 0, udtCandidateList, 0) 32 bufferSize = ImmGetCandidateList(imeContext, 0, udtCandidateList, bufferSize) 33End Sub 34End Class

とりあえず試作として上記コードを作りました。
まず「ImmGetContext」でコンテキストを取得し、それを使って「ImmGetCandidateList」で変換候補を取得するなどを行いたいと思います。

ステップ実行で動作を確認したところ、「winHandle」は0以外の数値が入っていますが、「ImmGetContext」の返り値「imeContext」も0以外を期待しましたが0になってしまいます。

何か設定や指定が足りないのでしょうか。
ご教授をお願いいたします。

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

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

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

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

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

TN8001

2021/03/11 23:22

Windows FormsではImmのご経験があるんですよね? 同様だと思うのですがISC_SHOWUICANDIDATEWINDOWを抜けば、Contextを取得できました。 前回の回答で言及したWndProcのフックは、必須ではありませんでした。 実用上はIMN_CHANGECANDIDATE等を見るのにフックすることになるでしょうけど。 C#ですがこちらを参考に検証しました。 [CandidateListを取得する - moのブログ](https://mo3789530.hatenablog.com/entry/2020/02/23/213726 私はVBは全くできないので回答は控えます^^;
Display

2021/03/12 01:16

ありがとうございます。
guest

回答1

0

自己解決

テキストボックスにフォーカスを設定してからハンドルを取得し、コンテキストを取得すると0以外が返ってくるようになりました。

VB

1 'フォーカスを設定 2 txtBox1.Focus() 3 4 winHandle = New WindowInteropHelper(Me).Handle 5 imeContext = ImmGetContext(winHandle)

投稿2021/03/12 01:20

Display

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問