غیر فعال کردن دکمه های ترکیبی Alt+Tab
این کد رو یکی از دوستان توی انجمن (forum.w3-farsi.com) گذاشتن. خالی از لطف ندیدم که توی سایت هم قرار بدم:
using System; using System.ComponentModel; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; namespace WindowsFormsApplication86 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public delegate IntPtr LowLevelKeyboardProcDelegate(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam); [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); [DllImport("user32", EntryPoint = "SetWindowsHookEx", SetLastError = true)] public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32", EntryPoint = "UnhookWindowsHookEx", SetLastError = true)] public static extern bool UnhookWindowsHookEx(IntPtr hHook); [DllImport("user32", EntryPoint = "CallNextHookEx", SetLastError = true)] public static extern IntPtr CallNextHookEx(IntPtr hHook, int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam); public const int WH_KEYBOARD_LL = 13; /*code needed to disable start menu*/ [DllImport("user32.dll")] private static extern int FindWindow(string className, string windowText); [DllImport("user32.dll")] private static extern int ShowWindow(int hwnd, int command); private const int SW_HIDE = 0; private const int SW_SHOW = 1; public struct KBDLLHOOKSTRUCT { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } public static IntPtr intLLKey; public IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam) { bool blnEat = false; try { switch (wParam.ToInt64()) { case 256: case 257: case 260: case 261: //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key, blnEat = ((lParam.vkCode == 9) && (lParam.flags == 32)) // alt+tab || ((lParam.vkCode == 27) && (lParam.flags == 32)) // alt+esc || ((lParam.vkCode == 27) && (lParam.flags == 0)) // ctrl+esc || ((lParam.vkCode == 91) && (lParam.flags == 1)) // left winkey || ((lParam.vkCode == 92) && (lParam.flags == 1)) || ((lParam.vkCode == 73) && (lParam.flags == 0)); break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } if (blnEat == true) { return (IntPtr)1; } else { return CallNextHookEx(intLLKey, nCode, wParam, ref lParam); } } private void Form1_Load(object sender, EventArgs e) { using (ProcessModule curModule = Process.GetCurrentProcess().MainModule) { intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(curModule.ModuleName), 0); } if (intLLKey.ToInt64() == 0) { throw new Win32Exception(); } } } }