Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имитация нажатий на кнопоки, Free Pascal 
:(
    Опции темы
Славик
Дата 22.2.2005, 20:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Привет.
Помогите пожалуйста разобраться с вопросом по Паскалю.
Я уже много чего переискал, но нигде ненахожу ответа.

Речь об имитации нажатия на кнопки клавиатуры.
Как симитировать нажатие на несколько кнопок клавиатуры ОДНОВРЕМЕННО?
Так как я новичок в программировании, мне нужен пример алгоритма, допустим
для одновременного нажатия на "abcd".
Без примера, я не обойдусь : ) Поскольку мало что понимаю...

Все это нужно для управления роликом флэш. Мне удобней будет его тестить
именно так.
Периодически, паскаль будет "нажимать" на разные сочитания кнопок, чтобы
запустить разные эпизоды ролика.

Работаю я на Free Pascal.

Еще вопрос
Нужно скрыть из вида на рабочем столе, работающий файл exe паскаля. Чтобы
был виден только флэш ролик.
Если это возможно, мне нужен пример алгоритма.


Спасибо за все заранее...

  Вверх
SoWa
Дата 23.2.2005, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Тебе лучше в Дельфи идти!
Из Паскаля, я не знаю как реализовать скрытие и работу с WinAPI(она-то тебе и нужна) smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Romtek
Дата 23.2.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Цитата(SoWa @ 23.2.2005, 05:27)
Тебе лучше в Дельфи идти!
Что за советы?
Можно тоже самое и в FPC сделать.
Кажется, придётся обрабатывать сообщения WM_ХХХ
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Славик
Дата 23.2.2005, 14:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Мне написали нижеописанное на другом форуме. Но мог бы кто нибудь написать мне пример алгоритма для одновременного нажатия(имитации) на "abcd"? А то я просто не знаю как пользоваться нижеописанной подсказкой. Обьяснить мне там(на форуме http://forum.pascal.net.ru) не хотят.

Тут ДВА возможных варианта передать или симитировать нажатие кнопок.

Цитата
1.

LRESULT SendMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

2.
The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.

WM_KEYDOWN
nVirtKey = (int) wParam; // virtual-key code
lKeyData = lParam; // key data

Parameters

nVirtKey

Value of wParam. Specifies the virtual-key code of the nonsystem key.

lKeyData

Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description
0-15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is always 0 for a WM_KEYDOWN message.

  Вверх
Snowy
Дата 24.2.2005, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Чтобы использовать эту подсказку, нужно сначала разобраться, куда ты хочешь нажимать клавиши. В смысле, кто будет получать это нажатие. Ведь ты хочешь нажать эти клавиши в какой-то чужой программе. Без знания WinAPI это будет слишком сложно. Нужно будет искать окно, посылать сообщения о нажатии каждой клавиши, потом сообщения об отпускании каждой клавиши.
Тут чистый WinAPI. Для начала тебе нужно как минимум справка по нему и знание английского.
Брось эту затею. Сам не справишься. А делать за тебя вряд ли кто-то будет.
Начни для начала с более простых вещей.
PM MAIL   Вверх
chaos
Дата 24.2.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



на вот посмотри:
http://www.sedinko.ru/delphi/doc7.php

Это сообщение отредактировал(а) chaos - 24.2.2005, 10:10
PM WWW   Вверх
Guest
Дата 24.2.2005, 15:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Snowy

Я всего навсего хочу симитировать нажатие кнопок на клавиатуре. Никуда ничего не передавая. Просто как будто бы я сам их нажимаю.

Все это нужно для управления роликом флэш.
Периодически, паскаль будет "нажимать" на разные сочитания кнопок, чтобы
запустить разные эпизоды ролика. В ролике флэш, будет просто указано - если такие то кнопки одновременно нажаты, то... он будет кое что делать.


chaos Спасибо. Попробую разобраться более детально. Но там вроде говорится о посылании каких то значений другой программе. А мне просто надо симитировать нажатие ничего никому не высылая.
Но посмотрю и это...





  Вверх
Славик
Дата 24.2.2005, 15:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Мой вопрос, может корректней бы звучал так:
Как эмулировать нажатия клавиш клавиатуры(!) из паскаля?

Ничего никому при этом не передавая.

Пользуюсь Free Pascal.


  Вверх
Snowy
Дата 24.2.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Это тебе не DOS. В виндах у нажатия клавиш должен быть получатель. Обычно это текущее активное окно. Вот нужному окну ты и должен послать сообщение о том, что клавиша нажата. Само окно не догадается. Иначе клавиши надимались бы во всех окнах, независимо от того, с каким мы работаем.
Добавлено @ 16:01
Просто нажитие клавиш - SetKeyboardState. Но клавиши тогда нажмутся в твоем окне. Твой ролик об этом даже не узнает.
Добавлено @ 16:02
И зарегестрируйся
PM MAIL   Вверх
Fedor
Дата 24.2.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Ребят, а может просто можно считывать из буфера клавиатуры? Сорри, не знаю, что происходит когда нажимаются одновременно четыре клавиши? Если они просто заносятся в буффер одновременно - на них можно readkey наслать.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Snowy
Дата 24.2.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Это же винда!!! В DOS'e пожалуйста. Только из буфера они и прочитаются поочереди.
Для винды засунуть 4 символа в буфер, то же самое, что послеть 4 нажатия и 4 отпускания клавиш. нажал-отжал, нажал-отжал, нажал-отжал, нажал-отжал.
Здесь же нужно послать сначала 4 нажатия, а потом четыре отжатия.
В любом случае нужно посылать.
PM MAIL   Вверх
Slavik
Дата 24.2.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.2.2005

Репутация: нет
Всего: нет




Цитата
И зарегестрируйся

Сделано ; )

