Holy cow, I wrote a book!
We saw that you can
register your context menu under *
to make it apply to all files.
But what if you want it to apply to all files
For example, your command might be
"Convert to Widget" but you don't want it to appear for
.widget files because that would be redundant.
I mentioned how to do this
as an afterthought
in an earlier discussion
of advanced context menu registration,
but I'm going to elevate to its own topic because it's probably even
more useful than the base article!
Starting in Windows 7,
you can conditionalize your context menu declaratively.
This is explained in the documentation for context menus
in the section
Getting Dynamic Behavior for Static Verbs
by Using Advanced Query Syntax.
Let's try it out.
Of course, I don't actually have a
"Widgetizer" program, so I'll just use Calc.
The Widgetize command appears only for files whose
extension is not .widget.
You have access to the shell property system and
Advanced Query Syntax here,
so you can create more complex conditionals.
Here's how you can Widgetize only files that are smaller
and ignore zero-byte files.
"AppliesTo"="System.Size:1..32kb AND NOT System.FileExtension:=.widget"