tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 他のWindowにVK_MENUを送信してメニューをアクティブにする
投稿日: 2005/10/29(Sat) 12:42
投稿者YAS
参照先http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/
[OSのVer]:Windows    [VBのVer]:VB.NET  
花ちゃんさん,ありがとうございます。

> ひょっとして Keys.Alt を送っていませんか? 
> Private Const VK_MENU = &H12 を送っていますか?

はい,VK_MENU = &H12 を定義して送っています。

> VK_MENU = &H12 を使っているなら、同時に MapVirtualKey API関数も使っておられますか?

はい,MapVirtualKeyを使って次のようなコードで送信しています。
ExtendedKeyFlag()は仮想キーコードの種類に応じてKEYEVENTF_EXTENDEDKEYを返す自作の関数です。

keybd_event(bVk, MapVirtualKey(CInt(bVk), 0), ExtendedKeyFlag(bVk) Or 0, 0)
keybd_event(bVk, MapVirtualKey(CInt(bVk), 0), ExtendedKeyFlag(bVk) Or KEYEVENTF_KEYUP, 0)

また,Spy++で送信先のWORDへのメッセージを見ると,

P WM_SYSKEYDOWN nVirtKey:VK_MENU cRepeat:1 ScanCode38 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
P WM_SYSKEYUP nVirtKey:VK_MENU cRepeat:1 ScanCode38 fExtended:0 fAltDown:0 fRepeat:1 fUp:1

となっています。

本物のAltキーを押した場合には,上の2つと全く同じメッセージの後に,

S WM_SYSCOMMAND uCmdType:SC_KEYMENU xPos:0 yPos:0(ニーモニックを使用)
R WM_SYSCOMMAND

というメッセージが流れているようです。
こちらのサンプル集とPINVOKE.NETを参考にSendInputでも試したのですが,同じ結果でした。
また,KEYDOWNだけを送ってもだめでした。
VBが2005β2のためかもしれませんので,VB2003で試してみます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。