Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

C# Активация по нажатию клавиши на клавиатуре при свернутой форме

Как я могу продолжить работу программы по нажатию, к примеру, F12? Форма в этот момент свернута.


Ответ

Низкоуровневый перехват клавиш к Вашим услугам!) Ключ 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(); } } }
Взял из своего рабочего проекта. Если у Вас будут какие-то вопросы - решим их.

Комментариев нет:

Отправить комментарий