Страница: 1 |
Страница: 1 |
Вопрос: &n
Добавлено: 07.04.08 00:24
Автор вопроса: Harter
Я знаю что ни кто не ответит на этот вопрос, но всё же надежда умерает последней:
Как отследить на клавиатуре:
1.Громче (+)
2.Тише (-)
Как отследить на джойстике:
1 и Последнее. ВСЕ КНОПКИ!!!
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #1
Добавлено: 07.04.08 00:25
Вопрос: &n
Поскольку   - эт пробел.....................
Сори
Номер ответа: 2
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #2
Добавлено: 07.04.08 00:27
на клаве - SetWindowsHookEx или
direct input (джойстик тока через directinput)
Номер ответа: 3
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #3
Добавлено: 07.04.08 00:32
Api (Я обречон!)
Короче можно я не буду неделю юзать апи, и добрый дядя Ra$cal просветит меня как SetWindowsHookEx, а главное directinput пользоваться...
Номер ответа: 4
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #4
Добавлено: 07.04.08 00:37
ну SetWindowsHookEx - никаг. длл должна быть настоящей, а не актив икс. поэтому васик не катит. а direct input - есть куча туториалов.
мб покатит GetAsyncKeyState, но не уверен. это только для клавы.
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 07.04.08 02:10
неужели _простым_ способом можно отследить нестандартные клавиши. уверен, что нет
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 07.04.08 03:26
на своей клавиатуре наблюдал - мультимедиа кнопки имеют вполне обычные виртуальные коды. даже планировал написать нормальную утилиту, вместо дефолтной паленой от genius. теперь еще и для мыши нада писать - там не учитывается, в каком окне нажимаются доп клавиши (дрова для мышек от майкрософт в этом смысле гораздо разумнее). правда с мышом сложнее - я еще не особо копался, как там идет работа с кнопками. а вот джойстик идет лесом - только direct input
Номер ответа: 7
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #7
Добавлено: 07.04.08 03:40
проверил. сгодится обычный глобальный хук на сообщения мыша. XBUTTON1 и XBUTTON2 - это доп кнопки на мыше еще бы время найти, или готовую тулзу. а то у логитека кнопки вперед и назад стоят наоборот, нежели в мс. да и софт тож гавененький...
http://www.codeproject.com/KB/wtl/WTLAppButtons.aspx
основы можно тут поглядеть
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 07.04.08 05:36
Проверил для мультимедиа-кнопок, вполне нормально ловятся через SetWindowsHookEx/WM_KEYBOARD, wParam в их случае равен 0xAF для "громче" и 0xAE для "тише".
Инжектор:
int ShowError(LPWSTR msg){
MessageBox(0, msg, TEXT("Error", MB_ICONERROR);
return -1;
}
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
HMODULE hMod = LoadLibrary(TEXT("dllhook.dll");
if(!hMod){
MessageBox(0, TEXT("Can't load dllhook.dll", TEXT("Error", MB_ICONERROR);
return -1;
}
FARPROC pHook = GetProcAddress(hMod, "HookProc"
if(pHook == NULL){
MessageBox(0, TEXT("Can't get HookProc address", TEXT("Error", MB_ICONERROR);
FreeLibrary(hMod);
return -1;
}
HHOOK hhk = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)pHook, hMod, 0);
Sleep(60000);
UnhookWindowsHookEx(hhk);
FreeLibrary(hMod);
return 0;
}
DLL:
#include <string>
using namespace std;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
return TRUE;
}
BOOL CALLBACK WndEnumProc(HWND hWnd, LPARAM lParam){
wchar_t buff[256];
GetClassName(hWnd, buff, 255);
wstring cn = wstring(buff);
if(cn == TEXT("Edit"){
LRESULT res = SendMessage(hWnd, WM_SETTEXT, NULL, lParam);
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam){
if(nCode < 0){
// do not process message
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
wchar_t buff[256];
wstring key;
wsprintf(buff, TEXT("wParam = %08X; lParam = %08X", wParam, lParam);
key += buff;
if(wParam == 0xAF){
key = TEXT("Ты увеличил громкость."
} else if(wParam == 0xAE){
key = TEXT("Уменьшил громкость."
}
HWND hWnd = FindWindow(NULL, TEXT("Untitled - Notepad");
EnumChildWindows(hWnd, WndEnumProc, (LPARAM)key.c_str());
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Для использования запустить параллельно Блокнот