Changed path AJAX requests to query strings, among other things.

This commit is contained in:
moosecrab 2020-06-16 01:32:53 -07:00
parent e949051568
commit 2d9e582854
4 changed files with 313 additions and 66 deletions

View File

@ -2,7 +2,7 @@
Module input Module input
#Region "mouse events"
<Flags()> _ <Flags()> _
Public Enum MouseEventFlags As UInteger Public Enum MouseEventFlags As UInteger
MOUSEEVENTF_ABSOLUTE = &H8000 MOUSEEVENTF_ABSOLUTE = &H8000
@ -19,25 +19,205 @@ Module input
MOUSEEVENTF_HWHEEL = &H1000 MOUSEEVENTF_HWHEEL = &H1000
End Enum End Enum
Public Const WHEEL_DELTA = 120
<DllImport("user32.dll")> _ <DllImport("user32.dll")> _
Private Sub mouse_event(dwFlags As UInteger, dx As Integer, dy As Integer, dwData As UInteger, dwExtraInfo As Integer) Public Sub mouse_event(dwFlags As UInteger, dx As Integer, dy As Integer, dwData As Integer, dwExtraInfo As Integer)
End Sub End Sub
Public Sub movemouse(dx As Integer, dy As Integer) #End Region
mouse_event(MouseEventFlags.MOUSEEVENTF_MOVE, dx, dy, 0, 0)
#Region "keyboard events"
Enum VK
LBUTTON = 1
RBUTTON = 2
CANCEL_KEY = 3
MBUTTON = 4
XBUTTON1 = 5
XBUTTON2 = 6
KEY_BACK = 8
TAB_KEY = 9
CLEAR = 12
RETURN_KEY = 13
SHIFT = 16
CONTROL = 17
MENU = 18
PAUSE = 19
CAPITAL = 20
KANA = 21
HANGUL = 21
JUNJA = 23
FINAL = 24
HANJA = 25
KANJI = 25
ESCAPE = 27
CONVERT = 28
NONCONVERT = 29
ACCEPT = 30
MODECHANGE = 31
SPACE_KEY = 32
PRIOR = 33
NEXT_KEY = 34
END_KEY = 35
HOME = 36
LEFT_KEY = 37
UP = 38
RIGHT_KEY = 39
DOWN = 40
SELECT_KEY = 41
PRINT_KEY = 42
EXECUTE = 43
SNAPSHOT = 44
INSERT = 45
DELETE = 46
HELP = 47
KEY_0 = 48
KEY_1 = 49
KEY_2 = 50
KEY_3 = 51
KEY_4 = 52
KEY_5 = 53
KEY_6 = 54
KEY_7 = 55
KEY_8 = 56
KEY_9 = 57
KEY_A = 65
KEY_B = 66
KEY_C = 67
KEY_D = 68
KEY_E = 69
KEY_F = 70
KEY_G = 71
KEY_H = 72
KEY_I = 73
KEY_J = 74
KEY_K = 75
KEY_L = 76
KEY_M = 77
KEY_N = 78
KEY_O = 79
KEY_P = 80
KEY_Q = 81
KEY_R = 82
KEY_S = 83
KEY_T = 84
KEY_U = 85
KEY_V = 86
KEY_W = 87
KEY_X = 88
KEY_Y = 89
KEY_Z = 90
LWIN = 91
RWIN = 92
APPS = 93
SLEEP = 95
NUMPAD0 = 96
NUMPAD1 = 97
NUMPAD2 = 98
NUMPAD3 = 99
NUMPAD4 = 100
NUMPAD5 = 101
NUMPAD6 = 102
NUMPAD7 = 103
NUMPAD8 = 104
NUMPAD9 = 105
MULTIPLY = 106
ADD = 107
SEPARATOR = 108
SUBTRACT = 109
DECIMAL_KEY = 110
DIVIDE = 111
F1 = 112
F2 = 113
F3 = 114
F4 = 115
F5 = 116
F6 = 117
F7 = 118
F8 = 119
F9 = 120
F10 = 121
F11 = 122
F12 = 123
F13 = 124
F14 = 125
F15 = 126
F16 = 127
F17 = 128
F18 = 129
F19 = 130
F20 = 131
F21 = 132
F22 = 133
F23 = 134
F24 = 135
NUMLOCK = 144
SCROLL = 145
LSHIFT = 160
RSHIFT = 161
LCONTROL = 162
RCONTROL = 163
LMENU = 164
RMENU = 165
BROWSER_BACK = 166
BROWSER_FORWARD = 167
BROWSER_REFRESH = 168
BROWSER_STOP = 169
BROWSER_SEARCH = 170
BROWSER_FAVORITES = 171
BROWSER_HOME = 172
VOLUME_MUTE = 173
VOLUME_DOWN = 174
VOLUME_UP = 175
MEDIA_NEXT_TRACK = 176
MEDIA_PREV_TRACK = 177
MEDIA_STOP = 178
MEDIA_PLAY_PAUSE = 179
LAUNCH_MAIL = 180
LAUNCH_MEDIA_SELECT = 181
LAUNCH_APP1 = 182
LAUNCH_APP2 = 183
OEM_1 = 186
OEM_PLUS = 187
OEM_COMMA = 188
OEM_MINUS = 189
OEM_PERIOD = 190
OEM_2 = 191
OEM_3 = 192
OEM_4 = 219
OEM_5 = 220
OEM_6 = 221
OEM_7 = 222
OEM_8 = 223
OEM_102 = 226
PROCESSKEY = 229
PACKET = 231
ATTN = 246
CRSEL = 247
EXSEL = 248
EREOF = 249
PLAY = 250
ZOOM = 251
NONAME = 252
PA1 = 253
OEM_CLEAR = 254
End Enum
Public Const KEYEVENTF_EXTENDEDKEY As UInteger = &H1
Public Const KEYEVENTF_KEYUP As UInteger = &H2
<DllImport("user32.dll")> _
Public Sub keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As Integer)
End Sub End Sub
Public Sub leftclick() Public Sub keybd_press(bVK As Byte)
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) keybd_event(bVK, 0, 0, 0)
System.Threading.Thread.Sleep(10) System.Threading.Thread.Sleep(10)
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) keybd_event(bVK, 0, KEYEVENTF_KEYUP, 0)
End Sub End Sub
Public Sub leftstart() #End Region
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
End Sub
Public Sub leftrelease()
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Sub
End Module End Module

