ControlKey y ShiftKey (y el menú - que supondría que habría sido llamado AltKey) representan las claves físicas. En otras palabras, son claves "reales" y se pueden encontrar en la propiedad KeyCode de un objeto KeyEventArgs .
Control, Mayús y Alt, por otro lado, nunca aparecerán en la propiedad KeyCode , pero sus valores se pueden encontrar en la propiedad KeyData. Parece que en realidad NUNCA NECESITA usar estas constantes, porque el marco ya las saca por medio de las propiedades Alt, Control y Shift del objeto KeyEventArgs, pero PUEDE usarlas para probar contra la propiedad KeyData si tu realmente quieres
Source with Examples.
Editar por tu edición:
mirada a los valores que se devuelven cuando se pulsa la tecla "a":
un (no desplazada)/41/41
A (Shift + a)/41/10041
Ctrl + a/41/20041
El "KeyCode" en este caso es = 41 para todos los modificadores. Podría usar esto en el código si todo lo que le importaba era el botón primario presionado, en este caso "a".
Si desea tener una funcionalidad diferente en función de si se ha presionado un modificador, tendrá que ser más específico y hacer referencia al campo "KeyData" y buscar el # que denota un determinado modificador. En este caso, "100" para el cambio y "200" para el control al comienzo del campo.
Eso no quiere decir que no puedas simplemente buscar el "41" al final del campo KeyData, pero nunca he sido de los que se quejan de la conveniencia.
Sería seguro decir que la "diferencia" que está buscando entre ellos en su primera pregunta es que hacen referencia a diferentes campos de propiedades.
Editar para una relevancia adicional: Los valores del modificador de clave combinados con el valor clave se correlacionan directamente con los miembros de enumeración de acceso directo. Por ejemplo: Shortcut.CtrlF8 (0x20077) es lo mismo que Keys.Control | Keys.F8 (0x20000 | 0x77)
Esto puede ser útil al tratar con las propiedades de acceso directo definidas de los elementos del menú.
Utiliza Keys.Control para comprobar si el usuario mantiene presionada la tecla Ctrl. Para detectar Ctrl + C, por ejemplo. Utiliza Keys.ControlKey para detectar al usuario presionando la tecla Ctrl. Lo cual es inusual a menos que escribas un juego. –