В моем приложении С# я хочу отобразить контекстное меню, но я хочу добавить специальные опции в меню, если клавиша SHIFT удерживается при открытии контекстного меню.
В настоящее время я использую API GetKeyState
для проверки ключа SHIFT. Он отлично работает на моем компьютере, но пользователи с неанглийскими Windows говорят, что они вообще не работают для них.
Я также прочитал, что в API Win32 при открытии контекстного меню флаг, который указывает в меню, должен показывать EXTENDEDVERBS
. В С# EventArgs
для события Opening
не содержит (из того, что я могу сказать) свойства, указывающего EXTENDEDVERBS
, или если нажаты какие-либо клавиши-модификаторы.
Здесь код, который я использую сейчас внутри события Opening
:
// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
_menuStrip.Items.Add(new ToolStripSeparator());
ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
log.Click += new EventHandler(log_Click);
log.Checked = Settings.Setting.EnableDebugLogging;
_menuStrip.Items.Add(log);
}
Если GetKeyState - правильный способ сделать это, мой код правильно обнаруживает нажатие клавиши SHIFT?