アプリケーションが常にデスクトップ レベルで表示されるようにしようとしています。これは、アプリが LWin+D や RWin+D などのキー シーケンスを無視する必要があることを意味します。私はそれをこのように動作させようとしました:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (prefixSeen)
{
if (keyData == Keys.D)
{
MessageBox.Show("Got it!");
}
prefixSeen = false;
return true;
}
if (keyData == Keys.LWin)
{
prefixSeen = true;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
ただし、D ボタンなしで、RWin/LWin ボタンのみをキャッチします。
また、独自のメッセージ フィルタを作成しようとしましたが、うまくいきませんでした。これらすべてのメッセージと Bitwise:
public class KeystrokMessageFilter : System.Windows.Forms.IMessageFilter
{
public KeystrokMessageFilter() { }
public bool PreFilterMessage(ref Message m)
{
if ((m.Msg == 256 /*0x0100*/))
{
switch (((int)m.WParam) | ((int)Control.ModifierKeys))
{
case (int)(Keys.Control | Keys.Alt | Keys.K):
MessageBox.Show("You pressed ctrl + alt + k");
break;
case (int)(Keys.Control | Keys.C): MessageBox.Show("ctrl+c");
break;
case (int)(Keys.Control | Keys.V): MessageBox.Show("ctrl+v");
break;
case (int)Keys.Up: MessageBox.Show("You pressed up");
break;
}
}
return false;
}
}
Application.AddMessageFilter(keyStrokeMessageFilter);
では、アプリケーションで R/LWin+D をキャッチ/無視するにはどうすればよいでしょうか?