No.2ベストアンサー
- 回答日時:
過去スレ 「InputManを使えで解決」
http://oshiete1.goo.ne.jp/kotaeru.php3?q=42751
それ以外に力技で作ることも可能です。
(InputManが現実にあるように)
しかしこの方法は、かなり作りこまないと、実用には難しいと思います。
簡単なフリガナ取得サンプルを載せておきます。
この方法は今は亡き「Visual Basic増強作戦」という超有名サイトで公開されていた、IMEの操作サンプルを元に作ったものです。完全体ではないので、かなりの改造を必要とします。
※サンプル構成
Project1
├Form1(フォーム)
│├TextBox1
│└TextBox2
└Class1(クラス)
--- Form1 ---
Option Explicit
Dim clsKana As Class1
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
Set clsKana = New clsKana
clsKana.Target = Text1.hwnd
clsKana.IMEOpen = True
clsKana.IMEMode = 1
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set clsKana = Nothing
End Sub
Private Sub Text1_Change()
If Not clsKana Is Nothing Then
Me.Text2.Text = clsKana.ResultRead
End If
End Sub
--- Class1 ---
Option Explicit
Private Declare Function ImmGetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long) As Long
Private Declare Function ImmSetOpenStatus Lib "Imm32.dll" (ByVal hIMC As Long, ByVal b As Long) As Long
Private Declare Function ImmGetConversionStatus Lib "Imm32.dll" (ByVal hIMC As Long, lpdw As Long, lpdw2 As Long) As Long
Private Declare Function ImmSetConversionStatus Lib "Imm32.dll" (ByVal hIMC As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
Private Declare Function ImmGetCompositionString Lib "Imm32.dll" Alias "ImmGetCompositionStringA" (ByVal hIMC As Long, ByVal dw As Long, lpv As Any, ByVal dw2 As Long) As Long
Private Declare Function ImmReleaseContext Lib "Imm32.dll" (ByVal hwnd As Long, ByVal hIMC As Long) As Long
Private Declare Function ImmGetContext Lib "Imm32.dll" (ByVal hwnd As Long) As Long
Private Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private lngAPIReVal As Long 'APIの戻り値を格納
Private lngIMEHandle As Long 'IMEのコンテキストを格納
Private lngTargetWindow As Long '操作対象ウィンドウのハンドル
Private lngLayoutHandle As Long 'キーボードレイアウトのハンドル
Private Const GCS_RESULTREADSTR = &H200 '結果文字列の読み
'入力モードの定数
Private Const IME_CMODE_NATIVE = &H1 '直接入力
Private Const IME_CMODE_KATAKANA = &H2 'カタカナ
Private Const IME_CMODE_LANGUAGE = &H3 '日本語
Private Const IME_CMODE_FULLSHAPE = &H8 '全角
Private Const IME_CMODE_ROMAN = &H10 'ローマ字
Private Const IME_CMODE_CHARCODE = &H20 'コード入力
'初期変換方式の定数
Private Const IME_SMODE_NONE = &H0 '無変換
Private Const IME_SMODE_PLAURALCLAUSE = &H1 '複合語優先
Private Const IME_SMODE_SINGLECONVERT = &H2 '不明
Private Const IME_SMODE_AUTOMATIC = &H4 '自動
Private Const IME_SMODE_PHRASEPREDICT = &H8 '連文節
Private Sub Class_Initialize()
lngLayoutHandle = GetKeyboardLayout(0)
End Sub
Private Sub Class_Terminate()
lngAPIReVal = ImmReleaseContext(lngTargetWindow, lngIMEHandle)
End Sub
Public Property Get Target() As Long
Target = lngIMEHandle
End Property
Public Property Let Target(lngNewTarget As Long)
lngAPIReVal = ImmReleaseContext(lngTargetWindow, lngIMEHandle)
If IsWindow(lngNewTarget) = 0 Then
Exit Property
End If
lngTargetWindow = lngNewTarget
lngIMEHandle = ImmGetContext(lngNewTarget)
End Property
Public Property Get ResultRead() As String
Dim strBuff As String * 256
Dim lngNullCharPos As Long
Dim lngSpaceCharPos As Long
'変換結果の「読み」を取得
lngAPIReVal = ImmGetCompositionString(lngIMEHandle, _
GCS_RESULTREADSTR, ByVal strBuff, Len(strBuff))
lngNullCharPos = InStr(strBuff, vbNullChar)
lngSpaceCharPos = InStr(strBuff, " ")
If lngNullCharPos > 0 Then
ResultRead = Left$(strBuff, InStr(strBuff, vbNullChar) - 1)
ElseIf lngSpaceCharPos > 0 Then
ResultRead = Left$(strBuff, InStr(strBuff, " ") - 1)
End If
End Property
Public Property Get IMEOpen() As Boolean
If ImmGetOpenStatus(lngIMEHandle) = 1 Then
IMEOpen = True
Else
IMEOpen = False
End If
End Property
Public Property Let IMEOpen(tofNewValue As Boolean)
If tofNewValue = True Then
lngAPIReVal = ImmSetOpenStatus(lngIMEHandle, 1)
Else
lngAPIReVal = ImmSetOpenStatus(lngIMEHandle, 0)
End If
End Property
Public Property Get IMEMode() As Long
Dim lngInputMode As Long
Dim lngConvertMode As Long
lngAPIReVal = ImmGetConversionStatus(lngIMEHandle, _
lngInputMode, lngConvertMode)
'日本語の場合
If lngInputMode And IME_CMODE_LANGUAGE Then
'全角ひらがなである
IMEMode = 1
'カタカナの場合
If lngInputMode And IME_CMODE_KATAKANA Then
'全角の場合
If lngInputMode And IME_CMODE_FULLSHAPE Then
'全角カタカナである
IMEMode = 2
Else
'半角カタカナである
IMEMode = 4
End If
End If
Else
'全角の場合
If lngInputMode And IME_CMODE_FULLSHAPE Then
'全角英数である
IMEMode = 3
Else
'半角英数である
IMEMode = 5
End If
End If
End Property
Public Property Let IMEMode(lngNewMode As Long)
Dim lngInputMode As Long
Dim lngConvertMode As Long
'IMEの初期変換方式と入力モードを取得
lngAPIReVal = ImmGetConversionStatus(lngIMEHandle, lngInputMode, lngConvertMode)
'入力モードの設定
Select Case lngNewMode
Case 1
'全角ひらがなの場合
lngInputMode = lngInputMode And Not IME_CMODE_KATAKANA
lngInputMode = lngInputMode Or IME_CMODE_FULLSHAPE Or IME_CMODE_NATIVE
Case 2
'全角カタカナの場合
lngInputMode = lngInputMode Or IME_CMODE_LANGUAGE Or IME_CMODE_FULLSHAPE Or IME_CMODE_KATAKANA
Case 3
'全角英数の場合
lngInputMode = lngInputMode And Not IME_CMODE_LANGUAGE
lngInputMode = lngInputMode Or IME_CMODE_FULLSHAPE
Case 4
'半角カタカナの場合
lngInputMode = lngInputMode And Not IME_CMODE_FULLSHAPE
lngInputMode = lngInputMode Or IME_CMODE_LANGUAGE Or IME_CMODE_KATAKANA
Case 5
'半角英数の場合
lngInputMode = lngInputMode And Not IME_CMODE_FULLSHAPE
lngInputMode = lngInputMode And Not IME_CMODE_LANGUAGE
End Select
lngAPIReVal = ImmSetConversionStatus(lngIMEHandle, lngInputMode, lngConvertMode)
End Property
No.1
- 回答日時:
VB5の情報ですが基本的にできないみたいですよ。
http://www.microsoft.com/japan/msdn/vs_previous/ …
下記のような方法もあるみたいですが、BackSpace等を使用すると
意図しない動きをしてしまった記憶があります。
他にもあるかもしれませんが、、参考まで。
http://www.remus.dti.ne.jp/~y-mac/teclib/getcomp …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- 国産車 カーナビで名称登録をしても検索できません!住所もわからない場合は何か良い方法がありますか?名称登録の 1 2022/04/25 18:59
- その他(パソコン・周辺機器) ローマ字入力ができない人は多いのでしょうか 5 2022/12/21 05:12
- マウス・キーボード キーボード Oキーを押すとプルダウンメニューが出る 4 2022/09/08 14:48
- マウス・キーボード キーボードのカナって必要ですか? DOS時代からパソコン触ってますが、カナ入力したこと記憶にありませ 14 2022/11/03 13:27
- マウス・キーボード パソコンでのミスタイプ~こうなってしまうとイラっとしませんか?→pasokonndenomisuta 2 2023/08/03 08:41
- Excel(エクセル) エクセルで、例えばAのセルの値次第で、Bのセルの値を自動入力する方法を教えてください。 2 2022/08/02 12:10
- Excel(エクセル) エクセルについて質問です 1 2022/12/10 11:49
- その他(データベース) エクセル 自動入力 1 2022/10/17 21:17
- Firefox(ファイヤーフォックス) Firefox bookmarkの検索BOXでのインクリメンタルサーチを止めたい 5 2022/06/29 12:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
全角英数字の必要性が理解できない
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 文字に半角が含まれて...
-
Accessのテキストボックスの入...
-
COBOLで全角変換を行いた...
-
エクセルにMicrosoft Barcode C...
-
COBOLでの全角文字の判定をした...
-
エクセルでの”々”の扱い
-
プログラミングでは、半角括弧...
-
C言語のコンパイルエラーなん...
-
「 _ _ 」の正式名称を...
-
VBA 「,」・空白・カタカナ等...
-
Accessで日付や数値を全角で表...
-
\\はエクセルでは全角?
-
コマンドプロンプト 全角を含ん...
-
[VBScript]バイト長の判定
-
COBOL・全角判定
-
名前の名字の間のスペースについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
VBA 文字に半角が含まれて...
-
エクセルにMicrosoft Barcode C...
-
全角英数字の必要性が理解できない
-
IEからEdgeへの移行に伴うIMEの...
-
住宅にカナを入力する際に丁目...
-
プログラミングでは、半角括弧...
-
COBOL・全角判定
-
VB.net、テキストボックス入力...
-
word差し込み印刷 半角カタカ...
-
全角入力
-
Accessのテキストボックスの入...
-
VBで、String型のデータが、...
-
よくアカウント等に使われる 半...
-
char型全角数字から、int型半角...
-
[VBScript]バイト長の判定
-
全角チルダと波ダッシュに関す...
-
封筒の宛先で縦書きの書き方
-
Accessでのグループ化で全角・...
-
CString Format にて全角空白文...
おすすめ情報