From 3eb86784b6b80e4910d0f28a33127322388bada4 Mon Sep 17 00:00:00 2001 From: moosecrab Date: Wed, 17 Jun 2020 02:35:33 -0700 Subject: [PATCH] Rewrote a lot of the interaction code to make it easier to modify by the end-user. Added a readme explaining the above. Added YouTube key controls to the default page. Added a setting to save tap tolerance between restarts. --- webcrab/App.config | 3 + webcrab/My Project/Settings.Designer.vb | 12 +++ webcrab/My Project/Settings.settings | 3 + webcrab/main.vb | 119 ++++++++++++++---------- webcrab/res/page.html | 64 +++++++------ webcrab/res/readme.txt | 31 ++++++ webcrab/webcrab.vbproj | 1 + 7 files changed, 153 insertions(+), 80 deletions(-) create mode 100755 webcrab/res/readme.txt diff --git a/webcrab/App.config b/webcrab/App.config index 92a9536..458410c 100755 --- a/webcrab/App.config +++ b/webcrab/App.config @@ -13,6 +13,9 @@ 8080 + + 5 + diff --git a/webcrab/My Project/Settings.Designer.vb b/webcrab/My Project/Settings.Designer.vb index 01d42e4..c03fac6 100755 --- a/webcrab/My Project/Settings.Designer.vb +++ b/webcrab/My Project/Settings.Designer.vb @@ -65,6 +65,18 @@ Namespace My Me("listenport") = value End Set End Property + + _ + Public Property taptolerance() As Integer + Get + Return CType(Me("taptolerance"),Integer) + End Get + Set + Me("taptolerance") = value + End Set + End Property End Class End Namespace diff --git a/webcrab/My Project/Settings.settings b/webcrab/My Project/Settings.settings index ecf6e59..f348975 100755 --- a/webcrab/My Project/Settings.settings +++ b/webcrab/My Project/Settings.settings @@ -5,5 +5,8 @@ 8080 + + 5 + \ No newline at end of file diff --git a/webcrab/main.vb b/webcrab/main.vb index f31373a..ef4a4e8 100755 --- a/webcrab/main.vb +++ b/webcrab/main.vb @@ -5,7 +5,7 @@ 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 + Dim nexttoggleclick As UInteger = MouseEventFlags.MOUSEEVENTF_LEFTDOWN Or MouseEventFlags.MOUSEEVENTF_RIGHTDOWN Or MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN Or MouseEventFlags.MOUSEEVENTF_XDOWN Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles StartButton.Click If Not weblistener Is Nothing Then @@ -19,9 +19,13 @@ Public Class main Else Dim listenport As UShort = My.Settings("listenport") PortInput.Value = listenport - weblistener = New HttpListener - weblistener.Prefixes.Add("http://*:" & listenport & "/") - weblistener.Start() + Try + weblistener = New HttpListener + weblistener.Prefixes.Add("http://*:" & listenport & "/") + weblistener.Start() + Catch ex As Exception + log(ex.ToString) + End Try Dim listenthread As New Thread(AddressOf listenforconnection) listenthread.Start() log("Started") @@ -75,6 +79,7 @@ Public Class main End Sub Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing + My.Settings.taptolerance = TapInput.Value If Not weblistener Is Nothing Then weblistener.Abort() End If @@ -82,6 +87,8 @@ Public Class main Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Control.CheckForIllegalCrossThreadCalls = False + Dim taptolerance As Integer = My.Settings.taptolerance + TapInput.Value = taptolerance Button1_Click(sender, e) End Sub Private Sub log(str As String) @@ -124,61 +131,67 @@ Public Class main 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) + Case "click" + Dim eventflag As UInteger = 0 + Select Case req.QueryString("button") + Case "left" + eventflag = MouseEventFlags.MOUSEEVENTF_LEFTDOWN + Case "right" + eventflag = MouseEventFlags.MOUSEEVENTF_RIGHTDOWN + Case "middle" + eventflag = MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN + Case "x" + eventflag = MouseEventFlags.MOUSEEVENTF_XDOWN + Case Else + Return "unknown mouse button" + End Select + mouse_event(eventflag, 0, 0, 0, 0) System.Threading.Thread.Sleep(10) - mouse_event(MouseEventFlags.MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0) + ' bit shift to the left is the corresponding button up event + mouse_event(eventflag << 1, 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 "toggle" + Dim eventflagmask As UInteger = 0 + 'buttonmask is just the 2 bits for the selected button + Select Case req.QueryString("button") + Case "left" + eventflagmask = MouseEventFlags.MOUSEEVENTF_LEFTDOWN Or MouseEventFlags.MOUSEEVENTF_LEFTUP + Case "right" + eventflagmask = MouseEventFlags.MOUSEEVENTF_RIGHTDOWN Or MouseEventFlags.MOUSEEVENTF_RIGHTUP + Case "middle" + eventflagmask = MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN Or MouseEventFlags.MOUSEEVENTF_MIDDLEUP + Case "x" + eventflagmask = MouseEventFlags.MOUSEEVENTF_XDOWN Or MouseEventFlags.MOUSEEVENTF_XUP + Case Else + Return "unknown mouse button" + End Select + + 'nexttoggleclick is either button up or down for each button + mouse_event(eventflagmask And nexttoggleclick, 0, 0, 0, 0) + 'invert nexttoggleclick for the selected button only + nexttoggleclick = nexttoggleclick Xor eventflagmask Case "wheel" - mouse_event(MouseEventFlags.MOUSEEVENTF_WHEEL, 0, 0, WHEEL_DELTA * req.QueryString("d"), 0) + Dim eventflag As UInteger = 0 + Select Case req.QueryString("axis") + Case "vert" + eventflag = MouseEventFlags.MOUSEEVENTF_WHEEL + Case "horiz" + eventflag = MouseEventFlags.MOUSEEVENTF_HWHEEL - 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 + mouse_event(eventflag, 0, 0, req.QueryString("delta"), 0) Case "key" - Select Case req.QueryString("k") - Case "del" - keybd_press(VK.DELETE) - Case "bksp" - keybd_press(VK.KEY_BACK) - Case "enter" - keybd_press(VK.RETURN_KEY) - End Select + Try + Dim vk As Byte = req.QueryString("code") + keybd_press(vk) + Catch ex As Exception + log(ex.ToString) + End Try Case "text" - Dim encodedtext As String = req.QueryString("t") + Dim encodedtext As String = req.QueryString("text") Dim decodedtext As String = Uri.UnescapeDataString(encodedtext) Try SendKeysEscaped(decodedtext) @@ -186,6 +199,14 @@ Public Class main log(ex.ToString) End Try + Case "sendkeys" + Dim keys As String = req.QueryString("keys") + Try + SendKeys.SendWait(keys) + Catch ex As Exception + log(ex.ToString) + End Try + Case Else Return "bad" diff --git a/webcrab/res/page.html b/webcrab/res/page.html index 1453a5a..c620d0c 100755 --- a/webcrab/res/page.html +++ b/webcrab/res/page.html @@ -14,6 +14,9 @@ body { margin: 0; background-color: black; color: gray; + display: flex; + flex-direction: column; + } button{ text-align: center; @@ -27,12 +30,7 @@ button{ button:active { background-color: silver; } -button:focus, button:hover, button:focus-visible { - -} - .touchpad { - height: 60%; display: flex; } #canvas { @@ -40,12 +38,10 @@ button:focus, button:hover, button:focus-visible { background-color: #111; outline: gray solid 1px; } -.buttonrow { - height: 10%; +div{ display: flex; - align-items: stretch; } -.buttonrow input{ +input{ background-color: #111; color: gray; outline: gray solid 1px; @@ -55,34 +51,40 @@ button:focus, button:hover, button:focus-visible { -
+
- - - + + +
-
+
+ + + + + +
+
-
- - - - - +
+ + + + +
-
- - - - +
+ + +
-
- - - - +
+ + + +