Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 6

Функция SendInput

27.10.2009, 16:50. Показов 6520. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста! Почему у меня Visual ругается на Функцию SendInput и используемые в ней структуры (INPUT и др.): undeclared identifier, хотя #include <windows.h> присуствует, и даже #include <winuser.h> добавлял? Совсем не могу понять. Чё только не делал...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2009, 16:50
Ответы с готовыми решениями:

SendInput
Вместо &quot;ТестСообщения&quot; выводится &quot;ТТТТТТТТТТТТТ&quot;. Подскажите, в чем ошибка? void SendKey(){ char ret; INPUT pInput; ...

SendInput (MouseMove) криво работает
Использую данный код: int SetInputPos(int x, int y) { int ScreenX = GetSystemMetrics( SM_CXSCREEN ); int ScreenY =...

Нажатие клавиш SendInput и раскладка клавиатуры
Клиент на сишарпе посылает серверу нажатую клавишу: private void Form1_KeyUp(object sender, KeyEventArgs e) { code =...

20
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
27.10.2009, 17:20
Цитата Сообщение от UMM Посмотреть сообщение
Чё только не делал
лучше напиши, что делал.
скорее всего, старая версия студии.
0
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 6
27.10.2009, 18:20  [ТС]
Я нашел в студии файл winurer.h. Там находится объявление этой функции и всех структур. Более того, Когда набираю название функции и открываю скобку, всплывает подсказка с параметрами функции, т.е. Вижуал её знает, а когда компилирую - выдает ошибку.
Версия студии: 6.0
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
27.10.2009, 19:40
а ты там строчки
C++
1
#if (_WIN32_WINNT > 0x0400)
не заметил, случайно?
по умолчанию, 6-ая студия создает код, запускаемый на версиях Винды от Вин95.
только вот в 95-ой такой функции, как SendInput еще не было.
посмотри в документации, что означают константы WINVER и _WIN32_WINNT.
в твоем случае, нужно в поле инклудов вписать
C++
1
2
#define _WIN32_WINNT 0x0500
//только для Винды 2000 и выше
0
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 6
27.10.2009, 19:50  [ТС]
Да, спасибо большое - всё получилось. Даже и не знал о таких ньюансах.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
22.03.2020, 21:39
Здравствуйте,

Подскажите пожалуйста, вот хочу просто для начала, чтобы выполнение кода просто перемещало курсор мыши в левый верхний угол:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    INPUT My_input[1];
 
       ///
    My_input[0].type = INPUT_MOUSE;
    My_input[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE ;
    My_input[0].mi.dx = 0;
    My_input[0].mi.dy = 0;
    My_input[0].mi.mouseData = 0;
    My_input[0].mi.time = 0;
      ///
 
    SendInput(1, My_input, sizeof(My_input));
После выполнения данного кода, я в праве ожидать, что курсор мыши должен переместится в левый верхний угол по "координатам" 0;0 ?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.03.2020, 10:12
Цитата Сообщение от Optimus11 Посмотреть сообщение
После выполнения данного кода, я в праве ожидать, что курсор мыши должен переместится в левый верхний угол по "координатам" 0;0 ?
Нет, не вправе. Воспользуйся SetCursorPos
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
23.03.2020, 11:55
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Нет, не вправе. Воспользуйся SetCursorPos
Но какой тогда результат выполнения функции SendInput будет ?
То есть, что эта функция делает с переданными в нее данными ?
У микрософта в описании к функции же написано:
C++
1
Синтезирует нажатия клавиш, движения мыши и нажатия кнопок.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
23.03.2020, 19:25
Я забыл добавить флаг MOUSEEVENTF_MOVE без которого не происходит само перемещение в указанный координаты.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
25.03.2020, 21:19
Подскажите пожалуйста, можно ли с помощью sendinput получить координаты курсора ?
Можно конечно использовать функцию GetCursorPos, но она выдает координаты в соответствии с установленным расширением, то есть координаты правого нижнего угла будут 1920:1080.
Тогда, как структура INPUT функции sendinput принимает другие координаты, то есть координаты правого нижнего угла будут 65535:65535.
Можно наверное конечно переводить одни координаты в другие, но что то не очень хочется. Может быть есть функция, которая возвращает координаты курсора в единицах, которые испорльзуются в функции sendinput?
0
Заблокирован
25.03.2020, 21:52
Optimus11, ты ведь игруху пытаешься обмануть, так?
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
25.03.2020, 22:31
Цитата Сообщение от Echolot Посмотреть сообщение
Optimus11, ты ведь игруху пытаешься обмануть, так?
Ни в коем случае, только статичный рабочий стол и пара другая рабочих ПО, для которых хочу попробовать "автоматизировать" часть работы.
0
Заблокирован
25.03.2020, 22:38
Optimus11, я также делал разные комбинации но остановился
на просто SetCursor GetCursor
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
29.03.2020, 11:07
Немного странно получается, в случае, если к ноутбуку подключен монитор, то в независимости от того, какой из мониторов в свойствах экрана установлен основной, координатам dx=0 и dy=0 функции sendinput, всегда соответствует верхний левый угол экрана ноутбука.

А вот в этом же случае для функции GetCursorPos, если:

- основной монитор установлен монитор ноутбука, то экранные координаты в пикселях верхнего левого угла монитора ноутбука будут логично соответствовать 0:0
-Но вот, если основной монитор в свойствах установить подключенный монитор, то то экранные координаты в пикселях верхнего левого угла монитора ноутбука - будут отрицательные.
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
29.03.2020, 11:24
Нужнo найти все имеющиеся мониторы и ставить позицию курсора в рамках выбранного…
EnumDisplayMonitors
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.03.2020, 11:37
Цитата Сообщение от Optimus11 Посмотреть сообщение
Немного странно получается, в случае, если к ноутбуку подключен монитор, то в независимости от того, какой из мониторов в свойствах экрана установлен основной, координатам dx=0 и dy=0 функции sendinput, всегда соответствует верхний левый угол экрана ноутбука.
Левый угол primary-монитора - то ноль. Остальные мониторы относительно него - которые слева, те отрицательные, справа положительные. Посмотри в настройках экрана, расположение своих мониторов
https://docs.microsoft.com/en-... ual-screen
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
19.04.2020, 20:09
Здравствуйте,

Подскажите пожалуйста, не совсем понимаю:
C++
1
2
3
4
5
UINT SendInput(
  UINT    cInputs,      //Кол-во структур INPUT
  LPINPUT pInputs,
  int     cbSize
);
Не совсем понимаю, как работает массив структур INPUT более одной структуры. То есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
INPUT My_input[2];  //Обьявляю массив структур INPUT
 
//Заполняю эти эту структуру под клик левой кнопкой мыши:
 
My_input[0].type = INPUT_MOUSE; 
My_input[0].mi.mouseData;  
My_input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_VIRTUALDESK; 
My_input[0].mi.time = 0;
 
My_input[1].type = INPUT_MOUSE; 
My_input[1].mi.mouseData;  
My_input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP | MOUSEEVENTF_VIRTUALDESK; 
My_input[1].mi.time = 0;
 
//Ну и после заполнения структуры вызываю саму функцию Sendinput:
 
SendInput(2, My_input, sizeof(My_input));
И я ожидаю, что функция Sendinput сэмулирует нажатие и отжатие левой кнопки мыши, но почему то этого не происходит.
Массив структур как то по другому работает ?

Добавлено через 49 минут
Сама функция SendInput возвращает 0, то есть ошибок нет, но эмуляции не происходит. Но если sendinput вызывать два раза, то есть вот так:
C++
1
2
3
4
5
6
7
8
9
10
INPUT My_input[1];  //Обьявляю массив из одного элемента INPUT
 
My_input[0].type = INPUT_MOUSE; 
My_input[0].mi.mouseData;  
My_input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_VIRTUALDESK; 
My_input[0].mi.time = 0;
 
    SendInput(1, My_input, sizeof(My_input));    
    My_input[0].mi.dwFlags = MOUSEEVENTF_LEFTUP | MOUSEEVENTF_VIRTUALDESK;    // MOUSEEVENTF_LEFTUP -отпускает левую кнопку 
    SendInput(1, My_input, sizeof(My_input));
То в этом случае все работает,получается левый клик.
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
19.04.2020, 20:51
A координаты мыши предустанавливали?
Пример из хабра
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
19.04.2020, 21:05
Цитата Сообщение от Alikberov Посмотреть сообщение
A координаты мыши предустанавливали?
Пример из хабра
Координаты не предустновливал, так как зачем ? Мне просто нужно сделать клик мыши, и он делается, но только если обьявить массив из одного элемента структуры INPUT, вызвать SendInput на нажатие кнопки, изменить параметр уже обльявленной структуры INPUT на отпускание кноки и опять вызвать SendInput. Но почему то это не рабоатет, если обьявить два элемента структуры INPUT.
0
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
19.04.2020, 22:30
Пo-видимому, тут ошибка - «My_input[…].mi.time = 0;»: Интервал нужно менять
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2020, 22:30
Помогаю со студенческими работами здесь

Как сэмулировать нажатие клавиш Alt+Space, используя функцию SendInput?
Друзья! МНе нужно на консоли получить меню. То есть нажал левую ALT, нажал пробел, отпустил пробел, отпустил левую ALT. Казалось бы, чего...

Функция SendInput
нужен пример написания этой функции Добавлено через 50 секунд нужен простой пример для любой кнопки ну например для &quot;1&quot;

SendInput();
Нужно сделать допустим при нажатие на &quot;TAB&quot; будет происходить не сколько нажатий. Все делается это для игры, не суть какую кнопку...

Ctrl в SendInput С++
После использования SendInput для инициализации нажатия Ctrl, система думает что Ctrl зажата, а мне так не подходит ) Как сделать, что бы...

Masm SendInput
Как организовать через функцию user32.dll SendInput() Клик мыши, а затем следующее нажатие уже на NumLock ? Добавлено через 30 минут...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru