Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция "GetAsyncKeyState" отрабатывает выборочно. 
V
    Опции темы
volatile
Дата 27.5.2013, 16:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(KaZepKa @  27.5.2013,  08:53 Найти цитируемый пост)
Вот если хукать клаву

Цитата(KaZepKa @  27.5.2013,  09:13 Найти цитируемый пост)
при зажатии кнопки на клавиатуре, почему-то действия повторяются, а в случаи с мышью такого нет...

KaZepKa, а причем здесь вообще хуки?
Клавиатура повторяет нажатую клавишу, делает это кстати, сам девайс. Задержку перед повтором и частоту можно регулировать.
Сделано это, для удобства, например набрать такст типа "---------------------------------------" довольно просто.
У мыши такого нет, потому-что, а нафига?



PM MAIL   Вверх
Jr13san
Дата 27.5.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



KaZepKa, а ты введи переменную(ые) или массив в качестве флагов нажатых кнопок.
Приведу небольшой пример кода, но там сделано только на две клавиатурных клавиши. Но можно сделать по аналогии для всех и для мышки тоже.
Win32 Application:
Код

bool keys[256];

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)

    PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;

        FILE * pFile;
          pFile = fopen ("myfile.txt","a+");
          if (pFile!=NULL)
          {
            if (nCode==HC_ACTION)
            {
                switch (p->vkCode)
                {
                    case VK_LWIN:
                        if (keys[p->scanCode]==0 && wParam==WM_KEYDOWN || wParam==WM_SYSKEYDOWN)
                        {
                            fputs ("LWin-DOWN ",pFile);
                            keys[p->scanCode] = 1;
                        }
                        else if (keys[p->scanCode]==1 && wParam==WM_KEYUP || wParam==WM_SYSKEYUP)
                        {
                            fputs ("LWin-UP ",pFile);
                            keys[p->scanCode] = 0;
                        }
                        break;

                    case VK_SPACE:
                        if (keys[p->scanCode]==0 && wParam==WM_KEYDOWN || wParam==WM_SYSKEYDOWN)
                        {
                            fputs ("Space-DOWN ",pFile);
                            keys[p->scanCode] = 1;
                        }
                        else if (keys[p->scanCode]==1 && wParam==WM_KEYUP || wParam==WM_SYSKEYUP)
                        {
                            fputs ("Space-UP ",pFile);
                            keys[p->scanCode] = 0;
                        }
                        break;
                }

            }
            fclose (pFile);
          }
    
    MessageBeep(1);
  return CallNextHookEx(0,nCode,wParam,lParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ if (msg==WM_DESTROY) PostQuitMessage(0);
  return DefWindowProc(hwnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)

    
  HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
  WNDCLASSEX wcex; ZeroMemory(&wcex,sizeof(wcex)); wcex.cbSize=sizeof(WNDCLASSEX);
  wcex.lpfnWndProc=(WNDPROC)WndProc; wcex.hInstance=hInstance; wcex.lpszClassName=L"KeyMouseClass";
  RegisterClassEx(&wcex);
  CreateWindowEx(WS_EX_NOACTIVATE,L"KeyMouseClass", L"KeyMouse",WS_POPUP|WS_VISIBLE,0,0,0,0,0,0,hInstance,0);
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); DispatchMessage(&msg);}

  UnhookWindowsHookEx(hook);
  return (int)msg.wParam;
}



Это сообщение отредактировал(а) Jr13san - 27.5.2013, 16:57
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0693 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.