Page 1 of 1
Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 14:05
by XShayanX
As you can see in the following picture, all these Registry keys contain comma,
How can I escape them?
I'm using RegRead and RegWrite.
I have searched and found this:
https://autohotkey.com/board/topic/96759-run-a-filename-that-contains-a-comma/
But I'm scared to try it. I don't wanna mess up my Registry xD
Thanks very much!
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 15:51
by ilhom
That post you linked is correct. Check out EscapeChar to see how an accent is used for certain characters.
https://www.autohotkey.com/docs/commands/_EscapeChar.htm
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 16:12
by XShayanX
But RegWrite isn't working.. although I'm running AHK with UAC access:
Code: Select all
072: RegWrite,REG_BINARY,HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{d0649ed1-77fc-4bd5-a5f6-cf5600c5136f}\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4},1,%Listen1Ch
073: }
077: Return (60.08)
Here's my actual code:
Code: Select all
x::
regread,Listen1,HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{d0649ed1-77fc-4bd5-a5f6-cf5600c5136f}\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1
Listen1State := SubStr(Listen1, 17, 4)
Listen1First := SubStr(Listen1, 1, 16)
Listen1Last := SubStr(Listen1, 21)
If (Listen1State = "ffff") {
Listen1Change := Listen1First . "0000" . Listen1Last
Listen1Length := StrLen(Listen1)
Listen1ChangeLength := StrLen(Listen1Change)
If (Listen1Length != Listen1ChangeLength) {
MsgBox, "Lengths don't match."
return
}
RegWrite,REG_BINARY,HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{d0649ed1-77fc-4bd5-a5f6-cf5600c5136f}\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1,%Listen1Change%
}
Else If (Listen1State = "0000") {
Listen1Change := Listen1First . "ffff" . Listen1Last
Listen1Length := StrLen(Listen1)
Listen1ChangeLength := StrLen(Listen1Change)
If (Listen1Length != Listen1ChangeLength) {
MsgBox, "Lengths don't match."
return
}
RegWrite,REG_BINARY,HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{d0649ed1-77fc-4bd5-a5f6-cf5600c5136f}\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1,%Listen1Change%
}
Else {
MsgBox, "What is cheese?! `n(idk what happened xd)"
}
return
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 16:35
by XShayanX
Wait is it possible to write a variable to a registry value?
Code: Select all
RegWrite,REG_BINARY,HKLM,SOFTWARE\...\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1,%Listen1Change%
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 16:47
by ilhom
XShayanX wrote: ↑12 Sep 2019, 16:35
Wait is it possible to write a variable to a registry value?
Code: Select all
RegWrite,REG_BINARY,HKLM,SOFTWARE\...\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1,%Listen1Change%
Refer to this:
https://www.autohotkey.com/docs/commands/RegWrite.htm
RegWrite, ValueType, KeyName , ValueName, Value
Here is what you're doing
ValueType = REG_BINARY
Keyname = HKLM
ValueName = SOFTWARE\...\Properties
Value = {24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1
Which means your variable isn't assigned to anything.
It looks like there is an extra comma between
HKLM and the path. Try replacing it with a \ like so:
Code: Select all
RegWrite,REG_BINARY,HKLM\SOFTWARE\...\Properties,{24dbb0fc-9311-4b3d-9cf0-18ff155639d4}`,1,%Listen1Change%
Edit: Looks like you did the same thing with RegRead.
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 17:05
by XShayanX
I was using the old syntax: RegWrite, ValueType, RootKey, SubKey , ValueName, Value
Regardless, I used the new syntax as you suggested but to no avail.
I check the registry value, and it still does not change after I press my hotkey.
At this point I'm really doubting regwrite supports %variables%
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 17:25
by ilhom
XShayanX wrote: ↑12 Sep 2019, 17:05
I was using the old syntax: RegWrite, ValueType, RootKey, SubKey , ValueName, Value
Regardless, I used the new syntax as you suggested but to no avail.
I check the registry value, and it still does not change after I press my hotkey.
At this point I'm really doubting regwrite supports %variables%
Try adding
msgbox %Listen1Change% prior to the RegWrite and see if it's a valid value.
Another test is to create a test variable with a static value that you know is correct and insert that in RegWrite
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 17:26
by XShayanX
All values are correct
Code: Select all
Listen1[24 of 63]: 0B0000000100000000000000
Listen1Change[24 of 63]: 0B00000001000000ffff0000
Listen1ChangeLength[2 of 3]: 24
Listen1First[16 of 63]: 0B00000001000000
Listen1Last[4 of 7]: 0000
Listen1Length[2 of 3]: 24
Listen1State[4 of 7]: 0000
Re: Registry Key Contains Comma - How To Escape It?
Posted: 12 Sep 2019, 18:01
by ilhom
Okay, what if you copy the output from the msgbox and paste it as the value for the last parameter in RegWrite and RegRead? If that works, then I would imagine you would be correct about it variables being problematic in the function.
Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 06:39
by XShayanX
Good thinking!
I tried what you said, it didn't write it to registry...
I wonder what's wrong..
Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 07:24
by XShayanX
Sounds like there's bug with RegWrite in writing to HKLM:
https://www.autohotkey.com/boards/viewtopic.php?f=76&t=62582
I don't know what to do now...
I have tried running the script with UAC access, as admin, converted it to exe and ran it as admin but all to no avail.
Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 08:29
by just me
I don't think there's a bug. IMO, you need (at least) admin rights to write to the key. You might want to try the following:
Code: Select all
#NoEnv
RegKey := "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{d0649ed1-77fc-4bd5-a5f6-cf5600c5136f}\Properties"
RegVal := "{24dbb0fc-9311-4b3d-9cf0-18ff155639d4},1"
RegRead, Listen1, %RegKey%, %RegVal%
If (ErrorLevel) {
MsgBox, 16, Error!, Error when trying to read the registry: %A_LastError%
ExitApp
}
RegWrite, REG_BINARY, %RegKey%, %RegVal%, %Listen1%
If (ErrorLevel) {
MsgBox, 16, Error!, Error when trying to write the registry: %A_LastError%
ExitApp
}
MsgBox, 0, Success, All right!
ExitApp
Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 10:34
by XShayanX
Thanks so much for the code.
I remember after I ran the hotkey, I double clicked on script icon on the status bar and from "Variables and their contents" I checked ErrorLevel, it was 0 but after I tried your code, I found out that ErrorCode is 5 (something must have interfered that my ErrorLevel was 0), and from Microsoft's Doc:
https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
As I said, I tried running the script normally, as admin and with UI Access even before this, but I did again, and I get ErrorLevel 5 for all of them:
I even tried converting the script to exe and then run it as admin, but no.. it still didn't work.

Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 10:41
by ilhom
What if you open up regedit and go to the value and try to change it there? That could narrow down if it's a permission issue with the account/the value is locked, or with ahk making the edit.
Here is something that could help:
https://www.howtogeek.com/262464/how-to-gain-full-permissions-to-edit-protected-registry-keys/
Re: Registry Key Contains Comma - How To Escape It?
Posted: 13 Sep 2019, 10:51
by XShayanX
I have already tried that, I can modify and rename the values and keys without an issue with RegEdit, and I can export and apply *.reg files no problem.
BTW, I have a couple of other hotkeys in my script which use RegWrite to write to HKCU and HKU, and they work without an issue
Just right now I also prepended this script of mine with this:
Code: Select all
if not A_IsAdmin
Run *RunAs "%A_ScriptFullPath%"
Which makes sure my script is running as Admin.