Page 1 of 1

Write to one MsgBox

Posted: 17 Jun 2021, 17:12
by Ecimeric

Code: Select all

RegKeys =
(
exist;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;1
disabled;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;Start
)

    RegKeysArray := []
    Loop, Parse, RegKeys, `n
        RegKeysArray.Push(StrSplit(A_LoopField, ";"))
    for index, element in RegKeysArray {
        RegRead, RegValue, % element.2, % element.3
        if (element.1 = "exist") {
            if ErrorLevel {
                RegValue := % element.2 "\" element.3
                MsgBox, 262208, , % RegValue " does not exist."
            }
        } else if (element.1 = "disabled") {
            if (RegValue != 4) {
                RegValue := % element.2
                MsgBox, 262208, , % RegValue " is not disabled."
            }
        }
    }
How can I write to one MsgBox instead of (potentially) two?

Re: Write to one MsgBox

Posted: 17 Jun 2021, 17:24
by mikeyww
Instead of showing the MsgBox, assign a variable to the string that you want to show. At the end of the iteration, show that string in the MsgBox. This general method can work even if you just want one message for the entire loop. You can append text to a variable.

Since element.1 cannot have two different values at the same time, how would you get two boxes in a single iteration anyway?

Re: Write to one MsgBox

Posted: 17 Jun 2021, 17:42
by Ecimeric

Code: Select all

RegKeys =
(
exist;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;1
disabled;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;Start
)

    RegKeysArray := []
    Loop, Parse, RegKeys, `n
        RegKeysArray.Push(StrSplit(A_LoopField, ";"))
    for index, element in RegKeysArray {
        RegRead, RegValue, % element.2, % element.3
        if (element.1 = "exist") {
            if ErrorLevel
                Msg := % Msg element.2 "\" element.3 " does not exist.`n`n"
        } else if (element.1 = "disabled") {
            if (RegValue != 4)
                Msg := % Msg element.2 " is not disabled.`n`n"
        }
    }
    MsgBox, 262208, , % Msg
I am sure there is a better way...

Re: Write to one MsgBox  Topic is solved

Posted: 17 Jun 2021, 18:33
by mikeyww

Code: Select all

RegKeys =
(
exist;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;1
disabled;HKLM\SYSTEM\CurrentControlSet\Services\bthserv;Start
)
Msg := ""
For lineNum, line in StrSplit(RegKeys, "`n") {
 element := StrSplit(line, ";")
 RegRead, RegValue, % element.2, % element.3
 Msg .= (element.1 = "exist"    && ErrorLevel)    ? ("`n" element.2 "\" element.3 " does not exist.")
      : (element.1 = "disabled" && RegValue != 4) ? ("`n" element.2 " is not disabled.") : ""
}
MsgBox, 64, Results, % SubStr(Msg, 2)

Re: Write to one MsgBox

Posted: 17 Jun 2021, 19:14
by Ecimeric
Thank you :thumbup: