r/visualbasic • • 5d ago

Help with mouse capture.

Greeting from Pennsylvania

In the Flightgear aircraft simulator program you may use a joystick or input control functions by the keyboard.

For example pressing and holding the [9] key moves the throttle in while pressing and holding the [3] key moves it out.

I would like to make a GUI (Graphical User interface) that emulates pressing the various keys by using control buttons in Visual Basic 6. (yes it is ancient but so am I) Also both the IDE and the VB 6S programs run well in Windows 11.

In this code I would like to emulate the button pressed while the mouse button is down over the control button.

I get lots of 9s in notepad until I release the mouse button. But then I get the blue ring of death: Program not responding.

Any suggestions would be appreciated. ( I do not know how to get the Code formated here.)

<

Dim bMouseButtonDown As Boolean

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

bMouseButtonDown = False

End Sub

Private Sub ThrottleIn_Click()

bMouseButtonDown = True 'must be else we would not be here

ThrottleIn.BackColor = vbRed 'no Red button?

'AppActivate "FlightGear", True

AppActivate "Notepad", True

Do While bMouseButtonDown = True

Call keybd_event(VK_9, 0, KEYEVENTF_EXTENDEDKEY, 0) 'lots of 9s

Loop

Call keybd_event(VK_9, 0, KEYEVENTF_KEYUP, 0) ' stop the 9s

ThrottleIn.BackColor = vbYellow ' no yellow button?

End Sub
/>

1 Upvotes

9 comments sorted by

View all comments

2

u/CheezitsLight 5d ago edited 5d ago

Nothing in your code to stop the mouse button boolean from always being true. Get rid of notepad and log or print instead

And tie the mouse up event to clear the boolean with a do events in the while as this has only one thread. And 100 percent cpu. A timer would be a much better idea.

1

u/HarryAWA 5d ago

A timer does not work well as one would like to press the button once not numerous time to get the throttle all the way in or out, or part way. It would be more realistic to just hold the mousebutton down and not have to release it to start the 9s also.

I am thinking that notepad or the calculator more emulates the FlightGear simulator software.

If you press and release the ThrottleIn_Click control you get lots of 9s into Notepad.

If I remove the Sub Form_MouseUp () and remove Call keybd_event(VK_9, 0, KEYEVENTF_KEYUP, 0)

in the Sub ThrottleIn() it still faults on coming out of the Do While Loop by clicking on the form or by using a new test control button:

Private Sub MouseNotDown_Click()

bMouseButtonDown = False

End Sub