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