Holy cow, I wrote a book!
When you're displaying a menu item or a dialog option,
and the option is not available,
you can either disable it or you can remove it.
What is the rule for deciding which one to do?
Experiments have shown that if something is shown but
disabled, users expect that they will be able to get it
enabled if they tinker around enough.
So leave a menu item shown but disabled if there is something
the user can do to cause the operation to become available.
For example, in a media playback program,
the option to stop playback is disabled if the media file
is not playing. But once it starts playing, the option
becomes available again.
On the other hand, if the option is not available for
a reason the user has no control over, then remove it.
Otherwise the user will go nuts looking for the magic way
to enable it.
if a printer is not capable of printing color,
don't show any of the color management options,
since there's nothing the user can do with your program
to make that printer a color printer.
By analogy, consider a text adventure game.
The player tries something clever like
"Take the torch from the wall", and the computer replies,
"You can't do that, yet."
This is the adventure game equivalent to graying out
a menu item. The user is now going to go nuts
trying to figure out "Hm, maybe I need a chair,
or the torch is too hot, or I'm carrying too much
stuff, or I have to find another character and ask him
to do it for me..."
If it turns out that the torch is simply not removable,
what you've done is send the user down fruitless paths
to accomplish something that simply can't be done.
For an adventure game, this frustration is part of the
fun. But for a computer program, frustration is not
something people tend to enjoy.
Note that this isn't a hard-and-fast rule; it's just a guideline.
Other considerations might override this principle.
For example, you may believe that a consistent menu structure
is more desireable because it is less confusing.
(A media playback program for example might decide to leave the
video-related options visible but grayed when playing a music file.)