问题标签 [wm-copydata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1544 浏览

c++ - WM_COPYDATA 无法正确传递我的字符串

我尝试使用 WM_COPYDATA 将字符串从一个窗口发送到另一个窗口。消息被我的接收窗口完美接收。除了我发送的字符串没有保持完整。

这是我在发送应用程序中的代码:

这是接收应用程序中的代码:

现在发生的是被调用的消息框输出中文字母。

我的猜测是我没有正确转换它,或者我实际上并没有发送字符串,而只是发送了指向它的指针,这在接收者的窗口中提供了完全不同的数据。我不知道如何解决它。

0 投票
1 回答
1351 浏览

delphi - delphi 通过 wm_copydata 将运行参数传递给其他实例在 Delphi XE2 中给出错误结果

此代码曾经与 Delphi 5 一起工作,但与 delphi XE2 并没有按预期工作。使用 wm_copydata 传递的字符串将被剪切。

在主窗体中,我有:

0 投票
2 回答
1500 浏览

multithreading - Delphi - 线程中的消息泵未接收 WM_COPYDATA 消息

我正在尝试(在 D7 中)设置带有消息泵的线程,最终我想将其移植到 DLL 中。

这是我的代码的相关/重要部分:

创建线程后,我使用 FindWindow 找到它的窗口句柄,并且工作正常。

如果我PostMessage它是我的用户定义的 WM_Action1 消息,它由 GetMessage() 接收,并被线程执行中的 case 语句捕获,并且工作正常。

如果我使用可以正常工作的 SendStringViaWMCopyData() 例程向自己(即我的主机表单)发送 WM_CopyData 消息。

但是:如果我向我的线程发送 WM_CopyData 消息,则 Execute 中的 GetMessage 和 case 语句永远不会看到它,并且 SendStringViaWMCopyData 中的 SendMessage 返回 0。

所以,我的问题是,为什么 .Execute 中的 GetMessage 没有收到 WM_CopyData 消息?我有一种不舒服的感觉,我错过了一些东西......

0 投票
0 回答
439 浏览

c# - 为什么 dwData = new IntPtr(0) 可以在 WM_COPYDATA 中工作(c#visual studio 2015)

当我设置 COPYDATASTRUCT 时,我设置了 {

} ,发送者将成功发送消息给接收者。但是,当我尝试 {

} ,它不会工作。谁能向我解释一下 dwData 到底在做什么?谢谢!

(PS我是一个新手软件工程师,有一颗真正热爱学习的心,所以对我的评分要温柔......请......)

这是我在 C# 中的发件人源代码:

0 投票
0 回答
940 浏览

c# - 如何使用 FindWindowEx 在 C# 中查找仅消息窗口?

我想我已经用中文和英文搜索了这个星球上所有相关的主题,但找不到解决方案。

我创建了一个仅消息窗口来接收和处理来自 WM_COPYDATA 的数据,但我在发送端找不到窗口,下面是演示(C# 的 WPF):

收到:

发送:

发送中的 BtnSend_Click 方法,在这里找不到正确的窗口句柄,这个托盘中的人可以帮忙吗?

PS:我应该先描述一下我的要求:我想用C#创建一个windows服务,它是接收器并处理来自WM_COPYDATA的数据,所以我认为只有消息窗口是必要的,因为windows服务中没有窗口。

所以在 Sender 中,我首先需要找到这个只有消息的窗口才能将窗口句柄传递给 SendMessage,这就是重点。

多谢你们

0 投票
0 回答
67 浏览

c# - 将通过 WM_COPYDATA 接收的 C 结构编组到 C# 结构中时退出过程

这是我的问题。我正在尝试将 C 结构编组为 C# 结构。C 结构通过 WM_COPYDATA 消息从 C 应用程序发送到 C# 应用程序。发送和确认消息不是问题,并且工作得很好。

我在调试中运行 C 应用程序,将另一个调试器附加到 C# 应用程序并发送消息。它被正确接收和识别,但是当我尝试编组数据时, Marshal.PtrToStructure 函数似乎在执行其余部分之前退出了 switch 语句(参见代码中的标记行)。

因此不执行该过程manageComplexMessage并且数据保持原始且不可用。

这是我在 C# 中使用的 CopyDataStruct:

这是我在 C# 中用于存储通过 WM_COPYDATA 发送的数据的结构:

处理 WM_COPYDATA 消息的方法:

我在 C 中使用的结构将数据发送到我的 C# 应用程序:

最后,发送消息的过程:

我在编组字符串数组时怀疑有问题,但找不到问题。

谢谢大家的帮助!我希望有人能告诉我出了什么问题或指出我正确的方向!

编辑:经过更多测试,结构的整数部分和双精度部分工作得很好。另外,如果我发送一个字符串,它也可以工作。只有当我尝试发送一个字符串数组时它才会崩溃。然后问题出在我的 MarshalAs 字符串数组语句中,但我仍然不知道如何正确编写。

0 投票
2 回答
1108 浏览

delphi - 如何接收消息(WM_COPYDATA)?

我正在向有很多表单的应用程序发送消息 WM_COPYDATA,但我无法接收它。具有一种形式的简单应用程序可以正常工作。

我有这个主要形式的代码。未收到消息

我检查了应用程序和主窗体句柄。所以句柄看起来像:

我在这里读到(德尔福:什么是Application.Handle?)在 Don 的回答中,发送到应用程序句柄的消息被重定向到主窗体,但在我的情况下它没有发生。如何接收消息?为什么消息不重定向到主窗体?

在 Delphi XE8、Windows 10 下测试

0 投票
0 回答
518 浏览

c++ - 如何为 COPYDATASTRUCT 定义 lParam?

所以我有点遵循这个:

https://msdn.microsoft.com/en-us/library/ms649009(v=vs.85).aspx

和这个:

使用 WM_COPYDATA 在进程之间发送数据

用于在 openframeworks 应用程序和虚幻引擎 4 之间发送数据。现在一切似乎都很好,除了我似乎无法找到为什么我收到 lParam 未定义的错误。这可能很简单,但我找不到如何去做。

因此,在虚幻引擎 4 中,我有一个演员每 10 秒发送一条消息(出于测试目的):

有些代码仍然有点粗糙,但我只是想让它先工作。

我还创建了用于在 openframeworks 中接收消息的代码。我不完全确定如何执行此操作,因此我将其添加到我的 ofApp.cpp 的更新功能中

所以这不起作用,因为 lParam 是未定义的。我还尝试使用 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

但我不熟悉这个,我不知道如何使用它。我的错误消失了,但没有收到消息...我这样使用它,可能是错误的:

任何提示如何实现这一目标?这可能真的很简单,但我找不到任何明确的信息。谢谢!

0 投票
1 回答
311 浏览

c++ - 如何将 LRESULT 转换为自定义结构类型?

我使用sendMessageandreplyMessage在同一台笔记本电脑中的两个应用程序之间进行通信。在接收方,当它收到来自发送方的消息时,它会回复一条消息。所以在发送者进程中,它会将这个MyStruct转换为 LRESULT,将这个回复发送给发送者应用程序。我试图把它扔回接收器端,它也有效。

但是,当我尝试将此 LRESULT 投射到MyStruct发送方时,它失败了:

如何将 LRESULT 转换为发送方的自定义结构?

我只是想顺便发送整数或浮点数。有用。但是,如果我使用自定义 struct MyStruct,它将不起作用。我猜这是因为 LRESULT 的大小比MyStruct.How 解决这个问题?LRESULT 的大小是 4,int 的大小也是 4。

0 投票
1 回答
460 浏览

java - JNA:COPYDATASTRUCT 的正确映射?

我为使其工作付出了很多努力(调用win32 API:使用WM_COPYDATA和COPYDATASTRUCT来保存数据的SendMessage)并且由于它现在可以在我的Windows 7计算机上运行,​​我想知道我的映射是否是好的映射以及是否存在我的解决方案没有副作用吗?

这是我的代码:

以及带有 2 个示例的调用代码:

关键是这段代码与我在网上找到的所有代码相比,COPYDATASTRUCT 属性cbData 的类型为 long。如果我设置为 int,它就不起作用(在遗留 C 应用程序的 WndProc 中未正确接收数据)。将 DWORD 映射到长 java 类型是否正确?使用 NativeLong 会更好吗?

要注意的另一件事是对所有实例化结构(myStruct 和 myDataStruct)的显式调用 Structure.write()。为了在调用 SendMessage api 之前没有空内存是必要的。你觉得正常吗?或者 jna 应该在调用 SendMessage 之前自动调用它?

提前致谢。