Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2

Эмуляция нажатия клавиатуры в ДР окне зная его хендл, помоги разобраться

15.05.2012, 22:07. Показов 3468. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вообщем есть окно состоит оно из поля ввода и двух кнопок... как сделать так чтобы можно было ввести текст в это поле для ввода из моей программы???
хендл определяю правильно, код на посылку ему Esc работает и окошко закрывается...
C++
1
PostMessage(H, WM_KEYDOWN, VK_ESCAPE, 0);
как теперь напечатать в этом окне текст???

вот как это окно выглядит...
Миниатюры
Эмуляция нажатия клавиатуры в ДР окне зная его хендл, помоги разобраться  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2012, 22:07
Ответы с готовыми решениями:

Обновить окно IE, зная его хендл
Народ, хилп плиз... Как обновить окно IE, знаяего хендл. Сам принцип я знаю, но надо семпл - неполучается сделать 8( Очень надо,...

Получить ID процесса, зная его хендл.
Дано: Хэндл процесса - как результат выполнения ShellExecuteEx. Нужно: Получить ID процесса. Доп. требования: ...

Удалить хендл, зная его имя
например есть handle EVENT с названием "MYHANDLE" , как закрыть handle зная только его имя и тип?

27
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
17.05.2012, 01:18  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Avazart Посмотреть сообщение
Но тогда вы не знали что окно меняет тип
а можно поподробней?! что значит меняет тип? меняется его хендл???
C++
1
SetWindowText(h,"Новый текст");
единственный параметр который она принимает эт хендл родительский или потомка... а он не меняется вроде или это не так? он присваивается при создании окна...

я пробовал посылать данную команду в родительский хендл, итог - меняется заголовок окна...
пробовывал посылать в дочерний класс Edit, итог - ничего не происходит
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2012, 01:24
Ну с Edit на TAltEdit вы же сами писали
на работе спай определил как TAltEdit , код подправил, но проблема с регистром осталась, как-то глючно выводит на работе, а дома все гуд только в проводнике...
Хотя я не понимаю как такое может быть...
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
17.05.2012, 01:46  [ТС]
Ну с Edit на TAltEdit вы же сами писали
на домашнем постоянно Edit а на рабочем TAltEdit
Хотя я не понимаю как такое может быть...
да, это так... сам не понимаю как эт... но сам факт... я так понял эт зависит от компа на котором запускаю прогу... но если она запущена то класс не меняет... он постоянно остается одинаковым даже если перезапускать на одном и том же компе все параметры остаются одинаковыми

SetWindowText я пытался использовать уже когда это узнал... все равно не получается... может там как-то запрограммировано на нажатие клавиш чтоб только они выводились...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2012, 02:07
Ну насколько я знаю keybd_event тоже с обычными окнами нормально работает главное фокус передать полю ввода
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.05.2012, 10:30
Цитата Сообщение от Avazart Посмотреть сообщение
Хотя я не понимаю как такое может быть...
Цитата Сообщение от QWIPQ Посмотреть сообщение
да, это так... сам не понимаю как эт... но сам факт... я так понял эт зависит от компа на котором запускаю прогу...
Edit'ы целиком обеспечиваются средствами операционки, так же, как и Memo; поэтому у них, к примеру, нет канвы. Если версии системных библиотек отличаются на операционках, то и реализации Edit'ов могут отличаться - в том числе и имя класса.
2
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
17.05.2012, 14:06  [ТС]
решил не париться и реализовать поиск родительского класса и дочернего в автомате:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HWND NextWindowElement(HWND h, LPCTSTR fasdClass, LPCTSTR fasdWindow, int level)
{
    HWND h2 = NULL;
    for (int i = 0; i < level; i++)
    {
        h2 = FindWindowEx(h, NULL, fasdClass, fasdWindow);
    }
    return h2;
}
BOOL EnumWindowsProc(HWND hWnd, long lParam)//перечисляем дочерние классы
{
  char NameOfClass[255];
  GetClassName(hWnd, NameOfClass, 254);  // class
  Class->Add(AnsiString(NameOfClass));
  return TRUE;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        for(int gk=0; gk<Class->Count; gk++)
        {
            if(Class->Strings[gk].Pos("Edit"))
            {
                S1=Class->Strings[gk];
                wnd = NextWindowElement(H, S1.t_str(), NULL, 1);
                for(int i=1;i<=S1.Length();i++)
                    {
                        S=S1[i];
                        keybd_event(VK_SHIFT, NULL, KEYEVENTF_EXTENDEDKEY | 0, 0);
                        PostMessage(wnd, WM_KEYDOWN, S, 0);
                        keybd_event(VK_SHIFT,NULL,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
                    }
                break;
            }
            }
второй кусок пока что прототип вывода в разном регистре над ним еще думать буду...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2012, 17:56
Ну поидее имя окна не должно менятся, поэтому можно искать по нему прежним способом.

Добавлено через 24 минуты
Смотрю на ваш код и задаюсь вопросами
C++
1
2
3
4
S=S1[i];
keybd_event(VK_SHIFT, NULL, KEYEVENTF_EXTENDEDKEY | 0, 0);
PostMessage(wnd, WM_KEYDOWN, S, 0);
keybd_event(VK_SHIFT,NULL,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
Почему не
C++
1
2
3
4
5
6
SetForegroundWindow(hp);
S=S1[i];
keybd_event(VK_SHIFT, NULL, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(S, NULL, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(S,NULL,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT,NULL,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
Покрайней мере наверное не стоит посылать синхронные сообщения ф-цией PostMessage(),
так как они могут стоят в очереди пока keybd_event уже отжимает Shift
(Предпологаю что keybd_event посылает асинхр. сообщение по тому как не нашел информации о ней)
Как вариант попробывать заменить PostMessage на SendMessage.
Еще возможно стоит ставить зажержку Sleep-пом, навсякий случай.
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
17.05.2012, 22:38  [ТС]
Ну поидее имя окна не должно менятся, поэтому можно искать по нему прежним способом.
Ну родительское окно я так и ищу, просто не весь код выложил а только тот где заминки были...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2012, 22:38

Отправка текста приложению, зная его хендл
У меня есть хэндл стороннего приложения и мне нужно отправить в него некий текст или комбинацию клавиш. Если кто-то знает как это...

Найти хендл чужого окна, зная его атом
как можно найти хендл чужого окна по атому??

Как получить адрес текущего окна зная его Хендл
Добрый день! У меня есть приложение на ВинФорм, и возникла необходимость использовать в этом приложении путь активного окна в данный...

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

Эмуляция нажатия мыши в свёрнутом окне
Всем доброго времения суток. Задача следующая, необходимо сэмулировать нажитие мыши в свёрнутом окне. Обычным способом вроде бы это...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru