- PR -

IEコントロールへメッセージを送信する方法について

1
投稿者投稿内容
しょし
会議室デビュー日: 2005/11/13
投稿数: 9
投稿日時: 2005-11-20 12:59
しょしと申します。
皆様にはいつもお世話になっております。

IEコントロール上で、マウスカーソルをハイパーリンクの上に移動し、
そこで[Enter]キーを押すと、リンク先へ飛ぶようにしたいのですが、
うまくいきません。

何と度、ご教授いただきたくお願い申し上げます。

開発環境
WindowsXP
VC++.net
MFC

// 下記のソースは、IEコントロールの作成、メッセージの取得、
// IEコントロールへのメッセージ送信について記載しています。

// IEコントロールの作成
m_wndIE.CreateControl(CLSID_WebBrowser, NULL, WS_POPUP | WS_VISIBLE,
CRect(0, 0, 1024, 768), this, AFX_IDW_PANE_FIRST)

// メッセージの取得と、IEコンポーネントへのメッセージ送信
BOOL XXXXX::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN)
{
// IEコントロールへメッセージを送信する
// 引数の値がよくわからない
m_wndIE.SendMessage(WM_LBUTTONDOWN, 0, 0);
}
}
}
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-20 14:24
こんにちは。

引用:

しょしさんの書き込み (2005-11-20 12:59) より:

IEコントロール上で、マウスカーソルをハイパーリンクの上に移動し、
そこで[Enter]キーを押すと、リンク先へ飛ぶようにしたいのですが、
うまくいきません。



余計なお世話かもしれませんが、この仕様で大丈夫なんでしょうか?

[Enter]キー押下時の元の動作を、別の動作に上書きすることになるので、
デフォルトの動作が失われてしまうことになるのではないかと思いますが。

それを承知でしたら…
次のようなコードでどうでしょうか?

コード:
BOOL XXXXX::PreTranslateMessage(MSG* pMsg) 
{
	… 中略 …

	if(pMsg->message == WM_KEYDOWN) 
	{ 
		if(pMsg->wParam == VK_RETURN) 
		{
			// マウスの位置(スクリーン座標)取得
			CPoint ptCursor;
			::GetCursorPos(&ptCursor);

			// マウスクリックをシミュレートする
			::mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, ptCursor.x, ptCursor.y, 0, NULL);
			::mouse_event(MOUSEEVENTF_LEFTUP   | MOUSEEVENTF_ABSOLUTE, ptCursor.x, ptCursor.y, 0, NULL);
		}
	} 

	… 中略 …
}



※上記で使用しているmouse_event関数は、NT系ではSendInput関数を代わりに使うことが推奨されています。
しょし
会議室デビュー日: 2005/11/13
投稿数: 9
投稿日時: 2005-11-20 17:50
しょしと申します。

Tdnr_Symさん

> [Enter]キー押下時の元の動作を、別の動作に上書きすることになるので、
> デフォルトの動作が失われてしまうことになるのではないかと思いますが。

上記の仕様を望んでおりましたので、非常に感謝しております。
(私の説明が足りなくて申し訳ございません。)

ご親切にご回答をくださり、誠にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)