View File

@ -48,11 +48,12 @@ Partial Class main
Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.LogText.Location = New System.Drawing.Point(12, 41) Me.LogText.Location = New System.Drawing.Point(12, 41)
Me.LogText.MaxLength = 1000
Me.LogText.Multiline = True Me.LogText.Multiline = True
Me.LogText.Name = "LogText" Me.LogText.Name = "LogText"
Me.LogText.ReadOnly = True Me.LogText.ReadOnly = True
Me.LogText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical Me.LogText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.LogText.Size = New System.Drawing.Size(531, 291) Me.LogText.Size = New System.Drawing.Size(531, 94)
Me.LogText.TabIndex = 1 Me.LogText.TabIndex = 1
' '
'Label1 'Label1
@ -96,7 +97,7 @@ Partial Class main
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(555, 344) Me.ClientSize = New System.Drawing.Size(555, 147)
Me.Controls.Add(Me.DragInput) Me.Controls.Add(Me.DragInput)
Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.TapInput) Me.Controls.Add(Me.TapInput)

View File

@ -2,6 +2,9 @@
Imports System.Net Imports System.Net
Public Class main Public Class main
Dim weblistener As HttpListener Dim weblistener As HttpListener
Dim lastpos As New Point(0, 0)
Dim startpos As New Point(0, 0)
Dim leftclicking As Boolean = False
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles StartButton.Click Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles StartButton.Click
If Not weblistener Is Nothing Then If Not weblistener Is Nothing Then
@ -12,7 +15,7 @@ Public Class main
StartButton.Text = "Start" StartButton.Text = "Start"
Else Else
weblistener = New HttpListener weblistener = New HttpListener
weblistener.Prefixes.Add("http://+:8080/") weblistener.Prefixes.Add("http://*:8080/")
weblistener.Start() weblistener.Start()
Dim listenthread As New Thread(AddressOf listenforconnection) Dim listenthread As New Thread(AddressOf listenforconnection)
listenthread.Start() listenthread.Start()
@ -24,11 +27,12 @@ Public Class main
End Sub End Sub
Public Sub listenforconnection() Public Sub listenforconnection()
Dim context As HttpListenerContext Dim context As HttpListenerContext = Nothing
Dim resp As HttpListenerResponse Dim resp As HttpListenerResponse
Dim lastpos As New Point(0, 0) Dim respstr As String = String.Empty
Dim startpos As New Point(0, 0)
Dim lastpacket As Long = -1 Dim lastpacket As Long = -1
Dim lastpack As Long
Dim leftclicking As Boolean = False
While weblistener.IsListening While weblistener.IsListening
Try Try
context = weblistener.GetContext() context = weblistener.GetContext()
@ -39,58 +43,29 @@ Public Class main
End Try End Try
resp = context.Response resp = context.Response
Dim path As String = context.Request.Url.AbsolutePath Dim path As String = context.Request.Url.AbsolutePath
log(context.Request.RemoteEndPoint.ToString & " " & path) log(context.Request.RemoteEndPoint.ToString & " " & context.Request.RawUrl)
' check for valid command packets ' check for valid command packets
If path = "/" Then If path = "/" Then
Dim mainpagebytes As Byte() = FileIO.FileSystem.ReadAllBytes("page.html") respstr = FileIO.FileSystem.ReadAllText("page.html")
resp.OutputStream.Write(mainpagebytes, 0, mainpagebytes.Length)
resp.Close()
lastpacket = 0 lastpacket = 0
Continue While Else
Dim pack As Long = context.Request.QueryString("seq")
ElseIf path.StartsWith("/move/") Then If pack > lastpack Then
Dim x As Integer = path.Split("/")(2) respstr = handleinput(context.Request)
Dim y As Integer = path.Split("/")(3) lastpack = pack
Dim pack As Long = path.Split("/")(4)
If pack > lastpacket Then
movemouse(x - lastpos.X, y - lastpos.Y)
lastpos.X = x
lastpos.Y = y
lastpacket = pack
End If
ElseIf path.StartsWith("/start/") Then
Dim x As Integer = path.Split("/")(2)
Dim y As Integer = path.Split("/")(3)
Dim pack As Long = path.Split("/")(4)
If pack > lastpacket Then
lastpos.X = x
lastpos.Y = y
startpos.X = x
startpos.Y = y
lastpacket = pack
End If
ElseIf path.StartsWith("/end/") Then
Dim x As Integer = path.Split("/")(2)
Dim y As Integer = path.Split("/")(3)
Dim pack As Long = path.Split("/")(4)
If pack > lastpacket Then
Dim tol As Integer = TapInput.Value
If (Math.Abs(x - startpos.X) < tol) And (Math.Abs(y - startpos.Y) < tol) Then
leftclick()
End If
lastpacket = pack
End If End If
End If End If
Dim respstr As String = "ok" If String.IsNullOrEmpty(respstr) Then
Dim respbytes As Byte() = System.Text.Encoding.UTF8.GetBytes(respstr) respstr = "bad"
resp.OutputStream.Write(respbytes, 0, respbytes.Length) End If
resp.Close() Dim respbytes As Byte() = System.Text.Encoding.UTF8.GetBytes(respstr)
resp.ContentLength64 = respbytes.Length
resp.OutputStream.Write(respbytes, 0, respbytes.Length)
resp.OutputStream.Close()
resp.Close()
'perftimer.Reset()
End While End While
End Sub End Sub
@ -105,8 +80,96 @@ Public Class main
Button1_Click(sender, e) Button1_Click(sender, e)
End Sub End Sub
Private Sub log(str As String) Private Sub log(str As String)
LogText.Text = Now.ToString("[HH:mm:ss.fff] ") & str & vbNewLine & LogText.Text Dim oldtext As String = LogText.Text
Dim oldsplit() As String = oldtext.Split(vbNewLine)
Dim newtext As String
newtext = Now.ToString("[HH:mm:ss.fff] ") & str & vbNewLine
For i = 0 To Math.Min(oldsplit.Length - 1, 5)
newtext &= oldsplit(i) & vbNewLine
Next
LogText.Text = newtext
End Sub End Sub
Private Function handleinput(req As HttpListenerRequest) As String
Dim split() As String = req.Url.AbsolutePath.Split({"/"}, StringSplitOptions.RemoveEmptyEntries)
If split.Length < 1 Then
Return "bad"
End If
Dim opt As String = split(0)
Select Case opt
Case "start" 'start of trackpad touch
lastpos.X = req.QueryString("x")
lastpos.Y = req.QueryString("y")
startpos.X = req.QueryString("x")
startpos.Y = req.QueryString("y")
Case "move" 'trackpad touch move
mouse_event(MouseEventFlags.MOUSEEVENTF_MOVE, req.QueryString("x") - lastpos.X, req.QueryString("y") - lastpos.Y, 0, 0)
lastpos.X = req.QueryString("x")
lastpos.Y = req.QueryString("y")
Case "end"
Dim tol As Integer = TapInput.Value
If (Math.Abs(req.QueryString("x") - startpos.X) < tol) And (Math.Abs(req.QueryString("y") - startpos.Y) < tol) Then
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
System.Threading.Thread.Sleep(10)
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End If
Case "left"
If leftclicking Then
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
leftclicking = False
Else
mouse_event(MouseEventFlags.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
leftclicking = True
End If
Case "middle"
mouse_event(MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0)
System.Threading.Thread.Sleep(10)
mouse_event(MouseEventFlags.MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0)
Case "right"
mouse_event(MouseEventFlags.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
System.Threading.Thread.Sleep(10)
mouse_event(MouseEventFlags.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
Case "wheel"
mouse_event(MouseEventFlags.MOUSEEVENTF_WHEEL, 0, 0, WHEEL_DELTA * req.QueryString("d"), 0)
Case "volume"
If req.QueryString("d") = -1 Then
keybd_press(VK.VOLUME_DOWN)
ElseIf req.QueryString("d") = 0 Then
keybd_press(VK.VOLUME_MUTE)
ElseIf req.QueryString("d") = 1 Then
keybd_press(VK.VOLUME_UP)
End If
Case "media"
Select Case req.QueryString("act")
Case "stop"
keybd_press(VK.MEDIA_STOP)
Case "prev"
keybd_press(VK.MEDIA_PREV_TRACK)
Case "play"
keybd_press(VK.MEDIA_PLAY_PAUSE)
Case "next"
keybd_press(VK.MEDIA_NEXT_TRACK)
End Select
Case "text"
Case Else
Return "bad"
End Select
Return "ok"
End Function
End Class End Class

View File

@ -98,6 +98,7 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<Compile Include="Settings.vb" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="main.resx"> <EmbeddedResource Include="main.resx">
@ -111,7 +112,9 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="My Project\app.manifest" /> <None Include="My Project\app.manifest">
<SubType>Designer</SubType>
</None>
<None Include="My Project\Application.myapp"> <None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator> <Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput> <LastGenOutput>Application.Designer.vb</LastGenOutput>