
アクティブウインドウのIMEコンテキスト取得を取得したい。
以下、問題のコードです。
---ここから
'アクティブウインドウのハンドルを取得API宣言
Private Declare Function GetActiveWindow Lib "user32" () As Long
'IMEコンテキスト取得API宣言
Private Declare Function ImmGetContext Lib "imm32.dll" _
(ByVal hWnd As Long) As Long
Private Sub CommandButton1_Click()
'アクティブウインドウのハンドルを取得
Dim hWnd As Long
hWnd = GetActiveWindow()
'IMEコンテキスト取得
Dim himc As Long
himc = ImmGetContext(hWnd)
End Sub
---ここまで
上記のコードでアクティブウインドウ(上記例の場合、エクセル)でのIMEコンテキスト取得
したいと思っています。
hWndでは、ハンドルを取得できているのですが、
himcの戻り値が0になってしまって、IMEコンテキスト取得が失敗しています。
目的は、アクティブウインドウでのIMEの入力をローマジ入力の半角英数のみにすることです。
そのため、IMEコンテキスト取得を取得したいのですが、上記方法のどこがいけないでしょうか?
どうぞよろしくお願いします。
言語:VBA(Excel 2007)
OS:Vista
No.2ベストアンサー
- 回答日時:
hWnd = GetActiveWindow()
で取得できるのは、Excel の一番外枠のウィンドウのハンドルですが、このウィンドウには入力フォーカスはありませんので
himc = ImmGetContext(hWnd)
が 0 になるのだと思います。
今、手元には Excel 2000 の環境しかないのですが、Excel 2000 では
hWnd = GetActiveWindow()
のウィンドウの子ウィンドウの中にクラス名が XLDESK のウィンドウがあり、
さらにその子ウィンドウにクラス名が EXCEL7 ( Excel 2007 では EXCEL10 ? ) で、
ウィンドウキャプションがブック名のウィンドウがあり、このウィンドウに対して
himc = ImmGetContext(hWnd)
を実行すると 0 でない値が取得できました。
GetWindow() や FindWindowEx() を使用すると目的のウィンドウのハンドルを取得できると思います。(再帰的に検索しなければならないかも)
なるほど。入力できる子ウインドウを見つければよいのですね。GetWindow() で試してみましたが、どうもうまくいきませんでした。しかし、ハンドルの取得の仕方は他にもあるようです。いろいろ試してみたいと思います。ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
Excelの上下を固定したい
-
C# ウィンドウハンドルの取得
-
非アクティブのウィンドウを最...
-
ExcelのBOOKが消えた!
-
UWSCで特定のChromeのタブをア...
-
Msgboxの変数の表示につ...
-
皆さん、おはようございます♪ ...
-
エクセルでフレーム仕様?
-
マインクラフト(pc版)で座標...
-
VBでのハンドルの使い方
-
[VB.net] DataGridViewの列ヘッ...
-
メッセージボックスを大きくす...
-
jw-cadにBMP画像を貼り付けまし...
-
C言語による楕円関数の記述
-
エクセルのコントロールツール...
-
グラフの交点の求め方(Excel)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
皆さん、おはようございます♪ ...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
[VBA] UserForm を Excel の W...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
「&HFFFF」「&H1A」とは?
-
指定したインアクティブウィン...
-
エクセルで1行目から3行目が消...
-
OutlookでRSSフィードやメモの...
-
UWSCで特定のChromeのタブをア...
-
VBA .Value=.Value ?
-
パソコン関連)何度消してもま...
-
Alt+P,Alt+NをPostmessageで送...
おすすめ情報