Форум: "Потрепаться";
Текущий архив: 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