![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| l0k1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Здраствуйте.
Пытаюсь отправить программно нажатие кнопки на клавиатуре в другое приложение, но почему-то ничего не получаеться, отправляю вот таким способом: SendMessage(Handle_, WM_KEYDOWN, VK_RETURN,0); приложение - чат, в котором по ентеру происходит отправка сообщения. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
наверное, нужно вначале выполнить поиск главного окна findWindow(nil,'заголовок чата'), а затем выполнить поиск дочернего окна
EnumChildWindows |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: нет Всего: 4 |
l0k1
Отжать кнопку тоже надо. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: нет Всего: 329 |
мне кажеться не надо |
|||
|
||||
| ФЫГ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 29.7.2005 Где: украйна Репутация: 1 Всего: 1 |
dsergey
другого способа нет. читай msdn |
|||
|
||||
| l0k1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Пасибо, последний способ помог, но появилась ещё одна трабла.
после SetForegroundWindow мы переключаемся в другое окно и посылаем клавиши, но следующий вызов SetForegroundWindow не даёт нужного эфекта, то есть даёт, но отчасти. Когда активно окно с моей программой, управление возвращаеться и оно вновь становиться активным, но как только я активизирую левое приложение(например тотал командер) это приложение просто теряет фокус, т.е. становиться неактивным. То есть получаеться последний SetForegroundWindow при левом приложение не работает. Я думал что это проблемы адресации в памяти и вывел все функции в отдельный dll, но это не помогло. Так-же я пробовал заменить getActiveWindow на GetFocus, а также SetForegroundWindow на SetActiveWindow и SetFocus, но это тоже не дало эфекта. Моё предположение в том что приложение не может получить хендл из вне, когда оно не активно, думка конечно дебильная, но больше просто ничего в голову не лезет... Возможно стоит написать HOOK на все изменения активности окон в системе, но имхо для той мелкой тулзы которую я пишу, это будет маразмом... ПОМОГИТЕ plzzz СОВЕТОМ каким образом востановить активность окна. З.Ы. Программа которую я пишу должна работать в бэкграунде, как и чат. То есть пользователь не должен замечать их работы, но я допускаю мелкие задержки(Например, при наборе текста в ворде, на время работы функции по нажатии ентера, система не успеет передать ворду нажатие клавиши). |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
AttachThreadInput
PS: Пример приводил. Это сообщение отредактировал(а) Girder - 16.8.2005, 15:11 -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| ФЫГ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 29.7.2005 Где: украйна Репутация: 1 Всего: 1 |
l0k1
tmp:=0; SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,null,@tmp,null); |
|||
|
||||
| l0k1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Извините, а что за ошибка: "Could not convert variant of type(NULL) into type(INT64)"
Использую функцию предложенную ФЫГом, так как AttachThreadInput немного непонял как использовать. пробовал tmp обьявить и как Variant и как Int64, не помогает... З.Ы. не подскажите хороший оффлайн справочник по WinApi на русском, у меня есть один, вот только ему уже 5 лет и функции которые описаны в этой теме автор умудрился не добавить... |
|||
|
||||
| ФЫГ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 29.7.2005 Где: украйна Репутация: 1 Всего: 1 |
ну попробуй так
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,@tmp,nil); [/quote] |
|||
|
||||
| l0k1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Всё равно не помогает, всмысле я программу скомпилировал, но фокус всё равно не возвращаеться, возвращаеться только моей программе(если она была активна)...
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |