Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 08:16   #1
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию Delphi - asm Нажатие клавиши

Всем привет , помогите с кодм разобраться что то не как не могу
Код:
procedure EmulateKey(Wnd: HWND; VKey: Integer);
asm
   push 0
   push edx
   push 0101H //WM_KEYUP
   push eax
   push 0
   push edx
   push 0100H //WM_KEYDOWN
   push eax
   call PostMessage
   call PostMessage
end;

// Пример использования:
EmulateKey(Edit1.Handle, VK_RETURN);
Что то тестил тестил не как не робит как я понял в едит нужно вписать заголовок окна и вызвать функцию ? , кто шарит в асм подскажите пж
ClMlD вне форума Ответить с цитированием
Старый 09.12.2012, 08:52   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

первый параметр это хендл окна которому посылаем, второй скан код клавиши.
по сути асм код равен
Код:
postmessage(Wnd,WM_KEYDOWN,key,0);
postmessage(wnd,wm_keyup,key,0);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2012, 09:10   #3
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

Посылаю окну SendMessage или PostMessage не то не другое несрабатывает хендл точно верный проверяю перед отправвкой есть другие функции для отправки клавиши в неактивное окно?

Ассемблерный код тоже что то не каких действий не делает чеш за беда

Ну хоть ты лопни ничего не работает hwnd уже отдельно находил программой вставлял прямо в код пробовал вставлять на таймер и делать окно активным всеровно ничего не работает помогите пожалуйста какие ещё функции есть для отправки нажатия

Заметил что экранная клавиатура успешно отправляет нажатие кнопки когда работает одна и когда работает с моей программой а моя программа не как не работает похоже что то не так с HWND хоть и находит его

Последний раз редактировалось Stilet; 09.12.2012 в 11:29.
ClMlD вне форума Ответить с цитированием
Старый 10.12.2012, 07:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

посмотрите через Spy++ или аналоги, что получает ваше окно в параметрах сообщений от системы и от вас.
да и в эдите обычно энтер не отображается.

вообще идея эмулировать в неактиное окно не ахти, окно легко может это пресечь.

экранная клава использует другие функции, и только для активных окон.

да и честно говоря тема обсосанная уже тысячи раз...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2012, 07:45   #5
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

А как отправить нажатие активному я использую SetActiveWindow(h); а нотепад не реагирует
ClMlD вне форума Ответить с цитированием
Старый 10.12.2012, 07:49   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит не тот хендл видимо.

для строго активного есть SendInput.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2012, 07:50   #7
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

кричит видит
Код:
 h := FindWindow(nil, 'Безымянный - Notepad2'); //узнаем хендл
 if h <> 0 then showmessage('ok');
ClMlD вне форума Ответить с цитированием
Старый 10.12.2012, 07:54   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ввод идет не в это окно, а в Edit внутри.
в комплекте с Делфи обычно идет WinSight, изучите структуру формы интересующего приложения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2012, 08:02   #9
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

нет вы не поняли я не вводил ничего а просто пробовал сделать его активным чтобы убедится что SetActiveWindow работает.
Может я вообще что то не то горожу, мне нужно:
Так как не могу отправить в неактивное окно сделать окно активным нажать кнопку и вернуть фокус работающему до этого окну
ClMlD вне форума Ответить с цитированием
Старый 10.12.2012, 08:04   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы описание функции не читали как вижу.

вам нужна SetForegroundWindow.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нажатие клавиши ClMlD Общие вопросы Delphi 45 27.01.2013 15:17
delphi как отследить нажатие клавиши в другом приложении gufon Общие вопросы Delphi 6 29.06.2011 22:46
[WinApi, Delphi] Как перехватить локальное нажатие клавиши в Edit? Moriarty Win Api 4 19.03.2010 16:29
Долгое нажатие клавиши в KeyDown как одно нажатие marina15056 Общие вопросы Delphi 7 16.08.2009 00:22
Нажатие клавиши (Delphi) VadEr Помощь студентам 3 08.06.2009 17:00