To keep myself interested, I try to put little Easter Eggs in my projects (mostly to amuse myself). I’ve seen some websites where you can type a series of letters “aswzaswz” and you get a “secret function” – how would I achieve this in C#?
I’ve assigned a “secret function” in the past by using modifier keys
bool showFunThing = (Control.ModifierKeys & Keys.Control) == Keys.Control;
but wanted to get a bit more secretive (without the modifier keys) I just wanted the form to detect a certain word typed without any input … I’ve built a method that I think should do it:
private StringBuilder _pressedKeys = new StringBuilder();
protected override void OnKeyDown(KeyEventArgs e)
{
const string kWord = "fun";
char letter = (char)e.KeyValue;
if (!char.IsLetterOrDigit(letter))
{ return; }
_pressedKeys.Append(letter);
if (_pressedKeys.Length == kWord.Length)
{
if (_pressedKeys.ToString().ToLower() == kWord)
{
MessageBox.Show("Fun");
_pressedKeys.Clear();
}
}
base.OnKeyDown(e);
}
Now I need to wire it up but I can’t figure out how I’m supposed to raise the event in the form designer … I’ve tried this:
this.KeyDown +=new System.Windows.Forms.KeyEventHandler(OnKeyDown);
and a couple of variations on this but I’m missing something because it won’t fire (or compile). It tells me that the OnKeyDown method is expecting a certain signature but I’ve got other methods like this where I haven’t specified arguments.
I fear that I may have got myself confused so I am turning to SO for help … anyone?
EDIT: The ProcessCmdKey seems to be the way that works with the following:
private StringBuilder _pressedKeys = new StringBuilder();
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const string kWord = "fun";
char letter = (char)keyData;
if (!char.IsLetterOrDigit(letter))
{return true;}
_pressedKeys.Append(letter);
if (_pressedKeys.Length == kWord.Length)
{
if (_pressedKeys.ToString().ToLower() == kWord)
{
MessageBox.Show("Fun");
_pressedKeys.Clear();
}
_pressedKeys.Clear();
}
return true;
}
Thanks all!
Try this:
This will fire when you press CTRL + P.
refer: ProcessCmdKey