ý Ű ä Ű ŷ ΰ ִ. ٸ ̷ Ư Ȱó ٸ.
- ν ȣǴ ݸ ν Ű ť ȣȴ.
- Ÿ 鿩 ϹǷ Ÿ μ ּ ؾ ý ť Ƿ ʿ䰡 . DLL Ÿ μ Ե ؽƮ Ī Ѵ.
- Ģ Ÿ ϴ. DLL и ʴ ŷ ִ.
- keybd_event Ų ̺Ʈ Űκ ̺Ʈ ÷ LLKHF_INJECTED Ʈ Ͽ ִ.
-wParam, lParam Ǵ ٸ. wParam lParam Ű, ĵ ڵ, ÷, ð, ü ´.
ϸ ü ϴ ȵȴ. ƿ Ծ ο о ִ ִ.
ŷ ڷᰡ Ƿ ⼭ ŷ ˾ . 鿩 ״ ִٴ ưų ʴ. ŷ Ʈ ̴.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("KeyHookLL");
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
, _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
hWndMain = hWnd;
while (GetMessage(&Message, NULL, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
HHOOK hKeyHookLL = NULL;
TCHAR MesName[111];
TCHAR log[256];
TCHAR output[65000];
LRESULT CALLBACK KeyHookProcLL(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0) {
KBDLLHOOKSTRUCT* kb = (KBDLLHOOKSTRUCT*)lParam;
if (wParam == WM_KEYDOWN) lstrcpy(MesName, "Down");
if (wParam == WM_KEYUP) lstrcpy(MesName, "Up");
if (wParam == WM_SYSKEYDOWN) lstrcpy(MesName, "SysDown");
if (wParam == WM_SYSKEYUP) lstrcpy(MesName, "SysUp");
if ((kb->flags & LLKHF_INJECTED) != 0) lstrcat(MesName, "(Injected)");
wsprintf(log, "%s - vk = %x(%c), scan = %x, flag=%x, time = %d\r\n",
MesName, kb->vkCode, kb->vkCode, kb->scanCode, kb->flags, kb->time);
lstrcat(output, log);
// ESC Ѵ.
if (wParam == WM_KEYDOWN && kb->vkCode == VK_ESCAPE) {
lstrcpy(output, "");
}
InvalidateRect(hWndMain, NULL, TRUE);
// 0 ƴ Ͽ Ư Ű Է Ѵ.
if (kb->vkCode == '1') {
return 1;
}
// ٸ Ű ٲٴ ȵȴ.
if (kb->vkCode == '2') {
kb->vkCode = '3';
}
// Ű Է ϰ ο Ű Է ִ.
if (kb->vkCode == '4') {
keybd_event('5', 0, wParam == WM_KEYDOWN ? 0: KEYEVENTF_KEYUP, 0);
return 1;
}
}
return CallNextHookEx(hKeyHookLL, nCode, wParam, lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT crt;
switch (iMessage) {
case WM_CREATE:
hKeyHookLL = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookProcLL, g_hInst, NULL);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &crt);
DrawText(hdc, output, -1, &crt, 0);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
if (hKeyHookLL != NULL) UnhookWindowsHookEx(hKeyHookLL);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
ġ ٸ Ű Ÿ WH_KEYBOARD_LL Ѵ. DLL ġ ʿ Ƿ ü νϽ̸ ϹǷ NULL̴. ν ȣǹǷ ü ݵ ־ Ѵ. WM_CREATE ġϰ WM_DESTROY ϸ ε Ű ν ´.
ν Ű ¸ ϱ ȣǹǷ ̶ GetAsyncKeyState Լ Ű ¸ Ȯ . Ű ° ʿϸ Ű ¸ ü ؾ Ѵ. wParam Ǹ lParamδ ü Ѵ.
typedef struct tagKBDLLHOOKSTRUCT {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
о Ű ô ľѴ. 0 ϸ ü Ÿ Ͽ ƹ óȴ. 0 ƴ , 1 Ͽ ü ʵ Ѵ.
ν ѽð ų óؾ ϸ ð ʰϸ ü ȴ. ѽð Ʈ Ǿ ִµ Ʈ 1̴.
ڵ α Ͽ Ű ش. ٸ α Ű Է 鿩 ִ. 밳 ü ׳ ʿϴٸ ų ٲ ִ. esc α ϴµ Ŀ ʾƵ ϴ.
1Ű ؼ 1 Ͽ Ծ . ü Ű . 쵵 1Ű . ߿ winŰ ϸ ȴ.
2Ű 3Ű Է ٲٴ ȵȴ. vkCode Ű ̸ ٲ۴ٰ ؼ Ÿ ʴ´. ν Ǵ Ķʹ б ̴.
ٲٰ ϴ Ծ keybd_eventԼ ο ŰԷ Ѵ. 4 5 ٲ . 5 Էµ ν Է ü Ÿ ȴ. Ű Է flag LLKHF_INJECTED ÷ Ѵ.
ٸ 쿡 1, 2, 4 ν ϴ ִ. ٸ 쿡 ԷµǴ Ű Ư ϰ κ ϴ.
오남읍만남후기
이문동출장샵
섹스보조용품
한성대입구역출장만남
콜걸전화-구로출장마사지-김포출장마사지-마사지가이드
사천출장마사지-아산콜걸샵 밀양출장안마
석우동출장만남
용호리타이마사지
북구청역안마
출장안마 | 신림 안마 | 광주결혼정보
소개팅 어플
노브라 성산구출장샵
유부녀 인증 후기
충주출장만남
북구성인마사지 | 여수출장업소 | 중년의 사랑
아들자랑
오늘밤 | 자동차사랑 | 대출이자 미납
서해맛집
왕십리맛집
청담맛집
초기비용없는재택알바
동남아여행
일본여행
계양
반려견일상
발패티 만화
시화 오피 타이
상간유희
아비게일흑인
성인용샵
|
|