Hallucinate up an auto forward feature

This commit is contained in:
2025-12-17 07:30:10 +01:00
parent b9182c131f
commit 0f9a0a2054
4 changed files with 247 additions and 7 deletions

View File

@@ -1,7 +1,29 @@
{
"_Profiles":{
"Dave":{
"Client Possitions":{},
"Client Possitions":{
"PhatPhuckDave":{
"IsMaximized":0,
"height":1440,
"width":2560,
"x":0,
"y":0
},
"Primorium":{
"IsMaximized":0,
"height":1440,
"width":2560,
"x":0,
"y":0
},
"Secundamen":{
"IsMaximized":0,
"height":1440,
"width":2560,
"x":0,
"y":0
}
},
"Client Settings":{
"AlwaysMaximize":0,
"Dont_Minimize_Clients":[
@@ -10,7 +32,7 @@
"Example Name3"
],
"MinimizeInactiveClients":0,
"TrackClientPossitions":0
"TrackClientPossitions":1
},
"Custom Colors":{
"cColorActive":"0",
@@ -31,6 +53,8 @@
},
"Hotkey Groups":{
"Daves":{
"AutoForwardOnKeypress":1,
"AutoForwardToggle":1,
"BackwardsHotkey":"",
"Characters":[
"PhatPhuckDave",

View File

@@ -40,6 +40,11 @@ Class Main_Class extends ThumbWindow {
EventHooks := Map()
ThumbWindows := {}
ThumbHwnd_EvEHwnd := Map()
AutoForwardGroups := []
AutoForwardEnabled := Map() ; Map of group index => enabled state
AutoForwardVisited := Map() ; Map of group index => array of visited window names
AutoForwardToggleMode := Map() ; Map of group index => toggle mode setting
AutoForwardProcessedWindow := 0 ; Track which window hwnd already got its input processed
__New() {
@@ -219,9 +224,13 @@ Class Main_Class extends ThumbWindow {
static Fkey := "", BKey := "", Arr := []
if (IsObject(This.Hotkey_Groups) && This.Hotkey_Groups.Count != 0) {
for k, v in This.Hotkey_Groups {
; Check if auto-forward is enabled for this group
hasAutoForward := v.Has("AutoForwardOnKeypress") && v["AutoForwardOnKeypress"]
;If any EVE Window Exist and at least 1 character matches the the list from the group windows
if(This.Global_Hotkeys) {
if( v["ForwardsHotkey"] != "" ) {
; Only register normal forwards hotkey if auto-forward is NOT enabled
if( v["ForwardsHotkey"] != "" && !hasAutoForward) {
Fkey := v["ForwardsHotkey"], Arr := v["Characters"]
HotIf ObjBindMethod(This, "OnWinExist", Arr)
try {
@@ -244,7 +253,8 @@ Class Main_Class extends ThumbWindow {
}
;If any EVE Window is Active
else {
if( v["ForwardsHotkey"] != "" ) {
; Only register normal forwards hotkey if auto-forward is NOT enabled
if( v["ForwardsHotkey"] != "" && !hasAutoForward) {
Fkey := v["ForwardsHotkey"], Arr := v["Characters"]
HotIf ObjBindMethod(This, "OnWinActive", Arr)
try {
@@ -264,7 +274,181 @@ Class Main_Class extends ThumbWindow {
MsgBox(e.Message ": --> " e.Extra " <-- in Profile Settings - " This.LastUsedProfile " Hotkey Groups - " k " - Backwards Hotkey" )
}
}
}
}
; Store auto-forward groups and register toggle hotkey
if (hasAutoForward) {
groupIdx := This.AutoForwardGroups.Length + 1
This.AutoForwardGroups.Push(v["Characters"])
This.AutoForwardEnabled[groupIdx] := false
This.AutoForwardVisited[groupIdx] := []
This.AutoForwardToggleMode[groupIdx] := v.Has("AutoForwardToggle") ? v["AutoForwardToggle"] : true
; Register the forwards hotkey as toggle
if (v["ForwardsHotkey"] != "") {
if(This.Global_Hotkeys) {
HotIf ObjBindMethod(This, "OnWinExist", v["Characters"])
} else {
HotIf ObjBindMethod(This, "OnWinActive", v["Characters"])
}
try {
Hotkey(v["ForwardsHotkey"], ObjBindMethod(This, "ToggleAutoForward", groupIdx, v["Characters"]), "P1")
}
catch ValueError as e {
MsgBox(e.Message ": --> " e.Extra " <-- in Profile Settings - " This.LastUsedProfile " - Hotkey Groups - " k " - Forwards Hotkey (Toggle)" )
}
}
}
}
}
; Register keyboard/mouse hook if any auto-forward groups exist
if (This.AutoForwardGroups.Length > 0) {
This.RegisterAutoForwardHook()
}
}
; Toggle auto-forward for a group
ToggleAutoForward(groupIdx, Arr, *) {
if (This.AutoForwardEnabled[groupIdx]) {
; Disable
This.AutoForwardEnabled[groupIdx] := false
This.AutoForwardVisited[groupIdx] := []
} else {
; Enable and mark current window as first visited
This.AutoForwardEnabled[groupIdx] := true
This.AutoForwardVisited[groupIdx] := []
This.AutoForwardProcessedWindow := 0 ; Reset so current window can receive input
try {
ActiveTitle := This.CleanTitle(WinGetTitle("A"))
This.AutoForwardVisited[groupIdx].Push(ActiveTitle)
}
}
}
; Register a low-level input hook for auto-forward
RegisterAutoForwardHook() {
; Use low-level keyboard hook to catch ALL keys including with modifiers
This.KeyboardHook := DllCall("SetWindowsHookEx", "Int", 13, "Ptr", CallbackCreate(ObjBindMethod(This, "LowLevelKeyboardProc"), "Fast", 3), "Ptr", 0, "UInt", 0, "Ptr")
; Use low-level mouse hook
This.MouseHook := DllCall("SetWindowsHookEx", "Int", 14, "Ptr", CallbackCreate(ObjBindMethod(This, "LowLevelMouseProc"), "Fast", 3), "Ptr", 0, "UInt", 0, "Ptr")
}
; Low-level mouse hook callback
LowLevelMouseProc(nCode, wParam, lParam) {
static WM_LBUTTONDOWN := 0x201, WM_RBUTTONDOWN := 0x204, WM_MBUTTONDOWN := 0x207
if (nCode >= 0 && (wParam = WM_LBUTTONDOWN || wParam = WM_RBUTTONDOWN || wParam = WM_MBUTTONDOWN)) {
if (This.IsAutoForwardActive()) {
try {
currentWindow := WinGetID("A")
; Only process if this window hasn't been processed yet
if (currentWindow != This.AutoForwardProcessedWindow) {
This.AutoForwardProcessedWindow := currentWindow
This.TriggerAutoForward()
}
}
}
}
return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "Ptr", wParam, "Ptr", lParam)
}
; Low-level keyboard hook callback
LowLevelKeyboardProc(nCode, wParam, lParam) {
static WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
if (nCode >= 0 && (wParam = WM_KEYDOWN || wParam = WM_SYSKEYDOWN)) {
vkCode := NumGet(lParam, 0, "UInt")
; Ignore modifier keys themselves
if (vkCode = 0x10 || vkCode = 0x11 || vkCode = 0x12
|| vkCode = 0x5B || vkCode = 0x5C
|| vkCode = 0xA0 || vkCode = 0xA1 || vkCode = 0xA2
|| vkCode = 0xA3 || vkCode = 0xA4 || vkCode = 0xA5) {
return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "Ptr", wParam, "Ptr", lParam)
}
if (This.IsAutoForwardActive()) {
try {
currentWindow := WinGetID("A")
; Only process if this window hasn't been processed yet
if (currentWindow != This.AutoForwardProcessedWindow) {
This.AutoForwardProcessedWindow := currentWindow
This.TriggerAutoForward()
}
}
}
}
; Always pass to next hook
return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "Ptr", wParam, "Ptr", lParam)
}
; Check if any auto-forward group window is active AND enabled
IsAutoForwardActive() {
try {
ActiveTitle := This.CleanTitle(WinGetTitle("A"))
for groupIdx, Arr in This.AutoForwardGroups {
if (This.AutoForwardEnabled[groupIdx] && This.OnWinActive(Arr)) {
for index, name in Arr {
if (name = ActiveTitle)
return true
}
}
}
}
return false
}
; Check if current window should auto-forward and trigger it
TriggerAutoForward() {
try {
ActiveTitle := This.CleanTitle(WinGetTitle("A"))
for groupIdx, Arr in This.AutoForwardGroups {
if (!This.AutoForwardEnabled[groupIdx])
continue
if (This.OnWinActive(Arr)) {
for index, name in Arr {
if (name = ActiveTitle) {
; Forward to next window after a delay
SetTimer(ObjBindMethod(This, "AutoForwardCycle", groupIdx, Arr), -50)
return
}
}
}
}
}
}
; Cycle to next window and track visited
AutoForwardCycle(groupIdx, Arr, *) {
; Get next window
This.Cycle_Hotkey_Groups(Arr, "ForwardsHotkey")
; Track visited window
try {
ActiveTitle := This.CleanTitle(WinGetTitle("A"))
; Check if already visited
alreadyVisited := false
for visited in This.AutoForwardVisited[groupIdx] {
if (visited = ActiveTitle) {
alreadyVisited := true
break
}
}
if (!alreadyVisited) {
This.AutoForwardVisited[groupIdx].Push(ActiveTitle)
}
; If not toggle mode, check if all windows visited
if (!This.AutoForwardToggleMode[groupIdx]) {
; Count existing windows in group
existingCount := 0
for name in Arr {
if (WinExist("EVE - " name " Ahk_Exe exefile.exe"))
existingCount++
}
; If visited all, disable auto-forward
if (This.AutoForwardVisited[groupIdx].Length >= existingCount) {
This.AutoForwardEnabled[groupIdx] := false
This.AutoForwardVisited[groupIdx] := []
}
}
}
}
@@ -734,4 +918,3 @@ Class Main_Class extends ThumbWindow {
FileAppend(JSON.Dump(This._JSON, , " "), "EVE-X-Preview.json")
}
}

View File

@@ -407,7 +407,7 @@ class Propertys extends TrayMenu {
return This._JSON["_Profiles"][This.LastUsedProfile]["Hotkey Groups"]
}
set {
This._JSON["_Profiles"][This.LastUsedProfile]["Hotkey Groups"][Key] := Map("Characters", value, "ForwardsHotkey", "", "BackwardsHotkey", "")
This._JSON["_Profiles"][This.LastUsedProfile]["Hotkey Groups"][Key] := Map("Characters", value, "ForwardsHotkey", "", "BackwardsHotkey", "", "AutoForwardOnKeypress", 0, "AutoForwardToggle", 1)
}
}
; Hotkey_Groups_Hotkeys[Name?, Hotkey?] {

View File

@@ -396,6 +396,15 @@
Hotkey_Groups.Push HKBackwards
This.S_Gui["BackwardsdKey"].OnEvent("Change", (obj, *) => SaveHKGroupList(obj))
Hotkey_Groups.Push This.S_Gui.Add("Text", "xp yp50", "Auto-Forward:")
AutoForwardCB := This.S_Gui.Add("Checkbox", "xp yp+20 Disabled vAutoForwardOnKeypress", "Forward on any keypress")
Hotkey_Groups.Push AutoForwardCB
This.S_Gui["AutoForwardOnKeypress"].OnEvent("Click", (obj, *) => SaveAutoForward(obj))
AutoForwardToggleCB := This.S_Gui.Add("Checkbox", "xp yp+20 Disabled vAutoForwardToggle", "Toggle mode (else: disable after full cycle)")
Hotkey_Groups.Push AutoForwardToggleCB
This.S_Gui["AutoForwardToggle"].OnEvent("Click", (obj, *) => SaveAutoForwardToggle(obj))
This.S_Gui.Controls.Profile_Settings.PsDDL["Hotkey Groups"] := Hotkey_Groups
for k, v in This.S_Gui.Controls.Profile_Settings.PsDDL["Hotkey Groups"]
v.Visible := 0
@@ -417,6 +426,8 @@
}
EditObj.value := "", ForwardHKObj.value := "", BackwardHKObj.value := ""
ForwardHKObj.Enabled := 1, BackwardHKObj.Enabled := 1, EditObj.Enabled := 1
AutoForwardCB.value := 0, AutoForwardCB.Enabled := 1
AutoForwardToggleCB.value := 1, AutoForwardToggleCB.Enabled := 1
ddlObj.Choose(ArrayIndex)
This.NeedRestart := 1
SetTimer(This.Save_Settings_Delay_Timer, -200)
@@ -430,6 +441,8 @@
ddlObj.Add(This.GetGroupList())
ForwardHKObj.value := "", BackwardHKObj.value := "", EditObj.value := ""
ForwardHKObj.Enabled := 0, BackwardHKObj.Enabled := 0, EditObj.Enabled := 0
AutoForwardCB.value := 0, AutoForwardCB.Enabled := 0
AutoForwardToggleCB.value := 0, AutoForwardToggleCB.Enabled := 0
This.NeedRestart := 1
SetTimer(This.Save_Settings_Delay_Timer, -200)
@@ -444,6 +457,10 @@
EditObj.value := text, EditObj.Enabled := 1
ForwardHKObj.value := This.Hotkey_Groups[ddlObj.Text]["ForwardsHotkey"], ForwardHKObj.Enabled := 1
BackwardHKObj.value := This.Hotkey_Groups[ddlObj.Text]["BackwardsHotkey"], BackwardHKObj.Enabled := 1
AutoForwardCB.value := This.Hotkey_Groups[ddlObj.Text].Has("AutoForwardOnKeypress") ? This.Hotkey_Groups[ddlObj.Text]["AutoForwardOnKeypress"] : 0
AutoForwardCB.Enabled := 1
AutoForwardToggleCB.value := This.Hotkey_Groups[ddlObj.Text].Has("AutoForwardToggle") ? This.Hotkey_Groups[ddlObj.Text]["AutoForwardToggle"] : 1
AutoForwardToggleCB.Enabled := 1
}
}
@@ -467,6 +484,22 @@
This.NeedRestart := 1
SetTimer(This.Save_Settings_Delay_Timer, -200)
}
SaveAutoForward(obj) {
if (ddl.Text != "") {
This.Hotkey_Groups[ddl.Text]["AutoForwardOnKeypress"] := obj.value
This.NeedRestart := 1
SetTimer(This.Save_Settings_Delay_Timer, -200)
}
}
SaveAutoForwardToggle(obj) {
if (ddl.Text != "") {
This.Hotkey_Groups[ddl.Text]["AutoForwardToggle"] := obj.value
This.NeedRestart := 1
SetTimer(This.Save_Settings_Delay_Timer, -200)
}
}
}