Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> коды клавиш клавиатуры 
:(
    Опции темы
vol4ek
Дата 12.12.2011, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Всем привет. Написал программу которая эмулирует нажатие клавиш на клавиатуре в определённой последовательности. Все прекрасно работает, проблема с клавишами F1-F12 как их нажать? Клавише F1 соответствует код 112 но нажатия не происходит. Остальные клавиши работают прекрасно.

Код

#include <windows.h>

DWORD SendScanCode(WORD scan, BOOL up)
// посылает нажатие или отпускание клавиши со сканкодом scan
// если up == TRUE то это событие отпускания, иначе нажатия
// возвращает NO_ERROR в случае успеха или код ошибки 
{
    INPUT inp = {0};
    inp.type = INPUT_KEYBOARD;
    inp.ki.wScan = scan;
    inp.ki.dwFlags = KEYEVENTF_SCANCODE | (up ? KEYEVENTF_KEYUP : 0); 
    return SendInput(1, &inp, sizeof(inp)) ? NO_ERROR : GetLastError();
}

DWORD SendVirtualKey(UINT vk, BOOL up)
// посылает нажатие или отпускание виртуальной клавиши с кодом vk
// если up == TRUE то это событие отпускания, иначе нажатия
// возвращает NO_ERROR в случае успеха или код ошибки   
{
    UINT scan = MapVirtualKey(vk, MAPVK_VK_TO_VSC);
    // конвертируем виртуальный код в сканкод
    return scan ? SendScanCode(scan, up) : ERROR_NO_UNICODE_TRANSLATION;
    // если конверсия не удалась, то возвращаем 
    // ERROR_NO_UNICODE_TRANSLATION.
    // Если трансляция есть, то посылаем полученный сканкод
}

void main()
{
    bool dowork = TRUE;//работа цикла(да/нет)
    while(dowork == TRUE)//цикл работает пока dowork = TRUE
    {
        if(GetAsyncKeyState(49))//если нажата цифра 1, то
        {
           SendVirtualKey(VK_TAB, FALSE);//создаём нажатие Tab
           SendVirtualKey(VK_TAB, TRUE);//убираем нажатие Tab
        }
        Sleep(100);//выжидаем 100 мс для уменьшения нагрузки на процессор(главная задержка цикла)
    }
}



Подскажите пожалуйста, где промах?
PM MAIL ICQ   Вверх
Dem_max
Дата 12.12.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

int p = 0;
INPUT InpInfo[20];
ZeroMemory(&InpInfo[0], sizeof(InpInfo));
InpInfo[p].type   = INPUT_KEYBOARD;
InpInfo[p].ki.wVk = 0x31;
p++;
InpInfo[p].type       = INPUT_KEYBOARD;
InpInfo[p].ki.wVk     = 0x31;
InpInfo[p].ki.dwFlags = KEYEVENTF_KEYUP;
p++;
SendInput(p, &InpInfo[0], sizeof(INPUT));



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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