掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マウスをクリックしたことにするには? (ID:105021)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
sendmessageはAPIの中でもとりわけ動作が豊富なので、 調べようとすると結構苦労します。 で、簡単なサンプルをひとつ・・・。 Formにボタン1つおいて、以下のコードを貼り付けてください。 キーを押したときとボタンを押したときにほぼ同じ動作をします。 ボタンがへこまないのは、メッセージを送る前にシステムが行う処理だからです。 Option Explicit Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Sub Command1_Click() ' End Sub Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.BackColor = vbRed End Sub Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.BackColor = &HC0C0C0 End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Call SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0&, 0&) End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) Call SendMessage(Command1.hwnd, WM_LBUTTONUP, 0&, 0&) End Sub Private Sub Form_Load() Me.KeyPreview = True Me.AutoRedraw = True Me.BackColor = &HC0C0C0 End Sub この例では、同一Form内のボタンのhwndに対し、sendmessageしてます。 同一Formの場合、わざわざsendmessageしなくても、 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Call Command1_MouseDown(vbLeftButton, 0, 0, 0) End Sub のようにイベントプロシージャを直接呼べばいいので有り難みがないのですが、 hWndさえ取得できれば、相手はどんなアプリでも構わない、というところが sendmessageを使う理由です。 じゃあどうやってhWndを取得するか?というと まじめにやるにはEnumWindows使いますが、 コールバックの知識が必要になり、面倒です。 とりあえず、FindWindowとGetWindowを使って、 VBで自作した特定のアプリのhWndを拾う練習からはじめたらどうですか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.