- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个组件,通过 WM_COPYDATA 在应用程序之间发送字符串消息。我想捕获 WM_COPYDATA,但这不起作用:
TMyMessage = class(TComponent)
private
{ Private declarations }
…
protected
{ Protected declarations }
…
procedure WMCopyData(var Msg : TMessage); message WM_COPYDATA;
…
end;
在Google上搜索了很多,找到了一些使用wndproc的引用。我尝试过,但它也不起作用。
TMyMessage = class(TComponent)
…
protected
{ Protected declarations }
…
procedure WMCopyData(var Msg : TMessage); message WM_COPYDATA;
procedure WndProc(var Msg: TMessage);
…
end;
…
procedure TMyMessage.WndProc(var Msg: TMessage);
begin
//inherited;
if Msg.Msg = WM_COPYDATA then
WMCopyData(Msg);
end;
请帮忙看看这是怎么回事?
最佳答案
到目前为止,您所拥有的一切都很好,但您需要首先安排将消息传递到您的组件。这需要一个窗口句柄。调用AllocateHWnd
并将其传递给组件的 WndProc
方法。它将返回一个窗口句柄,您应该在组件被销毁时销毁该窗口句柄。
constructor TMyMessage.Create(AOwner: TComponent);
begin
inhreited;
FHandle := AllocateHWnd(WndProc);
end;
destructor TMyMessage.Destroy;
begin
DeallocateHWnd(FHandle);
inherited;
end;
您可以让 TObject
为您执行此操作,而不是直接测试每条消息。这就是 Dispatch
方法是为了.向它传递一个 TMessage
记录,它会为您找到并调用相应的消息处理程序方法。如果没有这样的处理程序,它将调用 DefaultHandler
来代替。覆盖可以调用 DefWindowProc
。
procedure TMyMessage.WndProc(var Message);
begin
Dispatch(Message);
end;
procedure TMyMessage.DefaultHandler(var Message);
begin
TMessage(Message).Result := DefWindowProc(Self.Handle, TMessage(Message).Msg,
TMessage(Message).WParam, TMessage(Message).LParam);
end;
关于delphi - 从 Delphi 组件捕获 WM_COPYDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097782/
我正在尝试在 Delphi 2010 中的两个应用程序之间传递信息。 我正在使用过去成功使用过的代码的简化版本(简化是因为我不需要发件人知道发送已成功)我已将收到的发送归结为一对示例应用程序,其本质如
我尝试使用 WM_COPYDATA 将字符串从一个窗口发送到另一个窗口。我的接收窗口完美地接收了消息。除了我发送的字符串不完整。 这是我在发送应用程序中的代码: HWND wndsend = 0;
我必须在两个应用程序之间实现一个WM_COPYDATA IPC。我在互联网上有一些示例,但它们都只发送少于 255 个字符的字符串。 我想使用 WM_COPYDATA 将一个大字符串(超过 1k)发送
使用 WM_COPYDATA 将命令行参数传递到 Delphi XE 的另一个应用程序实例,如下所示: function DAppInstance.SendParamsToPrevInstance(A
如何将我的结构发送到其他应用程序并使用 WM_COPYDATA 消息接收它? 最佳答案 MS 在 Using Data Copy 解释了其中的大部分内容. 该示例中是否缺少任何内容? 关于c++ -
我正在尝试通过 WM_COPYDATA 消息实现进程间通信。 COPYDATASTRUCT 的 lpData 成员不能包含指针。我的问题是,char 数组与其他数组或 vector 有什么区别。 当我
第一次在这里发帖。 我用 borland c++ 构建了一个小应用程序,它由商业第三方应用程序通过 shell 命令执行。然后,第二个应用程序一直等到它从我的应用程序收到退出代码。我想要做的是通过发送
我正在尝试让 C# WPF 应用程序与另一个使用 WM_COPYDATA 以 C 编写的应用程序进行通信。 C 应用程序正在尝试发送一个结构,如下所示: typedef struct { in
我希望在进程之间发送文本。我发现了很多这样的例子,但没有一个我可以开始工作。这是我目前所拥有的: 对于发送部分: COPYDATASTRUCT CDS; CDS.dwData = 1; CDS.cbD
我正在尝试使用 WM_COPYDATA 将数据从一个应用程序发送到另一个应用程序。这两个应用程序都是控制台并且没有窗口。我可以很好地发送用户消息。当我尝试发送 WM_COPYDATA 并设置数据结构或
我想从 2 个 CONSOLE 应用程序(2 个没有表单的不同 PID!)发送/接收一个字符串。我看到我需要在类里面声明这个。是否可以在控制台应用程序中根本没有类的情况下执行此操作?如果可以,我该怎么
我正在尝试编写一个组件,通过 WM_COPYDATA 在应用程序之间发送字符串消息。我想捕获 WM_COPYDATA,但这不起作用: TMyMessage = class(TComponent) pr
我想发送一条记录,目前只有一个字符串,但我将添加更多变量。这是我第一次处理记录,所以这可能是一个愚蠢的问题。但是,为什么这有效: type TDataPipe = record Windo
我正在尝试使用 LabView 为我的系统执行数据采集,同时仍保持现有 C 程序正常运行。我希望通过使用 wm_copdata 命令并通过 dll 进行通信来实现这一点。 不幸的是,我发现的大多数执行
我正在尝试从 Python 读取 WM_COPYDATA 消息,一些应用程序(我正在尝试使用 Spotify)发送到 WindowsLiveMessenger 以更新“我正在收听的...”短语。 据我
目前我正在研究一个使用 WM_COPYDATA 将用户数据发送到其他进程的示例。我构造 COPYDATASTRUCT 结构来填充用户数据。并使用 SendMessage() 函数将数据发送到其他进程。
我已经花了几天(或更多)时间来尝试让它发挥作用。 手头的应用程序是 FTPRush,我知道有一个名为 rush_cmdline.exe 的命令行应用程序,它使用 SendMessage 发送请求到 F
我试图让 Delphi 应用程序通过 WM_COPYDATA 相互通信。我遇到的问题是发送方应用程序是用 Delphi 7 编写的,而接收方是用 Delphi 10.2 编写的。我将我的 Delphi
我正在使用 Visual Studio 2010 开发 4 个应用程序(使用互联网上已建立的示例):2 个在 C++ MFC 中(名为:SenderCpp 和 ReceiverCpp),2 个在 C#
如何创建将任何数据传递给不同程序的自定义 Windows 消息。 我在 GUI 程序和服务器程序之间进行消息传递。我的背景是 *nix 编程,但我有点迷失在 Windows 世界中。 目前这两个程序都
我是一名优秀的程序员,十分优秀!