Delphi: как получить настраиваемое сообщение Windows из PostMessage?

У меня есть два приложения, с которыми мне нужно общаться через PostMessage (SendMessage исключен, так как мне нужно, чтобы второе приложение могло выводить данные в Excel во время вызова.

Пока что Приложение 1 обращается к Приложению 2, чтобы убедиться, что оно открыто, и когда оно открыто, Приложение 1 отключено.

Когда пользователь завершит работу с приложением 2, мне нужно отправить сообщение обратно в приложение 1, чтобы оно разблокировалось.

Я зарегистрировал одно и то же сообщение Windows в каждом приложении, используя:

const
  MyMessage = 'My-Message';

var
  MyMessageID: cardinal;

procedure TMF.FormCreate(Sender: TObject);
begin
  MyMessageID := RegisterWindowMessage(MyMessage);
end;

А в приложении 2 я могу отправить сообщение в приложение 1, используя:

targetHandle := FindWindow(Pchar('TMF'), Pchar('Send Test'));
...
if PostMessage(targetHandle, (MyMessageID), 0, 0) then
...

Я не понимаю, как я объявляю обработчик сообщения в приложении 1.

Если бы я использовал стандартное сообщение Windows, такое как WM_COPYDATA, я бы объявил процедуру

procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;

Но это терпит неудачу, потому что я не могу объявить MyMessageID достаточно рано.

Возможно, это потому, что сегодня пятница, но что мне не хватает?


person Dan Kelly    schedule 06.06.2014    source источник


Ответы (1)


Вы не можете использовать ключевое слово message, потому что константа сообщения неизвестна во время компиляции. Вместо этого вам нужно переопределить WndProc:

procedure WndProc(var Message: TMessage); override;
....
procedure TMF.WndProc(var Message: TMessage);
begin
  inherited;
  if Message.Msg = MyMessageID then begin 
    ....
  end;
end;
person David Heffernan    schedule 06.06.2014