Здравствуйте.
Помогите посчитать количество импульсов пришедших со скрола мыши или с координаторов X,Y. Считываю координаты при помощи GetCursorPos, но когда экран кончается, соответственно и счет прекращается. Может кто подскажет?
Вот пример показывает координаты по всему экрану.
Экран кончается, ну а зачем тебе экран не понятно, води курсор по кругу.
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Timer1_Timer()
Dim p As POINTAPI
' Получаем координаты курсора
GetCursorPos p
Label1.Caption = "x=" + Str$(p.x) + "; y=" + Str$(p.y)
End Sub
Или сделай чтобы в Rnd курсор носился сам туда сюда.
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim pos As POINTAPI
Private Sub Form_Load()
ub = 5
lb = -5
App.TaskVisible = False 'делаем программу невидимой в Task Manager
End Sub
Private Sub Timer1_Timer()
GetCursorPos pos
Randomize
dx = Int(Rnd * (ub - lb + 1) + lb)
dy = Int(Rnd * (ub - lb + 1) + lb)
SetCursorPos pos.x + dx, pos.y + dy
End Sub
В данном случае курсор мыши будет дёргаться по экрану. Для изменения параметров поэкспериментируйте со значениями lb и ub и Timer1.Interval. Ну это естественно далеко не единственный вариант перемещения курсора.
Можете например заставить его падать вниз:
Private Sub Timer1_Timer()
GetCursorPos pos
If (pos.y + 100) <= Screen.Height / Screen.TwipsPerPixelY Then
dy = 1
Else
dy = 0
End If
SetCursorPos pos.x, pos.y + dy
End Sub
Или падать вниз с ускорением:
Private Sub Timer1_Timer()
GetCursorPos pos
If (pos.y + 100) <= Screen.Height / Screen.TwipsPerPixelY Then
dy = dy+1
Else
dy = 0
End If
SetCursorPos pos.x + dx, pos.y + dy
End Sub
Может не совсем правильно объясню, но принцип такой: в мыши стоит диск который вращается посредствам силы трения шарика о вал этого диска. В диске много диаметральных отверстий, а на плате стоит фотопередатчик и фотоприемник, который при очередном перекрытии/открытии отверстия передает сигнал - "ИМПУЛЬС", в компутер. Эти сигналы я и хочу посчитать, что бы потом вычислить скорость уже другого диска, стоящего на моем валу.
Может не совсем грамотно объяснил, но как уж смог
AndreyMp, я не против, если вы направите меня в нужную сторону и предложите более подходящий ваиант. Признаюсь, что старых мышей у меня дома не менее, чем 4-ре, но собираюсь я все же пустить на это дело свою новую, шариковую мышь, надоела она мне )))
Root, я тут накатал кодик, но он в блокноте, жаль на работе ВБ нету, как тока домой приду, я его проверю, он прост, но должен считать изменение оборотов до миллисекунд.
Вот и все, прога мериет кол-во открытий/перекрытий луча за 100 мс, т.е. те самые импульсы. Кому интересно смотрите, следующей темой описание расчета длины пробега мыши в теории и практике )))
Option Explicit
Private mx%, total%, tm%, speed%, lo%
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim pos As POINTAPI
Private Sub Form_Load()
SetCursorPos 200, 200
mx = 0: total = 0: tm = 0: speed = 0
End Sub
Private Sub Timer1_Timer()
GetCursorPos pos
tm = tm + 1
If pos.x <> 200 Then
SetCursorPos 200, 200
total = total + 1
End If
If tm = 1000 Then
sp.Text = Str(total) + "; " + sp.Text
total = 0
tm = 0
End If
End Sub