Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195

1000 раз нажать клавишу

10.08.2018, 23:44. Показов 1285. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.Нужна была программа,которая при нажатии в фоновом режиме клавиши ESC имитировалось 10-кратное нажатие клавиши 'W'.По-моему описал не очень понятно,поэтому приведу пример.Открывается программа,затем открывается (допустим) игра.Если во время игры была нажата клавиша ESC,то нужно 10 раз нажать клавишу 'W'.Что-то типа автокликера
Пытался делать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
#include <iostream>
#include <windows.h>
#include <conio.h>
bool is_key(int _key = VK_ESCAPE)
{   if(GetAsyncKeyState(_key) == -32767)
    {   std::cout << "\a"; // beep
        return true;
    }
    return false;
}
int main()
{   while(true)
    {   if(is_key())
        {
            for(int i=0;i<=10;i++)
            {
                keybd_event('W', 0, 0, 0);
                keybd_event('W', 0, KEYEVENTF_KEYUP, 0);
                
            }
        }
        Sleep(50); // Бережем процессор от перегрева)
    }
 
    return 0;
}
В игре "beep" слышу,но нажатие не происходит.Что делать?Буду благодарен за помощь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2018, 23:44
Ответы с готовыми решениями:

Остановка программы без предложения "Нажать любую клавишу"
в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в плюсах? кроме system(&quot;pause&quot;)?...

Игра крепс, выполняемая 1000 раз, не запускается
Написал программу игры в крепс, выполняемая 1000 раз. Компилятор ошибок никаких не выдает. При запуске выходит исключение, помогите найти...

При нажатии любой клавиши вывести на экран просьбу нажать эту клавишу еще раз
Нужно написать программу, которая при нажатии любой клавиши на выводит на экран просьбу на*жать эту клавишу еще раз. При повторном нажатии...

11
19 / 17 / 7
Регистрация: 18.09.2017
Сообщений: 96
11.08.2018, 06:21
Зачем тебе С++. Возьми лучше https://autohotkey.com/
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
11.08.2018, 10:28
Нужно захватывать handle окна игры, к тому же для игры надо использовать sendinput
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
12.08.2018, 00:06  [ТС]
trifecta, Спасибо конечно, я воспользуюсь, но мне теперь захотелось сделать самому)

Peoples, можно по-подробней пожалуйста?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
12.08.2018, 07:54
Цитата Сообщение от Gaveyn Посмотреть сообщение
Sleep(50); // Бережем процессор от перегрева)
это каким образом?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
12.08.2018, 09:32
Цитата Сообщение от ValeryS Посмотреть сообщение
Sleep(50); // Бережем процессор от перегрева)
это каким образом?
Поясните вопрос. Потому что мне, например, очевидно, что использование sleep вместо задержки на циклах уменьшает загрузку процессора и, следовательно, его нагрев.
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
12.08.2018, 10:18
COKPOWEHEU, есть мнение, что на современных машинах эффект не более чем гомеопатический
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
12.08.2018, 11:18
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
что использование sleep вместо задержки на циклах
зависит от реализации sleep
есть реализации где внутре те же циклы
да и на современных процессорах, а так же ОС, процессор спать не ляжет, а отдаст это время другим потокам
так что насчет энергосбережение вопрос спорный, а вот реакцию системы sleep улучшит
в старых ОС, по крайней мере Windows NT 4, конструкции типа
C
1
while(1);
вешали систему напрочь
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
12.08.2018, 13:17
Цитата Сообщение от DobroAlex Посмотреть сообщение
COKPOWEHEU, есть мнение, что на современных машинах эффект не более чем гомеопатический
Это мнение неверное. В отличие от цикла, функция sleep() возвращает управление операционной системе. Это позволяет ей более гибко управлять производительностью. Можете проверить самостоятельно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <sys/time.h>
#ifdef win32
  #define usleep(x) Sleep(x/1000)
#else
  #include <unistd.h>
#endif
 
unsigned long get_time_ms(){
  struct timeval tv;
  unsigned long time_ms;
  gettimeofday(&tv,NULL);
  time_ms = tv.tv_usec/1000 + tv.tv_sec*1000;
  return time_ms;
}
 
int main(){
  unsigned long t;
  int i;
  printf("wait by cycle\n");
  for(i=0; i<10; i++){
    printf("%i / 10\n", i);
    for(t=get_time_ms()+1000; get_time_ms()<t;){}
  }
  printf("wait by sleep\n");
  
  for(i=0; i<10; i++){
    printf("%i / 10\n", i);
    usleep(1000000);
  }
}
Цитата Сообщение от ValeryS Посмотреть сообщение
зависит от реализации sleep
Даже в самых примитивных ОСРВ оно работает примерно так. Только в одозадачных системах (вроде контроллеров) ставят "тупую" задержку.
Цитата Сообщение от ValeryS Посмотреть сообщение
да и на современных процессорах, а так же ОС, процессор спать не ляжет, а отдаст это время другим потокам
Зато может снизить частоту, что все равно уменьшит потребление. Зависит еще и от других задач, разумеется.
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
14.08.2018, 08:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Зато может снизить частоту, что все равно уменьшит потребление. Зависит еще и от других задач, разумеется.
все верно формально функция sleep заставляет поток "уснуть" на определенное время, а побочное действие разгружает процессор, поэтому я и придрался к формулировке комментария
Цитата Сообщение от Gaveyn Посмотреть сообщение
C++
1
Sleep(50); // Бережем процессор от перегрева)
судя по этому комментарию мы следим за температурой и в случае перегрева что то делаем ( например подаем жидкий азот)
было бы что то типа
C
1
Sleep(50); // ждем 50 мСек, это позволяет разгрузить процессор, что уменьшает вероятность перегрева
я бы и слова не сказал
0
14.08.2018, 10:24

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
я и придрался к формулировке комментария
Там нарисован смайлик. Надеюсь, ТС правильно понимает что он хотел сделать, что сделал и что имел в виду в комментарии.

0
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
14.08.2018, 15:20
Возможно стоит сделать sleep между нажатиями W.
Тоже делал подобное для игры, помню, что ставил задержку между нажатиями клавиш, иначе вместо 5 раз нажатие было нажатие только 1 раз.
С помощью Qt делается проще.

Добавлено через 15 минут
Gaveyn, протестил вашу программу - код рабочий, 11 раз нажимается W. Возможно для игры стоит добавить задержки для эмуляции нажатия W
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2018, 15:20
Помогаю со студенческими работами здесь

Нажать клавишу
напишите код что бы програмно можно было нажать клавишу

Нажать на клавишу
Здравствуйте а можно с помощью bat нажать на клавишу цифру пять как будто я ее нажала на клавиатуре. Спасибо. Добавлено через 5...

Програмно нажать клавишу
подкиньте пожалуйста код , что бы по запуску программы...нажималась определенная клавиша (лучше в цикле)

Программно нажать клавишу
Здравствуйте! В общем такой вопрос, как программно нажать на клавишу или сочетание клавиш. Есть приложение для просмотра локальных html...

Программно нажать клавишу в консоли
Есть функция которая читает md5 хеш файла в консоли. class Program { static void Main(string args) { //Обработка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru