アクティブウインドウの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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Win32のIME制御について
C言語・C++・C#
-
IMEのモードを強制的に変えるには
Visual Basic(VBA)
-
API関数ImmSetConversionStatus のビットセット
Visual Basic(VBA)
-
-
4
ブラウザなどで入力された文字列を取得する方法
その他(プログラミング・Web制作)
-
5
IEからEdgeへの移行に伴うIMEの状態(ime-mode)
HTML・CSS
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
コンボボックスのリストに水平...
-
Vba LongPtrについて教えてくだ...
-
勝手にウィンドウが開いて止ま...
-
Excelでの項目名固定
-
C++ 子ウィンドウのハンドルを...
-
MDI(自作メモ帳)の子ウィンドウ...
-
ゲームでは結局どっちが良いの?
-
最大化と最小化ボタン
-
DellノートPC購入で悩んでいま...
-
WM_KEYDOWN が拾えない(EditBo...
-
VBA .Value=.Value ?
-
UWSCで特定のChromeのタブをア...
-
ExcelVBAでAPIを使って外部ウイ...
-
VBAでのタイトルバーの取得
-
クリスタルレポートからPDFを作...
-
PM7600/200でMPEGの作成
-
Ctrl+Cを2回押してもOfficeクリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
Alt+P,Alt+NをPostmessageで送...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報