Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

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

 
Стесняюсь...   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
3-16054
Yuri I. Bouloui
2004-01-12 16:16
2004.02.06
TClientDataSet -> TDataSetProvider -> TIBDataSet. Получить ПК?


3-16182
Максим
2004-01-13 08:22
2004.02.06
Создание базы


1-16266
vl_chel
2004-01-17 15:00
2004.02.06
Список функций в DLL


1-16427
goliath
2004-01-22 10:52
2004.02.06
Иконки


14-16703
Piter
2004-01-18 01:33
2004.02.06
CreateToolhelp32Snapshot возвращает неверный дескриптор