IMEのOn/Offは可能でしょうか

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
toti

IMEのOn/Offは可能でしょうか

#1 投稿記事 by toti »

はじめまして。最近activebasicを使うようになったtotiと申します。
プログラミングのスキルは、ひよっこレベルです。

さて、色々作って遊んでる段階なのですが、IMEのOn/Offを制御することは可能でしょうか?
具体的には、
起動時または、エディットボックスにフォーカスが移ったときにOnにさせたいのですが、
ヘルプをみたり、検索をしても方法が見つかりません。

「activebasicではムリだよ」とか「こんな方法がいいよ」なんて情報を頂けると嬉しいです。
あひる

#2 投稿記事 by あひる »

まず以下の関数を定義します。

コード: 全て選択

Declare Function ImmGetContext Lib "imm32.dll" (hWnd As HWND) As DWord
Declare Function ImmGetConversionStatus Lib "Imm32.dll" (hIMC As DWord, ByRef lpfdwConversion As DWord, ByRef lpfdwSentence As DWord) As DWord
Declare Function ImmGetOpenStatus Lib "imm32.dll" (hIMC As DWord) As DWord
Declare Function ImmSetOpenStatus Lib "imm32.dll" (hIMC As DWord, fOpen As Long) As DWord
Declare Function ImmReleaseContext Lib "imm32.dll" (hWnd As HWND, hIMC As DWord) As DWord

あとは、例えばエディットボックスを作ってからこんな感じで使用します。

コード: 全て選択

Sub MainWnd_EditBox1_SetFocus()'入力フォーカスを取得した
	Dim hImc As DWord
	Dim dwConv As DWord, dwSent As DWord
	Dim hEdit As HWND
	hEdit = GetDlgItem(hMainWnd, EditBox1)
	hImc = ImmGetContext(hMainWnd)
	ImmGetConversionStatus(hImc, dwConv, dwSent)
	ImmSetOpenStatus(hImc, TRUE)'Onにする
	ImmReleaseContext(hMainWnd, hImc)
End Sub

Sub MainWnd_EditBox1_KillFocus()'入力フォーカスを失った
	Dim hImc As DWord
	Dim dwConv As DWord, dwSent As DWord
	Dim hEdit As HWND
	hEdit = GetDlgItem(hMainWnd, EditBox1)
	hImc = ImmGetContext(hMainWnd)
	ImmGetConversionStatus(hImc, dwConv, dwSent)
	ImmSetOpenStatus(hImc, FALSE)'Offにする
	ImmReleaseContext(hMainWnd, hImc)
End Sub
おまけ
ImmGetOpenStatus関数でOn/Offを調べることもできます。


こんな方法でどうですか?
あひる

#3 投稿記事 by あひる »

コード: 全て選択

Dim hEdit As HWND
hEdit = GetDlgItem(hMainWnd, EditBox1)
この2行はいらなかったかもです…
toti

うまくいきました^‐^

#4 投稿記事 by toti »

こんにちは。スレ主です。

おかげさまでうまく行きました。
imm32.dll にある関数を使うんですね。
//
ImmGetConversionStatus
も必須ではないっぽいですね。ナシにしてスッキリさせました。

どうも,ありがとうございましたm..m
返信する