Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


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

Доброго времени суток , у меня следующий вопрос:
Я отправляю определенному окну сообщение о нажатой клавише
SetForegroundWindow(FindWindow(nil, 'Имя окна'));
keybd_event(VK_F1, 0, 0, 0);
keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0)
всё нормально отправляет нажимает , но . . . программа которой отправляю нажатие клавиши как то узнает что нажатие происходит не человеком а програмно , то есть нажимает определенное количество раз, а потом не происходит не каких действий , программа нажимает 100% так как перещелкивал активное окно на браузер и там он вызывал помощь,
если наживаеть в ручьную клавишу то все в порядке , и не каких остоновок не происходит .
Как программа узнаёт что я жму не руками а программным путем?
ClMlD вне форума Ответить с цитированием
Старый 24.08.2011, 16:10   #2
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

может проблема во втором параметре? (bScan)
отследи сообщение посылаемые нужному окну программой spy++ и укажи такой же скан код в своей программе

Последний раз редактировалось fate; 24.08.2011 в 16:13.
fate вне форума Ответить с цитированием
Старый 24.08.2011, 16:19   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,455
По умолчанию

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

Как вариант попробуйте посылать нажатия при помощи SendMessage и PostMessage
Человек_Борща вне форума Ответить с цитированием
Старый 24.08.2011, 16:35   #4
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

fate , не могли бы поподробнее описать то что мне нужно зделать ,так как программа незнакома , и я ещю сам не пойму что , окно нужное нашол, а какой параметр брать хз там порядко много информации об данном окне.
Человек_Борща спасибо сейчас попробуем.
Так же заметил что после закрытия моей программы и повторного запуска заданая клавиша нажимаеца как ни в чем небывало, так же если в ручьную зажать данную клавишу делает действие определенное количество раз и останавливаеца точно так же как и в посылке клавиши программным путем , попробывал поставить между нажатие и отпусканием клавиши sleep(1000); не помогло
ClMlD вне форума Ответить с цитированием
Старый 24.08.2011, 16:52   #5
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

скачиваешь программу spy++ (если не найдешь стучи в аську дам)
в ней ctrl+M, finder tols перетаскиваем на нужное окно, переходим на вкладку messages, ставим чекбокс напротив keyboard. Потом жми на клаве F1 (или что там тебе нужно) и в spy++ будут отображаться посылаемые сообщения там же будет виден скан код.

P.S.
описывал все для microsoft spy++ v. 6.00.8168
fate вне форума Ответить с цитированием
Старый 24.08.2011, 17:11   #6
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

fate , спасибо большое обЪяснил как ребенку .
Как я понял идет обычная отправка сообщения о нажатии, не каких примудростей не видно или я ошибаюсь ?
<00001> 00230644 P WM_KEYDOWN nVirtKey:VK_F1 cRepeat:1 ScanCode:3B fExtended:0 fAltDown:0 fRepeat:0 fUp:0

<00002> 00230644 P WM KEYUP nVirtKey:Key:VK F1 cRepeat:1 ScanCode:3B fExtended:0 fAltDown:0 fRepeat:1 fUp:1

И если есть FAQ по данной программе на русском имеется ? можно сылку , а то чувствую пригодится она мне ещё , полезная штука .. .
ClMlD вне форума Ответить с цитированием
Старый 24.08.2011, 17:19   #7
Larboss
Недо
Участник клуба
 
Аватар для Larboss
 
Регистрация: 10.08.2011
Сообщений: 1,392
По умолчанию

Автор темы, а ты пробовал ставить задержку между нажатием и отпусканием клавиши? "Эта программа" наверняка игра =)
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 24.08.2011, 17:25   #8
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

ClMlD сначала отлови сообщение посылаемые окну при нажатии клавиш на клаве, потом при работе твоей программы и сравни их
fate вне форума Ответить с цитированием
Старый 24.08.2011, 17:28   #9
ClMlD
Форумчанин
 
Аватар для ClMlD
 
Регистрация: 09.07.2011
Сообщений: 185
По умолчанию

А вот такое сообщение идет когда событие нажатия идет от программы и не в ручьном нажатии:
<00001> 00230644 P WM_KEYDOWN nVirtKey:VK_F1 cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

<00002> 00230644 P WM KEYUP nVirtKey:Key:VK F1 cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
Изминилось только ScanCode ,
fate будь добр поскажи к кокому значению относится ScanCode куда нужно подставить данное значение в моей функции keybd_event?

Larboss Пробывал будь внимательнее , и нет это не игра

Цитата:
Сообщение от ClMlD Посмотреть сообщение
fate , не могли бы поподробнее описать то что мне нужно зделать ,так как программа незнакома , и я ещю сам не пойму что , окно нужное нашол, а какой параметр брать хз там порядко много информации об данном окне.
Человек_Борща спасибо сейчас попробуем.
Так же заметил что после закрытия моей программы и повторного запуска заданая клавиша нажимаеца как ни в чем небывало, так же если в ручьную зажать данную клавишу делает действие определенное количество раз и останавливаеца точно так же как и в посылке клавиши программным путем , попробывал поставить между нажатие и отпусканием клавиши sleep(1000); не помогло

Последний раз редактировалось Stilet; 24.08.2011 в 17:49.
ClMlD вне форума Ответить с цитированием
Старый 24.08.2011, 17:58   #10
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
Изминилось только ScanCode
ну это естественно т.к. ты же 0 передаешь.
Цитата:
куда нужно подставить данное значение в моей функции keybd_event?
второй параметр
fate вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реакция на нажатие клавиши. Vaigard Общие вопросы Delphi 4 30.12.2010 18:39
Нажатие клавиши... Basketman Общие вопросы Delphi 1 11.02.2010 09:35
Долгое нажатие клавиши в KeyDown как одно нажатие marina15056 Общие вопросы Delphi 7 15.08.2009 23:22
Нажатие клавиши (Delphi) VadEr Помощь студентам 3 08.06.2009 16:00
Нажатие клавиши format Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 14:25


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS