First of all: Congratulations Benjamin, what a great program!
I would like to make some suggestions for future releases:
1. New items attributes: Locked = 1|0 and Disabled = 1|0
------------------------------------------------------------------
Locked: Don't allow changing the Selected value.
Disabled: Grayed + Locked.
2. Adjust a little the meaning of comparison operators
--------------------------------------------------------------
I have some dificulties to completly understand the existing rules.
My suggestion:
? True if file or registry key or value exist.
?! True if file or registry key or value doesn't exist.
?= True if file exist but as no version information or
if registry key (registry values don't apply) exist but is empty (has no values).
?= <file version> True if file exist and has version equal to.
?= <dec|hex number> or <string> True if registry value has data equal to.
?!= <file version> True if file exist and has version different from.
?!= <dec|hex number> or <string> True if registry value has data different from.
?> <file version> True if file have version info greater than <file version>.
?< <file version> True if file have version info lesser than <file version>.
?>= <file version> True if file have version info greater or equal to <file version>.
?<= <file version> True if file have version info lesser or equal to <file version>.
(I think that ?!<= and ?!>= have no need to be used because there are alternatives)
3. New attribute: CaseSensitive = 1|0
-------------------------------------------
Just for helping when comparing strings.
4. Explicit [Root] section for setting default values
-----------------------------------------------------
This section has a fixed name [Root] and could have these attributes:
[Root]
Group = 1|0
Selected = 1|0
Collapsed = 1|0
Locked = 1|0
Disabled = 1|0
Hidden = 1|0
Some of them, apparently have no use or just don't make sense, but I think that their use is for setting defaults that apply to the hierarchy. The defaults could be after changed explicitly by sub-items/trees/branches.
5. Adjusting the name for file and registry commands
-------------------------------------------------------------
file -> filever
Making room for future

filename
filedate
filesize
key -> regkey and regvalue
6. Evaluating in conjunction file and registry key/values
----------------------------------------------------------------
comparison.x = AND|OR
regkey.x = <path\registry key name>?<comparison operators)><string or number>
regvalue.x = <path\registry value name>?<comparison operators><string or number>
filever.x = <path\file name>?<comparison operators><file version>
7. Sublevels in comparisons
--------------------------------
Example:
comparison.x = AND|OR
comparison.x.y1 = AND|OR
regkey.x = <path\regkey>?<comparison operators)><string or number>
regvalue.x = <path\registry value name>?<comparison operators><string or number>
comparison.x.y2 = AND|OR
regvalue.x = <path\registry value name>?<comparison operators><string or number>
filever.x = <path\file name>?<comparison operators><file version>
comparison.x.y1.z1 = AND|OR
regkey.x = <path\regkey>?<comparison operators)><string or number>
regvalue.x = <path\registry value name>?<comparison operators><string or number>
comparison.x.y1.z2 = AND|OR
regvalue.x = <path\registry value name>?<comparison operators><string or number>
filever.x = <path\file name>?<comparison operators><file version>
7. Opportunity to take different actions (from initial default attributes) from global comparison result
--------------------------------------------------------------------------------------------------------
Example:
description.x = Description x
command.x = cmd.exe /c @echo Command x
;Default attribute values
Selected.x = 0
Collapsed.x = 0
Locked.x = 0
Disabled.x = 0
Hidden.x = 0
comparison.x = AND|OR
regkey.x = <path\registry key name>?<comparison operators)><string or number>
regvalue.x = <path\registry value name>?<comparison operators><string or number>
filever.x = <path\file name>?<comparison operators><file version>
ifresult.x = 1 (attributes to change if comparison result is true)
Selected.x = 1
Collapsed.x = 1
Locked.x = 1
Disabled.x = 1
Hidden.x = 1
;If comparison result is false the default attribute values are not changed.
;Also this is for example, it does not make sense using all attributes together.
Thanks for your wonderful work and keep going!
Paulo