Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Пачеко   Найти похожие ветки 

 
Стесняюсь...   (2004-01-02 00:57) [0]

Понимаю что 1 января но...

Читаю сейчас D5 Руководство разробатчика и вот возник вопрос: Как я понял программы общаются с помощью сообщений, правильно? Т.е. при клике на кнопке генерируется мессадж и посылается окну программы. Так вот сам вопрос, который не дает покоя: если получить хэндл окна и перехватывать мессаджы, сохранять (как-нить) и посылать дальше, а потом из списка сохранненых выбрать нужные и посылать их еще раз. Реально ли это?, или это я перепил и не то прочитал или додумал? %)


 
jack128   (2004-01-02 01:07) [1]

Вполне реально. Для этого нужно поставить хук(hook). Что это такое - сможешь сам найти..


 
Rouse_   (2004-01-02 01:46) [2]

> Реально ли это?,
Да...
> или это я перепил и не то прочитал или додумал?
Тоже да...


 
Он же...   (2004-01-02 01:53) [3]

Пасибо :) И вопрос: а как можно сохранять эти мессаджи? Как-нить вроде MessageToStr()? - шутка, но смысл понятен :)


 
Nick Denry   (2004-01-02 01:57) [4]

мессага - 32 битное значение кажется


 
Nick Denry   (2004-01-02 01:57) [5]

хотя не все


 
Опять я...   (2004-01-02 04:11) [6]

А мож пример у кого есть? :) Вери симпл...


 
DiamondShark   (2004-01-02 10:09) [7]

Вообще-то, не так всё просто.
Многие сообщения имеют параметры (поля WParam, LParam). Часто параметры представляют собой указатели на структуры. Структуры самые разные, время жизни структур -- до возврата из оконной процедуры.
Короче, кода поучится много.


 
uw   (2004-01-02 10:24) [8]

Для начала можно так:

Пусть у тебя есть тип

TChanMsg = record
Msg: Cardinal;
CommutChan: Integer;
BusyChan: Integer;
end;


и ты откуда-то шлешь сообщение

PostMessage(FMainWinHandle, WM_CHAN, CommutChan, BusyChan);

Здесь CommutChan и BusyChan – переменные Integer. Тогда метод

procedure WMCHAN(var Msg : TChanMsg); message WM_CHAN;

обработает твое сообщение, если этот метод пренадлежит форме с хэндлом FMainWinHandle. При этом работаешь и с известной записью типа TChanMsg.

Если ты обрабатываешь сообщение, посланное системой, то работаешь с соответствующим типом, структуру которого находишь в модуле Messages, например,

TWMKey = packed record
Msg: Cardinal;
CharCode: Word;
Unused: Word;
KeyData: Longint;
Result: Longint;
end;


 
jack128   (2004-01-02 14:15) [9]


> TChanMsg = record
> Msg: Cardinal;
> CommutChan: Integer;
> BusyChan: Integer;
Result: integer;
> end;


> procedure WMCHAN(var Msg : TChanMsg); message WM_CHAN;

Советую почитать о требованиях с структурам сообщений в Delphi вообще и наследниках TWinControl в часности...


 
nikkie   (2004-01-02 14:21) [10]

ты это... по-русски объясни чего хочешь сделать-то...

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

вообще не очень понятно, зачем вообще все сообщения ловить? кроме того, что могут передаваться структуры (см. [7] DiamondShark), некоторые сообщения могут иметь смысл только в некотором контексте. например, для WM_PAINT должен быть установлен update region, clipboard-сообщения (скажем, WM_PASTE, WM_DRAWCLIPBOARD) подразумевают, что в clipboard есть какие-то данные, можно придумать еще десяток примеров - WM_SETTINGCHANGE, WM_STYLECHANGED и т.п.


 
Я же...   (2004-01-02 16:05) [11]


> ты это... по-русски объясни чего хочешь сделать-то...

Банально все :) Есть игра (с консолью, вроде как Counter-Strike, Doom, или любая другая). Пользователь пишет в консоль команду, и я хочу перехвать мессадж, возникаемый после ENTER, сохранить его и потом, как бы, эмулировать ввод пользователем этой команды. Реально?


 
Rouse_   (2004-01-02 16:13) [12]

> [11] Я же... (02.01.04 16:05)
В мире нет ничего нереального... только в той-же консоли делается все по другому...
Пример привести не могу, инфа на работе...


 
Я опять...   (2004-01-02 16:20) [13]

А если, когда на работу выйдете, могли бы Вы присальть инфу мне на мыло (gimer@nm.ru)? Плиииииииз :)


 
Nick Denry   (2004-01-02 16:23) [14]

Да...........


 
Rouse_   (2004-01-02 16:49) [15]

Могли бы... отчего ж не мочь то ;)


 
nikkie   (2004-01-02 17:34) [16]

консоль в игре это как бы и не консоль вовсе? извини, но в win консолью называется вполне конкретная вещь, поэтому подозреваю, что [12] Rouse_ понял тебя, вероятно, не так... пока не научишься нормально изъясняться, от форума мало толку будет.

тебе просто ввести текст и нажать enter надо? keybd_event посмотри.


 
:)   (2004-01-15 13:44) [17]

Rouse_ ©, а Вы на работу уже вышли? :)


 
Игорь Шевченко   (2004-01-15 13:55) [18]

Реально. С помощью хуков (же) WH_JOURNAL_RECORD, WH_JOURNAL_PLAYBACK



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
14-16718
Igorek
2004-01-16 17:55
2004.02.06
Гибридные мобильные телефоны


8-16537
Urvin
2003-10-05 02:25
2004.02.06
Высокий/низкий звук из одного


8-16518
Дмитрий
2003-10-04 00:48
2004.02.06
Проигрывание файлов формата Ogg Vorbis (*.ogg)


9-16028
greenrul
2003-07-21 23:06
2004.02.06
Волновой алгоритм поиска пути -


8-16523
Женя
2003-10-01 05:47
2004.02.06
Изображение с веб.камеры.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский