Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
1

Как послать нажатие клавиши в другое окно программы?

20.09.2014, 16:29. Показов 8182. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как послать нажатие клавиши в другое окно программы(неактивное\активное -неважно) а еще что бы окно находило по айди а не по имени, а их может быть и не одно
С++ или на С# не принципиально - где по проще реализация_)

Добавлено через 1 час 29 минут
думаю подойдет
C++
1
postmessage()
апишное)))
но как послать именно по айди окна)(
да и пример бы использования
C++
1
postmessage()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2014, 16:29
Ответы с готовыми решениями:

Медленная реакция программы на нажатие клавиши в игре
Здравствуйте! В общем пишу небольшую игру где надо перемещаться по горизонтали главным героем. Игра...

как узнать нажатие клавиши было программным или от пользователя
Всем доброго времени суток. Собственно сабж. Как узнать нажал клавишу пользователь или программа,...

Отправить нажатие клавиши в другое окно
wnd:=GetCapture();//получаем хендл куда отправлять нажатие SendMessage(wnd, WM_KEYDOWN, VK_F1, 0);...

Как, используя sendkeys, послать нажатие клавиши Win?
Как с помощью sendkeys послать нажатие клавиши Win? Вопрос в том, что я не знаю кода клавиши Win,...

10
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
20.09.2014, 16:41 2
Не забывайте про поиск
C++ WinAPI - Как посылать окну нажатия клавиш?
C# - Нажатие клавиши в другом приложении
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
20.09.2014, 17:44  [ТС] 3
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Не забывайте про поиск
C++ WinAPI - Как посылать окну нажатия клавиш?
C# - Нажатие клавиши в другом приложении
как то там нету сообщения которое б дало пример с понятной документацией)), в теме с С++ вообще нету реализации использования метода, наброски кода это конечно хорошо, Но когда не знаешь API неочень прикольно,
вконце только увидел
C++
1
2
3
4
5
6
7
8
9
LPARAM lParam;
int ScanCode = MapVirtualKey(VK_F9, 0);
 
lParam = ScanCode << 16;
     lParam |= 1;
     PostMessage(hwnd, WM_KEYDOWN, VK_F9, lParam);
     lParam |= 1 << 30;
     lParam |= 1 << 31;
     PostMessage(hwnd, WM_KEYUP, VK_F9, lParam);
и то где пример обявление обьекта hwnd - посмотреть бы хоть с какими параметрамы обявляется и прочее(

а в сшарп теме вообще по отсиланию нажатия клавиши адресация на другой сайт. в котором даже подсветки синтаксиса кода нету *аж глаза режет ХД - надо будет по пытатся что-то от туда все таки выковырять если рабочее)
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.09.2014, 18:46 4
Цитата Сообщение от Lynatik001 Посмотреть сообщение
где пример обявление обьекта hwnd
Например, есть FindWindow
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
20.09.2014, 19:04  [ТС] 5
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Например, есть FindWindow
видел, оно вроде ищет только по имени окна? а по айди? процеса

Добавлено через 2 минуты
или еще чем либо, окон на пример с таким же названием окна\процесса будет 2+

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
#include <Windows.h>
 
int main()
{
int a=0x0000000;
HWND hwnd=(HWND)a;
SendMessage(hwnd,WM_CLOSE,0,0);
system("pause");
}
Добавлено через 2 минуты
То число что у тебя есть - 16ричное. Что бы присвоить его типу инт пишешь 0x "твое число"

После приводишь int к hwnd (HWND)"твоя переменная инт которой ты присвоил хендл"
спасибо kaliban с Как найти HWND нужного окна?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.09.2014, 19:11 6
Цитата Сообщение от Lynatik001 Посмотреть сообщение
а по айди? процеса
Процессу может принадлежать несколько окон, или их может не быть вовсе.
Так что тут нет простого способа определить окно по pid.
Как вариант: можно перебрать все окна с помощью EnumWindows, затем получить для каждого окна его pid с помощью GetWindowThreadProcessId и выбрать только то, у которого нужный тебе pid.
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
20.09.2014, 19:18  [ТС] 7
Знать бы еще как узнавать HWND как то в пределех своей программы, а то использовать каждый раз Spy++ как то не в прикол.
Хотелось бы что то на подобии как в UOPilot сделать. Где ид окна берется при наведении на окно курсора мышки, и нажатия клавиш

