2014-06-06 17 views
5

Mam dwie aplikacje, które muszę komunikować poprzez PostMessage (SendMessage jest wykluczone jako muszę mieć drugiego wniosku stanie wyjście do programu Excel podczas gdy miano.Delphi: Jak odebrać niestandardową wiadomość systemu Windows z PostMessage?

Dotychczas Zastosowanie 1 sprawia, że ​​wezwanie do Zastosowanie 2, upewniając się, że jest ona otwarta, a gdy to jest, App 1 ustawiony jest wyłączone.

gdy użytkownik jest wykończony aplikacja 2 muszę wysłać wiadomość powrotem do Applciation 1 do opuść go, aby odblokować.

Zarejestrowałem tego samego systemu Windows wiadomość w każdej aplikacji przy użyciu:

const 
    MyMessage = 'My-Message'; 

var 
    MyMessageID: cardinal; 

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

I w zgłoszeniu 2 można wysłać wiadomość do aplikacji za pomocą 1:

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

Co ja nie rozumiem jest sposób deklarowania obsługi wiadomości w aplikacji 1.

Jeśli korzystałem ze standardowej wiadomości systemu Windows, takiej jak WM_COPYDATA, zadeklarowałem procedurę

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

Ale to spada, ponieważ nie mogę zadeklarować odpowiednio wcześnie MyMessageID.

Może dlatego, że jest piątkowe popołudnie, ale czego mi brakuje?

Odpowiedz

6

Nie można użyć słowa kluczowego message, ponieważ stała komunikatu nie jest znana podczas kompilacji. Zamiast tego należy zastąpić WndProc:

Powiązane problemy