Help with multiple search

Ask gaming related questions (AHK v1.1 and older)
WTF
Posts: 4
Joined: 06 Dec 2021, 20:30

Help with multiple search

Post by WTF » 06 Dec 2021, 20:38

Hello guys, I need to remap some stored hotkeys in variables but i need it to do it only once and only if previously search were null.
Since they save as + ! ^ ( Shift / Alt / Ctrl ) and they are multiple hotkeys like "Shift+F" i trying to replace the stored variable with {ShiftDown}{F}{ShiftUp}
Do you know a way to do it efficiently ?

Code: Select all

Back:
keys := "{" Button8 "}" "`n" "{" Button9 "}" "`n" "{" ButtonF2 "}"
fileappend, %keys%, BFButtons.txt
FileReadLine, Button8, BFButtons.txt, 1
FileReadLine, Button9, BFButtons.txt, 2
FileReadLine, ButtonF2, BFButtons.txt, 3
Gui, 2:Hide
Gui, Show

CheckButtons:
Gui, 2:Submit
Gui, 2:Show
FileDelete, BFButtons.txt
########### BAD CODE ##############
if Button8 contains "+" 
{
GuiControlGet, Button8
StringReplace, Button8, Button8, +, % "Shift Down}{"
StringReplace, Button8, Button8,%Button8%, % Button8 "}{Shift Up"
}
else if Button8 contains "^" 
{
GuiControlGet, Button8
StringReplace, Button8, Button8, ^, % "Ctrl Down}{" 
StringReplace, Button8, Button8,%Button8%, % Button8 "}{Ctrl Up"
}
else if Button8 contains "!" 
{
GuiControlGet, Button8
StringReplace, Button8, Button8, !, % "Alt Down}{"
StringReplace, Button8, Button8,%Button8%, % Button8 "}{Alt Up"
}
if Button9 contains "+" 
{
GuiControlGet, Button9
StringReplace, Button9, Button9, +, % "Shift Down}{"
StringReplace, Button9, Button9,%Button9%, % Button9 "}{Shift Up"
}
else if Button9 contains "^" 
{
GuiControlGet, Button9
StringReplace, Button9, Button9, ^, % "Ctrl Down}{"
StringReplace, Button9, Button9,%Button9%, % Button9 "}{Ctrl Up"
}
else if Button9 contains "!" 
{
GuiControlGet, Button9
StringReplace, Button9, Button9, !, % "Alt Down}{"
StringReplace, Button9, Button9,%Button9%, % Button9 "}{Alt Up"
}

if ButtonF2 contains "+" 
{
GuiControlGet, ButtonF2
StringReplace, ButtonF2, ButtonF2, +, % "Shift Down}{"
StringReplace, ButtonF2, ButtonF2,%ButtonF2%, % ButtonF2 "}{Shift Up"
}
else if ButtonF2 contains "^"
{
GuiControlGet, Button9
StringReplace, ButtonF2, ButtonF2, ^, % "Ctrl Down}{"
StringReplace, ButtonF2, ButtonF2,%ButtonF2%, % ButtonF2 "}{Ctrl Up"
}
else if ButtonF2 contains "!" 
{
GuiControlGet, Button9
StringReplace, ButtonF2, ButtonF2, !, % "Alt Down}{"
StringReplace, ButtonF2, ButtonF2,%ButtonF2%, % ButtonF2 "}{Alt Up"
}
return
########### BAD CODE ##############

User avatar
Xtra
Posts: 2744
Joined: 02 Oct 2015, 12:15

Re: Help with multiple search

Post by Xtra » 06 Dec 2021, 23:20

Example test:

Code: Select all

Button8 := "{+f}"

if InStr(Button8, "+")
{
    Button8 := StrReplace(Button8, "+", "Shift Down}{") . "{Shift Up}"
    MsgBox % Button8    ; testing = {Shift Down}{f}{Shift Up}
}
; etc..etc

WTF
Posts: 4
Joined: 06 Dec 2021, 20:30

Re: Help with multiple search

Post by WTF » 07 Dec 2021, 05:59

Code: Select all

Button8 := "+f"
Button9 := "+s"
ButtonF2 := "+g"

