興味を持ち続けるために、私は自分のプロジェクトに小さなイースターエッグを入れようとしています (主に自分を楽しませるためです)。「aswzaswz」という一連の文字を入力すると、「秘密の関数」が得られる Web サイトをいくつか見たことがあります。C# でこれを実現するにはどうすればよいでしょうか。
過去に修飾キーを使用して「秘密の機能」を割り当てたことがあります
bool showFunThing = (Control.ModifierKeys & Keys.Control) == Keys.Control;
しかし、もう少し機密性を高めたい (修飾キーなし) フォームに、入力なしで入力された特定の単語を検出することを望んでいました...それを行う必要があると思われるメソッドを作成しました:
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);
}
今、私はそれを配線する必要がありますが、フォームデザイナーでイベントを発生させる方法がわかりません...私はこれを試しました:
this.KeyDown +=new System.Windows.Forms.KeyEventHandler(OnKeyDown);
これにはいくつかのバリエーションがありますが、起動(またはコンパイル)しないため、何かが欠けています。OnKeyDown メソッドが特定の署名を期待していることがわかりますが、引数を指定していないこのような他のメソッドがあります。
混乱してしまったのではないかと心配しているので、SOに助けを求めています...誰か?
編集: ProcessCmdKey は、次のように動作するようです:
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;
}
皆さんありがとう!