Я пытаюсь понять код, который блокирует некоторые клавиши на клавиатуре и позволяет использовать только некоторые пути выхода по сравнению с обычными способами.Обработанные нажатия: Понимание возвращаемого значения IntPtr
Я получил большинство из них, но есть эта часть, в которой мы фактически обрабатываем нажатия клавиш в этой функции. Вот код:
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0)
{
bool Alt = (WinForms.Control.ModifierKeys & Keys.Alt) != 0;
bool Control = (WinForms.Control.ModifierKeys & Keys.Control) != 0;
//Prevent ALT-TAB and CTRL-ESC by eating TAB and ESC. Also kill Windows Keys.
int vkCode = Marshal.ReadInt32(lParam);
Keys key = (Keys)vkCode;
if (Alt && key == Keys.F4)
{
Application.Current.Shutdown();
return (IntPtr)1; //handled
}
if (key == Keys.LWin ||key == Keys.RWin) return (IntPtr)1; //handled
if (Alt && key == Keys.Tab) return (IntPtr)1; //handled
if (Alt && key == Keys.Space) return (IntPtr)1; //handled
if (Control && key == Keys.Escape)return (IntPtr)1;
if (key == Keys.None) return (IntPtr)1; //handled
if (key <= Keys.Back) return (IntPtr)1; //handled
if (key == Keys.Menu) return (IntPtr)1; //handled
if (key == Keys.Pause) return (IntPtr)1; //handled
if (key == Keys.Help) return (IntPtr)1; //handled
if (key == Keys.Sleep) return (IntPtr)1; //handled
if (key == Keys.Apps) return (IntPtr)1; //handled
if (key >= Keys.KanaMode && key <= Keys.HanjaMode) return (IntPtr)1; //handled
if (key >= Keys.IMEConvert && key <= Keys.IMEModeChange) return (IntPtr)1; //handled
if (key >= Keys.BrowserBack && key <= Keys.BrowserHome) return (IntPtr)1; //handled
if (key >= Keys.MediaNextTrack && key <= Keys.OemClear) return (IntPtr)1; //handled
Debug.WriteLine(vkCode.ToString() + " " + key);
}
return InterceptKeys.CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Что назначая boolean
значение Alt с &
символ означает в этой строке WinForms.Control.ModifierKeys & Keys.Alt
?
Мы справились с нажатиями на клавиши, но какой вопрос о возврате из 1?
Я ранее использовал в одном из моих приложений с e.KeyChar == Keys.Alt в событии Keypress. Это имеет значение? – Cipher
@ Cipher: это другое использование, так как тогда вы улавливаете, когда нажата клавиша Alt, тогда как свойство 'ModifierKeys' содержит ключи модификатора, которые в настоящее время удерживаются. – Guffa