アクティブウインドウの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も見ています
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
ブラウザなどで入力された文字列を取得する方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
VBAでのタイトルバーの取得
-
[VBA] UserForm を Excel の W...
-
最大化と最小化ボタン
-
隠れたウィンドウの画面をキャ...
-
ExcelのBOOKが消えた!
-
GUIへの外部ソフトウェアのウィ...
-
ExcelVBA:フォームの最小化ボ...
-
クリスタルレポートからPDFを作...
-
Swingで作ったウィンドウの最小...
-
VC++でタスクバーに表示させな...
-
親ウインドウにあるOKボタンを...
-
EXCEL2016で新しいウィンドウを...
-
Excelの上下を固定したい
-
Zオーダーが上から2番目のウイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ExcelのBOOKが消えた!
-
検索の画面がでなくなってしま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
VBA .Value=.Value ?
-
Vba LongPtrについて教えてくだ...
-
Excelの上下を固定したい
-
Alt+P,Alt+NをPostmessageで送...
-
[VBA] UserForm を Excel の W...
-
作成したウインドウのサイズを...
-
「&HFFFF」「&H1A」とは?
-
MFC ダイアログ上のID取得につ...
-
親ウインドウにあるOKボタンを...
-
ダイアログをスクロールさせるには
-
【VB2008】 マウス操作の一時的...
-
EnumChildWindowsの使い方(VBA)
-
名前を付けて保存のウィンドウ...
おすすめ情報