Imports System.Threading Imports System.Net Public Class main 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 If Not weblistener Is Nothing Then weblistener.Abort() weblistener = Nothing log("Stopped") StartButton.BackColor = Color.Lime StartButton.Text = "Start" Else weblistener = New HttpListener weblistener.Prefixes.Add("http://*:8080/") weblistener.Start() Dim listenthread As New Thread(AddressOf listenforconnection) listenthread.Start() log("Started") StartButton.BackColor = Color.Red StartButton.Text = "Stop" End If End Sub Public Sub listenforconnection() Dim context As HttpListenerContext = Nothing Dim resp As HttpListenerResponse Dim respstr As String = String.Empty Dim lastpacket As Long = -1 Dim lastpack As Long Dim leftclicking As Boolean = False While weblistener.IsListening Try context = weblistener.GetContext() Catch ex As Exception If weblistener Is Nothing OrElse weblistener.IsListening = False Then Exit Sub End If End Try resp = context.Response Dim path As String = context.Request.Url.AbsolutePath log(context.Request.RemoteEndPoint.ToString & " " & context.Request.RawUrl) ' check for valid command packets If path = "/" Then respstr = FileIO.FileSystem.ReadAllText("page.html") lastpacket = 0 Else Dim pack As Long = context.Request.QueryString("seq") If pack > lastpack Then respstr = handleinput(context.Request) lastpack = pack End If End If If String.IsNullOrEmpty(respstr) Then respstr = "bad" End If 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 Sub Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing If Not weblistener Is Nothing Then weblistener.Abort() End If End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Control.CheckForIllegalCrossThreadCalls = False Button1_Click(sender, e) End Sub Private Sub log(str As String) 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 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