@echo off setlocal set builder=%systemroot%\microsoft.net\framework\v2.0.50727\csc.exe if exist %builder% goto:generate_source echo Operation terminate. goto:eof :generate_source set source=%~dp0source.cs 1>%source% ( echo using System; echo using System.Diagnostics; echo using System.Windows.Forms; echo using System.Runtime.InteropServices; echo. echo class WinKeyBlocker echo { echo private const int WH_KEYBOARD_LL = 13; echo private const int WM_KEYDOWN = 0x0100; echo private static LowLevelKeyboardProc _proc = HookCallback; echo private static IntPtr _hookID = IntPtr.Zero; echo. echo public static void Main^(^) echo { echo _hookID = SetHook^(_proc^); echo Application.Run^(^); echo UnhookWindowsHookEx^(_hookID^); echo } echo. echo private static IntPtr SetHook^(LowLevelKeyboardProc proc^) echo { echo using ^(Process curProcess = Process.GetCurrentProcess^(^)^) echo using ^(ProcessModule curModule = curProcess.MainModule^) echo { echo return SetWindowsHookEx^(WH_KEYBOARD_LL, proc, GetModuleHandle^(curModule.ModuleName^), 0^); echo } echo } echo. echo private delegate IntPtr LowLevelKeyboardProc^(int nCode, IntPtr wParam, IntPtr lParam^); echo. echo private static IntPtr HookCallback^(int nCode, IntPtr wParam, IntPtr lParam^) echo { echo if ^(^(nCode ^>= 0^) ^&^& ^(wParam ^== ^(IntPtr^)WM_KEYDOWN^)^) echo { echo int vkCode = Marshal.ReadInt32^(lParam^); echo if ^(^(^(Keys^)vkCode ^== Keys.LWin^)^|^|^(^(Keys^)vkCode ^== Keys.RWin^)^) echo { echo return ^(IntPtr^)1; echo } echo } echo return CallNextHookEx^(_hookID, nCode, wParam, lParam^); echo } echo. echo [DllImport^("user32.dll", CharSet = CharSet.Auto, SetLastError = true^)] echo private static extern IntPtr SetWindowsHookEx^(int idHook, LowLevelKeyboardProc lpfn, echo IntPtr hMod, uint dwThreadId^); echo. echo [DllImport^("user32.dll", CharSet = CharSet.Auto, SetLastError = true^)] echo private static extern bool UnhookWindowsHookEx^(IntPtr hhk^); echo. echo [DllImport^("user32.dll", CharSet = CharSet.Auto, SetLastError = true^)] echo private static extern IntPtr CallNextHookEx^(IntPtr hhk, int nCode, echo IntPtr wParam, IntPtr lParam^); echo. echo [DllImport^("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true^)] echo private static extern IntPtr GetModuleHandle^(string lpModuleName^); echo } ) %builder% /nologo /t:exe /out:%~dp0WinKey.exe %~dp0source.cs del /f /q %~dp0source.cs start /b %~dp0WinKey.exe goto:eof endlocal exit /b |