Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2014, 14:05   #1
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию WM_KEYDOWN

Как отловить все сообщения WM_KEYDOWN посылающиеся в системе?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 23.02.2014, 15:25   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

SetWindowsHookEx?
Somebody вне форума Ответить с цитированием
Старый 23.02.2014, 20:26   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

делаю так, но код почему-то не действует

подключаемая dll (должен создаваться текстовый файл при срабатывании но он не создается
Код:
#include <windows.h>
#include <stdio.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")

FILE *f;

__declspec(dllexport) LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
static POINT pnt;
/*
if (code <0)
return CallNextHookEx(0, code, wParam, lParam);
*/

f = fopen("hookproc.txt", "w");

fprintf(f, "hook\n");

fclose(f);

MSG *msg = (MSG* ) lParam;

if (LOWORD(msg->message) == WM_KEYDOWN)
{
GetCursorPos(&pnt);
switch(msg->wParam)
{
case VK_LEFT:
pnt.x -=5;
break;
case VK_RIGHT:
pnt.x +=5;
break;
case VK_UP:
pnt.y -= 5;
break;
case VK_DOWN:
pnt.y +=5;
break;
}
SetCursorPos(pnt.x, pnt.y);
}

return CallNextHookEx(0, code, wParam, lParam);
}
основная прогр

Код:
#include <windows.h>
#include <d3dx.h> 
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")

HOOKPROC hkp;
HOOKPROC hkp2;
static HINSTANCE hinstdll;
static HHOOK hhook;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static POINT pnt;

switch (uMsg)
{
case WM_CREATE:
ghwnd = hwnd;
break;

case WM_KEYDOWN:
GetCursorPos(&pnt);
switch(wParam)
{
case VK_LEFT:
pnt.x -=5;
break;
case VK_RIGHT:
pnt.x +=5;
break;
case VK_UP:
pnt.y -= 5;
break;
case VK_DOWN:
pnt.y +=5;
break;

}
SetCursorPos(pnt.x, pnt.y);
return 0;
case  WM_DESTROY:
PostQuitMessage(NULL);
return 0;
case WM_PAINT:
return 0;

default:
return DefWindowProc(hwnd, uMsg,wParam, lParam);
}

return DefWindowProc(hwnd, uMsg,wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow)
{
WNDCLASSEX wc;
MSG msg;
HWND hwnd;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = NULL;
wc.cbWndExtra = NULL;
wc.hInstance = hInst;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName =  "SimpleWinClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);

RegisterClassEx(&wc);

hwnd = CreateWindowEx(NULL, "SimpleWinClass", "Window", 
WS_OVERLAPPEDWINDOW, 
0, 0, 
0, 0, 
NULL, NULL, hInst, NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

int main(int argc, char* argv[])
{

HINSTANCE hInstance = GetModuleHandle(0);
LPSTR CommandLine = GetCommandLine();
hinstdll = LoadLibrary(TEXT("C:\\Perl\\hookdll.dll"));
hkp2 = (HOOKPROC)GetProcAddress(hinstdll, "GetMsgProc");
hhook = SetWindowsHookEx(WH_GETMESSAGE, hkp2, hinstdll, 0);
HRESULT hresult = WinMain(hInstance, NULL,CommandLine, SW_SHOWDEFAULT); 
UnhookWindowsHookEx(hhook);

return hresult;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
непонятки с WM_KEYDOWN varich Общие вопросы Delphi 0 18.05.2013 17:40
wm_keydown Артэс Win Api 7 09.10.2012 22:20
Не срабатывает WM_KEYDOWN Sylvos Win Api 3 23.02.2012 04:02
SendMessage + WM_KEYDOWN fate Общие вопросы Delphi 6 28.01.2011 23:40
Обработка wm_keydown если на форме присутствует TFrame Oburec Компоненты Delphi 1 13.04.2009 10:01