CheckButtons:
Loop 1
{
if InStr(Button8, "+")
{
    Button8 := StrReplace(Button8, "+", "{Shift Down}{") . "}{Shift Up}"
    MsgBox % Button8    ; testing = {Shift Down}{f}{Shift Up}"
    Goto, CheckButtons2
    return
}
else if InStr(Button8, "!")
{
    Button8 := StrReplace(Button8, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
    MsgBox % Button8    ; testing = {Ctrl Down}{f}{Ctrl Up}
    Goto, CheckButtons2
    return
}
else InStr(Button8, "^")
{
    Button8 := StrReplace(Button8, "+", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % Button8    ; testing = {Alt Down}{f}{Alt Up}
    Goto, CheckButtons2
    return
}
return
}
CheckButtons2:
Loop 1
{
if InStr(Button9, "+")
{
    Button9 := StrReplace(Button9, "+", "{Shift Down}{") . "}{Shift Up}"
    MsgBox % Button9    ; testing = {Shift Down}{f}{Shift Up}"
    Goto, CheckButtons3
    return
}
else if InStr(Button9, "!")
{
    Button9 := StrReplace(Button9, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
    MsgBox % Button9    ; testing = {Ctrl Down}{f}{Ctrl Up}
    Goto, CheckButtons3
    return
}
else InStr(Button9, "^")
{
    Button8 := StrReplace(Button9, "!", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % Button9    ; testing = {Alt Down}{f}{Alt Up}
    Goto, CheckButtons3
    return
}
return
}
CheckButtons3:
Loop 1
{
if InStr(Button9, "+")
{
    ButtonF2 := StrReplace(ButtonF2, "+", "{Shift Down}{") . "}{Shift Up}"
    MsgBox % ButtonF2    ; testing = {Shift Down}{f}{Shift Up}"
    return
}
else if InStr(Button9, "!")
{
    ButtonF2 := StrReplace(ButtonF2, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
    MsgBox % ButtonF2    ; testing = {Ctrl Down}{f}{Ctrl Up}
    return
}
else InStr(Button9, "^")
{
    ButtonF2 := StrReplace(ButtonF2, "!", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % ButtonF2    ; testing = {Alt Down}{f}{Alt Up}
    return
}
return
}
Return

; etc..etc
It's working like you said, but currently does send only the first InStr, the else if / else aren't working

User avatar
boiler
Posts: 16767
Joined: 21 Dec 2014, 02:44

Re: Help with multiple search

Post by boiler » 07 Dec 2021, 09:16

You don’t put a condition after a bare else:

Code: Select all

else InStr(Button8, "^")
{
    Button8 := StrReplace(Button8, "+", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % Button8    ; testing = {Alt Down}{f}{Alt Up}
    Goto, CheckButtons2
    return
}

If you want the last block to execute whenever all the previous ones are false, it would be:

Code: Select all

else
{
    Button8 := StrReplace(Button8, "+", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % Button8    ; testing = {Alt Down}{f}{Alt Up}
    Goto, CheckButtons2
    return
}

If you want the last block to execute only when that condition is true (and none of the preceding ones were true), it would be:

Code: Select all

else if InStr(Button8, "^")
{
    Button8 := StrReplace(Button8, "+", "{Alt Down}{") . "}{Alt Up}"
    MsgBox % Button8    ; testing = {Alt Down}{f}{Alt Up}
    Goto, CheckButtons2
    return
}

What is the purpose of looping once? It’s the same as not having a loop at all.

WTF
Posts: 4
Joined: 06 Dec 2021, 20:30

Re: Help with multiple search

Post by WTF » 07 Dec 2021, 12:24

Thanks for your help, sorry the loop was a leftover of previous tries with other methods.

I solved it tho, showcase of the code is below for improvements and advices :)

Code: Select all

CheckButtons:
Gui, 2:Hide
Gui, 1:Show
Gui, 2:Submit
FileDelete, BFButtons.txt
if InStr(Button8, "+")
{
    Button8 := StrReplace(Button8, "+", "{Shift Down}{") . "}{Shift Up}"
    Goto, CheckButtons2
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(Button8, "!")
{
    Button8 := StrReplace(Button8, "!", "{Ctrl Down}{") . "}{Ctrl Up}"
    Goto, CheckButtons2
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(Button8, "^")
{
    Button8 := StrReplace(Button8, "^", "{Alt Down}{") . "}{Alt Up}"
    Goto, CheckButtons2
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else
{
    Button8 := StrReplace(Button8, Button8, "{") . Button8 . "}"
    Goto, CheckButtons2
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
Return
CheckButtons2:
if InStr(Button9, "+")
{
    Button9 := StrReplace(Button9, "+", "{Shift Down}{") . "}{Shift Up}"
    Goto, CheckButtons3
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(Button9, "^")
{
    Button9 := StrReplace(Button9, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
    Goto, CheckButtons3
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(Button9, "!")
{
    Button8 := StrReplace(Button9, "!", "{Alt Down}{") . "}{Alt Up}"
    Goto, CheckButtons3
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else
{
    Button9 := StrReplace(Button9, Button9, "{") . Button9 . "}"
    Goto, CheckButtons3
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
Return
CheckButtons3:
if InStr(ButtonF2, "+")
{
    ButtonF2 := StrReplace(ButtonF2, "+", "{Shift Down}{") . "}{Shift Up}"
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(ButtonF2, "^")
{
    ButtonF2 := StrReplace(ButtonF2, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else if InStr(ButtonF2, "!")
{
    ButtonF2 := StrReplace(ButtonF2, "!", "{Alt Down}{") . "}{Alt Up}"
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
else
{
    ButtonF2 := StrReplace(ButtonF2, ButtonF2, "{") . ButtonF2 . "}"
    keys := Button8 "`n" Button9 "`n" ButtonF2
}
GoTo, SaveFile
Return

SaveFile:
fileappend, %keys%, BFButtons.txt
Return

User avatar
Xtra
Posts: 2744
Joined: 02 Oct 2015, 12:15

Re: Help with multiple search

Post by Xtra » 07 Dec 2021, 12:46

Instead of using goto i would let it fall through without it. The labels are still there if you wanted to jump to them from elsewhere in the code. (or remove them if not needed) See comments.

Code: Select all

CheckButtons:
Gui, 2:Submit    ; Saves the contents of each control to its associated variable (if any) and hides the window.
Gui, 1:Show
FileDelete, BFButtons.txt

if InStr(Button8, "+")
    Button8 := StrReplace(Button8, "+", "{Shift Down}{") . "}{Shift Up}"
else if InStr(Button8, "!")
    Button8 := StrReplace(Button8, "!", "{Ctrl Down}{") . "}{Ctrl Up}"
else if InStr(Button8, "^")
    Button8 := StrReplace(Button8, "^", "{Alt Down}{") . "}{Alt Up}"
else
    Button8 := StrReplace(Button8, Button8, "{") . Button8 . "}"

CheckButtons2:
if InStr(Button9, "+")
    Button9 := StrReplace(Button9, "+", "{Shift Down}{") . "}{Shift Up}"
else if InStr(Button9, "^")
    Button9 := StrReplace(Button9, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
else if InStr(Button9, "!")
    Button9 := StrReplace(Button9, "!", "{Alt Down}{") . "}{Alt Up}"    ; you had a typo on this line 'Button8 :='
else
    Button9 := StrReplace(Button9, Button9, "{") . Button9 . "}"

CheckButtons3:
if InStr(ButtonF2, "+")
    ButtonF2 := StrReplace(ButtonF2, "+", "{Shift Down}{") . "}{Shift Up}"
else if InStr(ButtonF2, "^")
    ButtonF2 := StrReplace(ButtonF2, "^", "{Ctrl Down}{") . "}{Ctrl Up}"
else if InStr(ButtonF2, "!")
    ButtonF2 := StrReplace(ButtonF2, "!", "{Alt Down}{") . "}{Alt Up}"
else
    ButtonF2 := StrReplace(ButtonF2, ButtonF2, "{") . ButtonF2 . "}"

SaveFile:
keys := Button8 "`n" Button9 "`n" ButtonF2
fileappend, %keys%, BFButtons.txt
Return

WTF
Posts: 4
Joined: 06 Dec 2021, 20:30

Re: Help with multiple search

Post by WTF » 07 Dec 2021, 15:56

Really Thanks, that worked like a charm.

Post Reply

Return to “Gaming Help (v1)”