public delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
private const int WH_KEYBOARD_LL = 13; // idHook - type of hook procedure
private static int intLLKey; // hook handle (return value)
//private static LowLevelKeyboardProcDelegate lpfn; // pointer to the hook procedure
private void LockKeyboard()
{
[DllImport("user32", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling =
true)]
public static extern int SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId);
[DllImport("user32", EntryPoint = "UnhookWindowsHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling =
true)]
public static extern int UnhookWindowsHookEx(int hHook);
[DllImport("user32", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling =
true)]
public static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
// 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);
// needed to get module handle
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
public struct KBDLLHOOKSTRUCT
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
public int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
{
bool blnEat = false;
switch (wParam)
{
if (blnEat == true)
{
return 1;
}
else
{
// chain to the next hook procedure. allow other applications that
// have installed hooks to receive hook notification
return CallNextHookEx(0, nCode, wParam, ref lParam);
}
}
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
public void KillStartMenu()
{
int hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_HIDE);
}
public static void ShowStartMenu()
{
int hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_SHOW);
}
}
이리저리 C#에서 CtrlAltDel, AltF4, AltTab 키 막을려고 후킹소스를 뒤지는데
검색결과마다 어느 한 소스를 두고, 이게 제대로 실행이 안된다는 내용들의 글이었다.
그 소스를 구해서 해보니 CtrlAltDel기능만 막히고 AltTab이랑 Win키는 못막아지더라.
짧은 영어 실력으로 다른 사람들의 Answer, Reply을 읽어가면서 찾던도중
ㅋ ㅑ ~
드디어 찾았다. 그리고 ... 내 프로그램에 적용시켰다. 성공이다.
이것때문에 거의 일주일을 헤맸는데 ( 뭐 그동안 놀고 먹느라 바쁘기도 했지만 )
기존에 구했던 소스랑 똑같은데 대체 어디가 조금 달라서 기능이 실행된건지
수업 듣고 와서 저녁먹고 한번 찾아봐야겠다.
AlT+F4, ALT+TAB, CTLR + ESC, Windows 키를 막으려고 이리저리 검색했는데
FormClosing 이벤트로 Alt+F4 가 안막히게 구현하는 방법을 찾았다.
원래 내가 의도한건 키보드 키 자체를 안먹히게 하는거였는데.
이제 나머지 다른 키들을 인식안되게 하려고 하다가
어느 외국 사이트에서 Alt+Tab에 관한 소스를 찾았다.
그래서 신나게 소스 적용하고보니...
ALT+Tab 을 막은게 아니라 AlT+Tab 했을때 나오는 아이콘들 중에
내가 지정한 프로그램의 아이콘이 안나오게 하는 소스였다 -_-
[DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr window, int index, int value);
[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr window, int index);
const int GWL_EXSTYLE = -20;
const int WS_EX_TOOLWINDOW = 0x00000080;
const int WS_EX_APPWINDOW = 0x00040000;
//Calling after InitializeComponent, or form load events
int windowStyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
SetWindowLong(this.Handle, GWL_EXSTYLE, windowStyle | TOOLWINDOW);
휴우 빨리 키 막기 기능 넣고나서
다음 기능들을 추가해야하는데 ㅠ_ㅠ
늘 삽질의 연속이군하~