Обработанные нажатия клавиш: понимание возвращаемого значения IntPtr - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь понять код, который блокирует некоторые клавиши на клавиатуре и допускает только несколько путей выхода по сравнению с обычными методами.

Мне удалось получить большую часть этого, но есть та часть, в которой мы фактически обрабатываем нажатия клавиш в этой функции. Вот код:

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);
      }

Что означает присвоение Alt значения boolean с символом & в этой строке WinForms.Control.ModifierKeys & Keys.Alt?

Мы обрабатывали нажатия клавиш, но какой смысл возвращать IntPtr из 1?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Значение перечисления Keys.Alt - это битовая маска с установленным битом, который определяет, нажата ли клавиша-модификатор Alt .

Оператор & выполняет побитовую обработку и при использовании двух значений int или Enum, поэтому для WinForms.Control.ModifierKeys выделяется бит для клавиши Alt .

Метод возвращает значение IntPtr, поэтому для возврата значения 1, которое указывает, что ключ был обработан, необходимо привести его к IntPtr.

0 голосов
/ 11 февраля 2012

Символ & используется для побитового and для двух аргументов. В этом случае WinForms.Control.ModifierKeys & Keys.Alt проверяет, нажата ли клавиша Alt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...