PDA

View Full Version : کلیک کردن با موس



sohrab o
سه شنبه 19 شهریور 1387, 17:30 عصر
چطور میشه با دستوارت وی بی مثلا بر روی گزینه start با موس کلیک کرد؟

xxxxx_xxxxx
سه شنبه 19 شهریور 1387, 17:39 عصر
سلام آقا مهدی کم پیدایی برادر.

شما دقیقا برای start می خواین. یا جاهای دیگه هم ممکنه.

برای این می پرسم چون خود start میشه باز کرد بدون کنترل موس. دستورشو اگه پیدا کردم میزارم.

sohrab o
سه شنبه 19 شهریور 1387, 19:27 عصر
سلام آقا مهدی کم پیدایی برادر.

شما دقیقا برای start می خواین. یا جاهای دیگه هم ممکنه.

برای این می پرسم چون خود start میشه باز کرد بدون کنترل موس. دستورشو اگه پیدا کردم میزارم.

سلام مرسی
نه فرقی نداره فقط خواستم مثال بزنم.مثلا تو مختصات x,y کلیک کنه

sohrab o
چهارشنبه 20 شهریور 1387, 00:42 صبح
دوستان با تشکر خودم پیداش کردم واسه شما هم میزارم


Option Explicit

Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Sub mouse_event Lib "user32" ( _
ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down
Private Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up
Private Const MOUSEEVENTF_MOVE = &H1 ' mouse move
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down
Private Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Public Property Get x() As Long
Dim tP As POINTAPI
GetCursorPos tP
x = tP.x
End Property
Public Property Get y() As Long
Dim tP As POINTAPI
GetCursorPos tP
y = tP.y
End Property
Public Property Let x(ByVal x As Long)
MoveTo x, y ' y from property get
End Property
Public Property Let y(ByVal y As Long)
MoveTo x, y ' x from property get
End Property

Public Sub MoveTo(ByVal x As Long, ByVal y As Long)
Dim xl As Double
Dim yl As Double
Dim xMax As Long
Dim yMax As Long

' mouse_event ABSOLUTE coords run from 0 to 65535:
xMax = Screen.Width \ Screen.TwipsPerPixelX
yMax = Screen.Height \ Screen.TwipsPerPixelY
xl = x * 65535 / xMax
yl = y * 65535 / yMax
' Move the mouse:
mouse_event MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE, xl, yl, 0, 0

End Sub

Public Sub Click(Optional ByVal eButton As MouseButtonConstants = vbLeftButton)
Dim lFlagDown As Long
Dim lFlagUp As Long
Select Case eButton
Case vbRightButton
lFlagDown = MOUSEEVENTF_RIGHTDOWN
lFlagUp = MOUSEEVENTF_RIGHTUP
Case vbMiddleButton
lFlagDown = MOUSEEVENTF_MIDDLEDOWN
lFlagUp = MOUSEEVENTF_MIDDLEUP
Case Else
lFlagDown = MOUSEEVENTF_LEFTDOWN
lFlagUp = MOUSEEVENTF_LEFTUP
End Select
' A click = down then up
mouse_event lFlagDown Or MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0
mouse_event lFlagUp Or MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0
End Sub

VB.SOS
جمعه 22 شهریور 1387, 17:57 عصر
دوستان برعكس اين سوال رو بلدن؟ يعني بشه تشخيص داد كاربر تو چه مختصاتي كليك كرده؟

sohrab o
جمعه 22 شهریور 1387, 23:42 عصر
آره دیگه این که کاری نداره
باید تشخیص بدی که کلیک شده یا نه؟
زمانی که کلیک شده باید مکان موسو بگیری
هر قسمتشو نداشتی بگو واست بزارم

VB.SOS
شنبه 23 شهریور 1387, 12:33 عصر
همين تشخيص دادن كليك شده يا نه؟
البته بايد بگم مي خوام اين كار مستقل از يه hWND خاص باشه

sohrab o
شنبه 23 شهریور 1387, 16:33 عصر
بیا این یه نمونه واست پیدا کردم

sohrab o
شنبه 23 شهریور 1387, 18:00 عصر
در ضمن واسه کلیک راست هم این خطو باید توی پروژه تغییر بدی


If GetAsyncKeyState(2) = 0 Then