#c_sharp #net #winforms
Как я могу продолжить работу программы по нажатию, к примеру, F12? Форма в этот момент свернута.
Ответы
Ответ 1
Низкоуровневый перехват клавиш к Вашим услугам!) Ключ F12 - 123. Для нахождения ключей других клавиш, можете раскомментировать строку с mBox'ом. using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Whooper { public partial class Form1 : Form { private const int WH_KEYBOARD_LL = 13; private LowLevelKeyboardProcDelegate m_callback; private IntPtr m_hHook; [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr SetWindowsHookEx( int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId); [DllImport("user32.dll", SetLastError = true)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("Kernel32.dll", SetLastError = true)] private static extern IntPtr GetModuleHandle(IntPtr lpModuleName); [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr CallNextHookEx( IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); private IntPtr LowLevelKeyboardHookProc( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var khs = (KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); if (Convert.ToInt32("" + wParam) == 256) { //MessageBox.Show(khs.VirtualKeyCode+""); //Показать Ключ нажатой клавиши if ((int)khs.VirtualKeyCode==123)//123 - F12 { WindowState = FormWindowState.Normal; } } } return CallNextHookEx(m_hHook, nCode, wParam, lParam); } [StructLayout(LayoutKind.Sequential)] private struct KeyboardHookStruct { public readonly int VirtualKeyCode; public readonly int ScanCode; public readonly int Flags; public readonly int Time; public readonly IntPtr ExtraInfo; } private delegate IntPtr LowLevelKeyboardProcDelegate( int nCode, IntPtr wParam, IntPtr lParam); public void SetHook() { m_callback = LowLevelKeyboardHookProc; m_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, m_callback, GetModuleHandle(IntPtr.Zero), 0); } public void Unhook() { UnhookWindowsHookEx(m_hHook); } public Form1() { InitializeComponent(); SetHook(); } } } Взял из своего рабочего проекта. Если у Вас будут какие-то вопросы - решим их.
Комментариев нет:
Отправить комментарий