gpt4 book ai didi

Delphi:如何从 PostMessage 接收自定义 Windows 消息?

转载 作者:行者123 更新时间:2023-12-03 15:10:12 25 4
gpt4 key购买 nike

我有两个应用程序需要通过 PostMessage 进行通信(排除了 SendMessage,因为我需要让第二个应用程序在被调用时能够输出到 Excel。

到目前为止,应用程序 1 已调用应用程序 2,确保其处于打开状态,当打开时,应用程序 1 将被设置为禁用。

当用户完成应用程序 2 操作后,我需要向 应用程序 1 发送消息 返回以允许其解锁。 p>

我已使用以下方法在每个应用程序中注册了相同的 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

也许是因为现在是星期五下午,但我错过了什么?

最佳答案

您不能使用 message 关键字,因为消息常量在编译时未知。相反,您必须重写 WndProc:

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

关于Delphi:如何从 PostMessage 接收自定义 Windows 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com