출처 : http://nicejinux.net/bbs/zboard.php?id=lecture&no=66
-- 감사합니다
using System;
-- 감사합니다
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class InterceptKeys
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
public static void Main()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
}
콘솔어플리케이션으로 만들고 system.window.form하나 추가해주고
콘솔어플리케이션으로 만들고 system.window.form하나 추가해주고
'개발 > Client' 카테고리의 다른 글
[C/C++]if문 같은 조건문에서의 조건식 유의점 (0) | 2011.11.10 |
---|---|
[C++/MFC] 정규DLL(Regular DLL)과 MFC 연동하기 (0) | 2011.08.30 |
[C++/MFC] MFC로 프로그래밍 하다 콘솔창으로 디버깅 출력하고 싶을때 (0) | 2011.08.08 |
[C++/MFC] 입력한 값 메시지박스로 출력하기 (0) | 2011.08.03 |
[C++]객체, 포인터, 이중포인터, 배열 다루기 예제(파일첨부) (0) | 2011.08.02 |