mouse_event

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
d1337r
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 08.09.2007 (Сб) 13:26

mouse_event

Сообщение d1337r » 01.11.2007 (Чт) 19:53

У меня плохо работает событие mouse_move. Делал все по RTFM и MSDN, но на моем экране 1024*768 курсор попадает около верхнего левого угла экрана, то есть не там где надо
Код: Выделить всё
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 mabsolute = &H8000 '  absolute move
Private Const lmbdown = &H2 '  left button down
Private Const lmbup = &H4 '  left button up
Private Const mmbdown = &H20 '  middle button down
Private Const mmbup = &H40 '  middle button up
Private Const mmove = &H1 '  mouse move
Private Const rmbdown = &H8 '  right button down
Private Const rmbup = &H10 '  right button up

Private Sub Command1_Click()
movemouseto 790, 600
End Sub

Public Sub movemouseto(x As Long, y As Long)
Dim x1, y1 As Long
x1 = x * 65535 / Screen.Width
y1 = y * 65535 / Screen.Height
mouse_event (mmove + mabsolute), x1, y1, 0, 0

End Sub

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 01.11.2007 (Чт) 20:20

Прошу прощения, что отвечаю вопросом на вопрос, но всё же:

А SetCursorPos не подходит по каким то причинам ?

Она координаты в пикселах вроде как принимает

:roll:

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 01.11.2007 (Чт) 20:34

d1337r
Не работает, потому что Screen.Width и Screen.Height возвращают размеры экрана в твипах.
Должно быть так:
Код: Выделить всё
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 Declare Function GetMessageExtraInfo Lib "user32" () As Long
Private Const mabsolute = &H8000 '  absolute move
Private Const lmbdown = &H2 '  left button down
Private Const lmbup = &H4 '  left button up
Private Const mmbdown = &H20 '  middle button down
Private Const mmbup = &H40 '  middle button up
Private Const mmove = &H1 '  mouse move
Private Const rmbdown = &H8 '  right button down
Private Const rmbup = &H10 '  right button up

Private Sub Command1_Click()
  MoveMouseTo 790, 600
End Sub

Public Sub MoveMouseTo(x As Long, y As Long)
  Dim x1, y1 As Long
  x1 = x * 65535 / (Screen.Width / Screen.TwipsPerPixelX)
  y1 = y * 65535 / (Screen.Height / Screen.TwipsPerPixelY)
  mouse_event mmove Or mabsolute, x1, y1, 0, GetMessageExtraInfo()
End Sub
Если долго мучиться, что-нибудь получится

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 05.11.2007 (Пн) 0:18

AntonGV писал(а):Не работает, потому что Screen.Width и Screen.Height возвращают размеры экрана в твипах.

Код: Выделить всё
Private Sub Form_Load()
    MsgBox Screen.Width / 15 & "x" & Screen.Height / 15
End Sub
А так?
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 05.11.2007 (Пн) 6:29

Arcady_XQST
А не так. 1твип не всегда = 15 пикселям.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 05.11.2007 (Пн) 11:49

Немножко наоборот: 15 твипов не всегда = 1 пикселю :lol:

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 05.11.2007 (Пн) 13:12

Код: Выделить всё

Private Sub Form_Load()
    MsgBox Screen.Width / Screen.TwipsPerPixelX & "x" & Screen.Height / Screen.TwipsPerPixelY
End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 05.11.2007 (Пн) 22:34

А от чего зависит количество твипов на 1 пискель? :roll:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.11.2007 (Вт) 7:16

Панель управления -> Экран -> Вкладка "Параметры" -> Кнопка "Дополнительно" -> Масштаб (кол-во точек на дюйм).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList