Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос:         &n Добавлено: 07.04.08 00:24  

Автор вопроса:  Harter
Я знаю что ни кто не ответит на этот вопрос, но всё же надежда умерает последней:

Как отследить на клавиатуре:
1.Громче (+)
2.Тише (-)

Как отследить на джойстике:
1 и Последнее. ВСЕ КНОПКИ!!!

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Harter



Вопросов: 32
Ответов: 167
 Профиль | | #1 Добавлено: 07.04.08 00:25
Вопрос: &n

Поскольку &nbsp - эт пробел.....................
Сори :)

Ответить

Номер ответа: 2
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #4
Добавлено: 07.04.08 00:37
ну SetWindowsHookEx - никаг. длл должна быть настоящей, а не актив икс. поэтому васик не катит. а direct input - есть куча туториалов.
мб покатит GetAsyncKeyState, но не уверен. это только для клавы.

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 07.04.08 02:10
неужели _простым_ способом можно отследить нестандартные клавиши. уверен, что нет

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 07.04.08 03:26
на своей клавиатуре наблюдал - мультимедиа кнопки имеют вполне обычные виртуальные коды. даже планировал написать нормальную утилиту, вместо дефолтной паленой от genius. теперь еще и для мыши нада писать - там не учитывается, в каком окне нажимаются доп клавиши (дрова для мышек от майкрософт в этом смысле гораздо разумнее). правда с мышом сложнее - я еще не особо копался, как там идет работа с кнопками. а вот джойстик идет лесом - только direct input

Ответить

Номер ответа: 7
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #7
Добавлено: 07.04.08 03:40
проверил. сгодится обычный глобальный хук на сообщения мыша. XBUTTON1 и XBUTTON2 - это доп кнопки на мыше =) еще бы время найти, или готовую тулзу. а то у логитека кнопки вперед и назад стоят наоборот, нежели в мс. да и софт тож гавененький...

http://www.codeproject.com/KB/wtl/WTLAppButtons.aspx
основы можно тут поглядеть =)

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 07.04.08 05:36
Проверил для мультимедиа-кнопок, вполне нормально ловятся через SetWindowsHookEx/WM_KEYBOARD, wParam в их случае равен 0xAF для "громче" и 0xAE для "тише".

Инжектор:

#include <windows.h>

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 <windows.h>

#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);
}


Для использования запустить параллельно Блокнот :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам