From e9a0313de6a7cea7f48f02b469dfe978832bc114 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Wed, 1 Jan 2025 00:34:36 +0100 Subject: [PATCH] Rework a good part of echo to ahk2 --- Echo.ahk | 363 ------------------------------------------------------ Echo.ahk2 | 278 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 278 insertions(+), 363 deletions(-) delete mode 100644 Echo.ahk create mode 100644 Echo.ahk2 diff --git a/Echo.ahk b/Echo.ahk deleted file mode 100644 index 9f34465..0000000 --- a/Echo.ahk +++ /dev/null @@ -1,363 +0,0 @@ -#NoEnv -SendMode Input -SetWorkingDir %A_ScriptDir% -#SingleInstance force -#Persistent - -SetBatchLines, -1 -SetKeyDelay, -1, 100 -SetControlDelay, 500 - -ih := InputHook("B") -ih.KeyOpt("{All}", "NV") -ih.OnKeyDown := Func("OnKeyDown") -ih.OnKeyUp := Func("OnKeyUp") -ih.Start() - -global addNext := 0 -global removeNext := 0 - -global enabledWindows := Array() -enabledWindows.Push(Array()) -enabledWindows.Push(Array()) - -global keyLog := Array() -global whitelistKeys := Array() - -global paused := 0 - -SetTimer, ResetHook, -60000 - -OnKeyDown(InputHook, VK, SC) { - if (!paused) { - key := GetKeyName(Format("vk{:x}sc{:x}", VK, SC)) - if (addNext) { - if (!whitelistKeys.HasKey(Key)) { - whitelistKeys[key] := 1 - sstring := "Added " - sstring .= key - ShowTooltip(sstring) - addNext := 0 - } else { - sstring := "Key already exists" - ShowTooltip(sstring) - addNext := 0 - } - return - } - if (removeNext) { - if (whitelistKeys.HasKey(Key)) { - whitelistKeys.Remove(key) - sstring := "Removed " - sstring .= key - ShowTooltip(sstring) - removeNext := 0 - } else { - sstring := "Key not found" - ShowTooltip(sstring) - removeNext := 0 - } - return - } - if (whitelistKeys.HasKey(key)) { - for k, v in enabledWindows[1] { - ; ControlSend,, {%key% down}, ahk_pid %v% - ; Random, rand, 50, 2000 - ; Sleep %rand% - ControlSend,, {%key% down}, ahk_id %v% - } - } - if (!keyLog.HasKey(key)) { - keyLog[key] := SC, - } - } -} - -; ~LButton:: -; MouseGetPos, xpos, ypos -; for k, v in enabledWindows[1] { -; ControlClick, xpos ypos, ahk_id %v% -; ControlClick,, {%key% down}, ahk_id %v% -; } -; return - -OnKeyUp(InputHook, VK, SC) { - if (!paused) { - key := GetKeyName(Format("vk{:x}sc{:x}", VK, SC)) - if (whitelistKeys.HasKey(key)) { - for k, v in enabledWindows[1] { - ; ControlSend,, {%key% up}, ahk_pid %v% - ControlSend,, {%key% up}, ahk_id %v% - } - } - } -} - -ShowTooltip(text) { - ToolTip, %text% - SetTimer, RemoveToolTip, -800 -} - -RemoveToolTip: - ToolTip -return - -; Not really mine at all -SortArray(Array, Order="A") { - ;Order A: Ascending, D: Descending, R: Reverse - MaxIndex := ObjMaxIndex(Array) - If (Order = "R") { - count := 0 - Loop, % MaxIndex - ObjInsert(Array, ObjRemove(Array, MaxIndex - count++)) - Return - } - Partitions := "|" ObjMinIndex(Array) "," MaxIndex - Loop { - comma := InStr(this_partition := SubStr(Partitions, InStr(Partitions, "|", False, 0)+1), ",") - spos := pivot := SubStr(this_partition, 1, comma-1) , epos := SubStr(this_partition, comma+1) - if (Order = "A") { - Loop, % epos - spos { - if (Array[pivot] > Array[A_Index+spos]) - ObjInsert(Array, pivot++, ObjRemove(Array, A_Index+spos)) - } - } else { - Loop, % epos - spos { - if (Array[pivot] < Array[A_Index+spos]) - ObjInsert(Array, pivot++, ObjRemove(Array, A_Index+spos)) - } - } - Partitions := SubStr(Partitions, 1, InStr(Partitions, "|", False, 0)-1) - if (pivot - spos) > 1 ;if more than one elements - Partitions .= "|" spos "," pivot-1 ;the left partition - if (epos - pivot) > 1 ;if more than one elements - Partitions .= "|" pivot+1 "," epos ;the right partition - } Until !Partitions -} - -WinGetAll() { - PIDs := Array() - winTitles := Array() - output := Array() - WinGet, all, list - Loop, %all% - { - WinGet, PID, PID, % "ahk_id " all%A_Index% - WinGet, name, ProcessName, % "ahk_id " all%A_Index% - if (name != "") { - PIDs.Push(PID) - winTitles.Push(name) - } - } - output.Push(PIDs) - output.Push(winTitles) - return output -} - -AllWindowsToString() { - allWindows := WinGetAll() - output := "" - for k, v in allWindows[1] { - output .= allWindows[1][k] - output .= ", " - output .= allWindows[2][k] - output .= "|" - } - StringTrimRight, output, output, 1 - return output -} - -Find(arr, val) { - for k, v in arr { - if (v == val) { - return k - } - } - return 0 -} - -EnableWindows(istring) { - while (enabledWindows.Length() > 0) { - enabledWindows.Pop() - } - enabledWindows.Push(Array()) - enabledWindows.Push(Array()) - if (InStr(istring, "|") == 0) { - ostring := StrSplit(istring, ", ") - if (!Find(enabledWindows[1], (ostring[1]))) { - enabledWindows[1].Push(ostring[1]) - enabledWindows[2].Push(ostring[2]) - } - } else { - ostring := StrSplit(istring, "|") - for k, v in ostring { - ostring2 := StrSplit(v, ", ") - if (!Find(enabledWindows[1], (ostring2[1]))) { - enabledWindows[1].Push(ostring2[1]) - enabledWindows[2].Push(ostring2[2]) - } - } - } - ; TODO: Remove all non selected windows -} - -GuiSelectActiveWindows(allWindows) { - output := Array() - for k, v in allWindows[1] { - if (Find(enabledWindows[1], "" v)) { - ; GuiControl, Choose, WindowListGUI, k - output.Push(k) - } - } - return output -} - -MakeUI() { - Gui, Destroy - string := AllWindowsToString() - Gui, Add, ListBox, Multi h600 w800 vWindowListGUI, %string% - Gui, Add, Button, Default, OK - Gui, Show - for k, v in GuiSelectActiveWindows(WinGetAll()) { - ; See what's wrong with choose, maybe it doesn't like to be called many times though just that is being done on forum guy - GuiControl, Choose, WindowListGUI, v - } -} - -KeyLogToString() { - output := "" - for k, v in keyLog { - output .= k - output .= "|" - } - StringTrimRight, output, output, 1 - return output -} - -WhitelistButtonUI() { - Gui, Destroy - SortArray(keyLog) - string := KeyLogToString() - Gui, Add, ListBox, Multi h600 w800 vKeyLogUI, %string% - Gui, Add, Button, Default, Save - Gui, Show - for k, v in GuiSelectActiveWindows(WinGetAll()) { - ; See what's wrong with choose, maybe it doesn't like to be called many times though just that is being done on forum guy - GuiControl, Choose, WindowListGUI, v - } -} - -WhitelistKeys(string) { - whitelistKeys := Array() - for k, v in StrSplit(string, "|") { - whitelistKeys[v] := 1 - } -} - -AddCurrentWindow() { - ; WinGet, activePID, PID, A - WinGet, activeID, ID, A - if (!Find(enabledWindows[1], activeID)) { - WinGet, activeName, ProcessName, A - enabledWindows[1].Insert(activeID) - enabledWindows[2].Insert(activeName) - sstring := "Added " - sstring .= activeID - sstring .= " (" - sstring .= activeName - sstring .= ") to echo list" - ShowTooltip(sstring) - } -} - -RemoveCurrentWindow() { - ; WinGet, activePID, PID, A - WinGet, activeID, ID, A - if (Find(enabledWindows[1], activeID)) { - WinGet, activeName, ProcessName, A - enabledWindows[1].RemoveAt(Find(enabledWindows[1], activeID)) - enabledWindows[2].RemoveAt(Find(enabledWindows[2], activeName)) - sstring := "Removed " - sstring .= activeID - sstring .= " (" - sstring .= activeName - sstring .= ") from echo list" - ShowTooltip(sstring) - } -} - -ResetHook: - ih.Stop() - ih := InputHook("B") - ih.KeyOpt("{All}", "NV") - ih.OnKeyDown := Func("OnKeyDown") - ih.OnKeyUp := Func("OnKeyUp") - ih.Start() - ; Tooltip, WIN - SetTimer, ResetHook, -30000 -return - -TogglePause() { - if (paused) { - ShowTooltip("Unpaused") - paused := 0 - return - } - ShowTooltip("Paused") - paused := 1 - return -} - - -F5:: - ih.Stop() - ih := InputHook("B") - ih.KeyOpt("{All}", "NV") - ih.OnKeyDown := Func("OnKeyDown") - ih.OnKeyUp := Func("OnKeyUp") - ih.Start() -return - -; F3:: -; MakeUI() -; return - -; F4:: -; WhitelistButtonUI() -; return - -F3:: - ShowTooltip("Adding key") - addNext := 1 -return - -F4:: - ShowTooltip("Removing key") - removeNext := 1 -return - -^!X:: - ShowTooltip("Adding window") - AddCurrentWindow() -return - -^!C:: - ShowTooltip("Removing window") - RemoveCurrentWindow() -Return - -F6:: - TogglePause() -return - -ButtonSave: - Gui, Submit - WhitelistKeys(KeyLogUI) -return - -ButtonOK: - Gui, Submit - EnableWindows(WindowListGUI) -return - -; F5::reload \ No newline at end of file diff --git a/Echo.ahk2 b/Echo.ahk2 new file mode 100644 index 0000000..559b32d --- /dev/null +++ b/Echo.ahk2 @@ -0,0 +1,278 @@ +SendMode("Input") +SetWorkingDir(A_ScriptDir) + +SetKeyDelay(-1, 100) +SetControlDelay(500) + +ih := InputHook("B") +ih.KeyOpt("{All}", "NV") +ih.OnKeyDown := OnKeyDown +ih.OnKeyUp := OnKeyUp +ih.Start() + +addNext := 0 +removeNext := 0 +enabledWindows := [[], []] +keyLog := Map() +whitelistedKeys := Map() +paused := 0 + +SetTimer(ResetHook, -60000) + +OnKeyDown(InputHook, VK, SC) { + global paused, addNext, removeNext, enabledWindows, keyLog, whitelistedKeys + if (paused) { + return + } + key := GetKeyName("%vk" . VK . "sc" . SC "%") + if (addNext) { + addNext := 0 + if (whitelistedKeys.Has(key)) { + ToolTip("Key already exists") + SetTimer(ToolTip, -500) + return + } + whitelistedKeys.Set(key, 1) + ToolTip("Added " . key) + SetTimer(ToolTip, -500) + return + } + if (removeNext) { + removeNext := 0 + if (!whitelistedKeys.Has(key)) { + ToolTip("Key not found") + SetTimer(ToolTip, -500) + return + } + whitelistedKeys.Delete(key) + ToolTip("Removed " . key) + SetTimer(ToolTip, -500) + return + } + if (whitelistedKeys.Has(key)) { + for k, v in enabledWindows[1] { + ControlSend("", "{" . key . " down}", "ahk_id " . v) + } + } + if (!keyLog.Has(key)) { + keyLog.Set(key, SC) + } +} + +OnKeyUp(InputHook, VK, SC) { + global paused, whitelistedKeys, enabledWindows + if (paused) { + return + } + key := GetKeyName("%vk" . VK . "sc" . SC "%") + if (whitelistedKeys.Has(key)) { + for k, v in enabledWindows[1] { + ControlSend("", "{" . key . " up}", "ahk_id " . v) + } + } +} + +SortArray(Array) { + Array.Sort() +} + +WinGetAll() { + PIDs := [] + winTitles := [] + all := WinGetList() + for window in all { + PID := WinGetPID("ahk_id " . window) + name := WinGetProcessName("ahk_id " . window) + if (name != "") { + PIDs.Push(PID) + winTitles.Push(name) + } + } + return [PIDs, winTitles] +} + +AllWindowsToString() { + allWindows := WinGetAll() + output := "" + for k, v in allWindows[1] { + output .= allWindows[1][k] . ", " . allWindows[2][k] . "|" + } + return SubStr(output, 1, -1) +} + +Find(arr, val) { + for k, v in arr { + if (v = val) { + return k + } + } + return 0 +} + +EnableWindows(istring) { + enabledWindows[1].Clear() + enabledWindows[2].Clear() + if (!InStr(istring, "|")) { + ostring := StrSplit(istring, ", ") + if (Find(enabledWindows[1], ostring[1]) = 0) { + enabledWindows[1].Push(ostring[1]) + enabledWindows[2].Push(ostring[2]) + } + } else { + ostring := StrSplit(istring, "|") + for v in ostring { + ostring2 := StrSplit(v, ", ") + if (Find(enabledWindows[1], ostring2[1]) = 0) { + enabledWindows[1].Push(ostring2[1]) + enabledWindows[2].Push(ostring2[2]) + } + } + } +} + +GuiSelectActiveWindows(allWindows) { + output := [] + for k, v in allWindows[1] { + if (Find(enabledWindows[1], v) != 0) { + output.Push(k) + } + } + return output +} + +MakeUI() { + Gui := Gui() + Gui.Destroy() + string := AllWindowsToString() + Gui.Add("ListBox", "Multi w800 h600 vWindowListGUI", string) + Gui.Add("Button", "Default", "OK") + Gui.Show() + selections := GuiSelectActiveWindows(WinGetAll()) + for k in selections { + Gui.Window.ListBox("WindowListGUI").Selected(k, true) + } +} + +KeyLogToString() { + output := "" + for key in keyLog { + output .= key . "|" + } + return SubStr(output, 1, -1) +} + +WhitelistButtonUI() { + Gui := Gui() + Gui.Destroy() + SortArray(keyLog) + string := KeyLogToString() + Gui.Add("ListBox", "Multi w800 h600 vKeyLogUI", string) + Gui.Add("Button", "Default", "Save") + Gui.Show() + selections := GuiSelectActiveWindows(WinGetAll()) + for k in selections { + Gui.Window.ListBox("KeyLogUI").Selected(k, true) + } +} + +WhitelistKeys(string) { + whitelistKeys := Map() + for key in StrSplit(string, "|") { + whitelistKeys.Set(key, 1) + } +} + +AddCurrentWindow() { + activeID := WinGetID("A") + if (Find(enabledWindows[1], activeID) = 0) { + activeName := WinGetProcessName("A") + enabledWindows[1].Push(activeID) + enabledWindows[2].Push(activeName) + ToolTip("Added " . activeID . " (" . activeName . ") to echo list") + SetTimer(ToolTip, -500) + } +} + +RemoveCurrentWindow() { + activeID := WinGetID("A") + index := Find(enabledWindows[1], activeID) + if (index != 0) { + activeName := enabledWindows[2][index] + enabledWindows[1].Remove(index) + enabledWindows[2].Remove(index) + ToolTip("Removed " . activeID . " (" . activeName . ") from echo list") + SetTimer(ToolTip, -500) + } +} + +ResetHook() { + global ih + ih.Stop() + ih := InputHook("B") + ih.KeyOpt("{All}", "NV") + ih.OnKeyDown := OnKeyDown + ih.OnKeyUp := OnKeyUp + ih.Start() + SetTimer(ResetHook, -30000) +} + +TogglePause() { + if (paused) { + ToolTip("Unpaused") + SetTimer(ToolTip, -500) + paused := 0 + return + } + ToolTip("Paused") + SetTimer(ToolTip, -500) + paused := 1 + return +} + +F5:: { + Reload + ; ih.Stop() + ; ih := InputHook("B") + ; ih.KeyOpt("{All}", "NV") + ; ih.OnKeyDown := OnKeyDown + ; ih.OnKeyUp := OnKeyUp + ; ih.Start() +} + +F3:: { + ToolTip("Adding key") + SetTimer(ToolTip, -500) + addNext := 1 +} + +F4:: { + ToolTip("Removing key") + SetTimer(ToolTip, -500) + removeNext := 1 +} + +^!Y:: { + ToolTip("Adding window") + SetTimer(ToolTip, -500) + AddCurrentWindow() +} + +^!C:: { + ToolTip("Removing window") + SetTimer(ToolTip, -500) + RemoveCurrentWindow() +} + +F6:: TogglePause() + +ButtonSave() { + Gui := Gui() + Gui.Submit() + WhitelistKeys(Gui.Control("KeyLogUI").Value) +} + +ButtonOK() { + Gui := Gui() + Gui.Submit() + EnableWindows(Gui.Control("WindowListGUI").Value) +} \ No newline at end of file