В флэш я пишу скрипт в программе -
Код

Key.addListener(this);
this.onKeyDown = function() {
if (Key.isDown(65)&&Key.isDown(66)&&Key.isDown(67)) {
       gotoAndPlay(2);
   }

};

Нужно чтобы мне на флэш ничего не отсылалось, а всего лишь симитировалось нажатие на кнопки.
Ранее, я с одним человеком разрабатывали игру. Он на Дельфи имитировал нажатие на кнопки, а я вышеописанным образом ловил эти нажатия.
Работало : )
Но мне нужно такое реализовать самому в паскале. Пусть через DOS или как то еще. Мне пока все равно, главное чтобы это был язык Паскаля : ) И чтобы работало. : )

А вообще, спасибо вам за отклики, ... это уже не молчание, что хорошо.

Добавлено @ 18:24
Цитата
Нужно чтобы мне на флэш ничего не отсылалось, а всего лишь симитировалось нажатие на кнопки.

Но при этом, не исключаю чтобы паскаль имел адрес откуда запускается флэш на компе.
То есть, тот "получатель" о котором говорит Snowy
PM MAIL   Вверх
Snowy
Дата 25.2.2005, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(Slavik @ 24.2.2005, 18:16)
Key.addListener(this);

Ну сам подумай. Что ты делаешь в этой строке?
Здесь ты определяешь листенер, который будет слушать посылаемые ему события.
Не будет события - он не сработает.
Не будет события - он просто не узнает о факте нажатия клавиш.
Поэтому ему нужно сказать: "Произошло событие WM_KEYDOWN".
Чтобы послать клавиши твоей флэшке, нужно знать хотя бы часть заголовка окна программы, в которой она крутится.
PM MAIL   Вверх
Slavik
Дата 25.2.2005, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



Цитата
Здесь ты определяешь листенер, который будет слушать посылаемые ему события.

Я не спорю, а просто спрашиваю, не все ли равно я пальцем кнопку нажму или программа паскаля это сдеает за меня? Зачем точно указывать адрес? Если окно флэшки будет активным на данный момент.

Чтобы послать клавиши твоей флэшке, нужно знать хотя бы часть заголовка окна программы, в которой она крутится.
Да нет проблем. Мне все равно как. Допустим "game". Лишь бы уже работало... : ) А то уже почти неделю лажу по форумам, спрашиваю, никто примерного алгоритма дать неможет. Все для прожвинутых программистов расчитано.

То есть, я уже согласен на все о чем ты говоришь. Пусть будет точный адрес где она установлена, название и т.д. Лишь бы уже это научился делать как то... smile : )
Но пример мне нужен именно рабюочий... чтобы я мог его сам просмотреть у себя.
Если надо, могу ролик флэш для пробы прикрепить вам. После нажатия на "abc" он кое что проиграет.





PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.