Добавлено через 3 минуты
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Процессу может принадлежать несколько окон, или их может не быть вовсе.
Так что тут нет простого способа определить окно по pid.
Как вариант: можно перебрать все окна с помощью EnumWindows, затем получить для каждого окна его pid с помощью GetWindowThreadProcessId и выбрать только то, у которого нужный тебе pid.
я делаю что то типа нубо бота и полу кликера. для игры Lineage 2 дак что мне надо вроде как основное окно.
Например в Spy++ сразу находит handle тот что надо
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.09.2014, 19:58 8
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Знать бы еще как узнавать HWND как то в пределех своей программы
Если используешь Windows Forms, то это HWND hwnd=(HWND)this.Handle.ToPointer();
Если просто Winapi, то hWnd возвращается при создании окна, да и фигурирует в callback-функциях.

Добавлено через 1 минуту
Цитата Сообщение от Lynatik001 Посмотреть сообщение
я делаю что то типа нубо бота и полу кликера
Может тогда использовать уже готовое решение? Некоторые кликеры обладают достаточно серьезным функционалом.

Добавлено через 2 минуты
Цитата Сообщение от Lynatik001 Посмотреть сообщение
для игры Lineage 2 дак что мне надо вроде как основное окно
Там используется DirectX, а там для работы с клавой и мышью скорее всего используется DirectInput, или что-то похожее. Так что с клавой и мышью игра скорее всего работает напрямую в обход Winapi, и тогда передавать в окно игры команды не получится.
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
21.09.2014, 16:38  [ТС] 9
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Там используется DirectX, а там для работы с клавой и мышью скорее всего используется DirectInput, или что-то похожее. Так что с клавой и мышью игра скорее всего работает напрямую в обход Winapi, и тогда передавать в окно игры команды не получится.
C++
1
PostMessage(hwnd, WM_KEYUP, button, 0);
уже передаю, правда сRepeat и Scancode другие когда руками и прогой пишу( вдруг спалят). А так все работает

Добавлено через 4 часа 57 минут
что-то с нажатием и стрелки вверх и вниз неоч выходит(персонаж должен ходить).
Он то ходит но с анимацией у его беда или типа того, всегда типа первого шага

Добавлено через 15 часов 29 минут
А как узнать HWND окна если их например несколько, и как в UOPilot Выбирать на какое окно будем вешать клацалку
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.09.2014, 01:49 10
Цитата Сообщение от Lynatik001 Посмотреть сообщение
А как узнать HWND окна если их например несколько
Зависит от того по какому критерию ты их разделяешь.
Цитата Сообщение от Lynatik001 Посмотреть сообщение
как в UOPilot
Это уже к C++ не относится, советую спрашивать на форуме разработчика, если таковой имеется.
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
22.09.2014, 11:04  [ТС] 11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это уже к C++ не относится, советую спрашивать на форуме разработчика, если таковой имеется.
Уже нашел как
C++
1
2
         hwnd = (GetCursorPos(&pt) ? WindowFromPoint(pt) : 0);
        break;
имелось ввиду по курсору)
0
22.09.2014, 11:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2014, 11:04
Помогаю со студенческими работами здесь

Как послать в веб-страницу нажатие клавиши TAB.
На форме много флажков (результат запроса PHP), хочу чтобы когда один флажок нажимался, фокус...

Как, используя sendkeys, послать нажатие клавиши Win?
Как с помощью sendkeys послать нажатие клавиши Win? Вопрос в том, что я не знаю кода клавиши Win,...

Послать нажатие клавиши процессу
Стоит такая задача: ...

Послать нажатие клавиши окну
Пишу прогу L2Injector, отправляю нажатие клавиши так PostMessage(HWND, WM_KEYDOWN, 'E', 0L); на...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru