问题标签 [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 投票
1 回答
536 浏览

winapi - 我可以使用 WM_COPYDATA 复制非结构吗?

假设我在 foobar-shared.lib 中有这个类:

我在 foobar-from.exe 中使用 SendCopyData 调用,如下所示:

当从 foobar-to.exe 时,我处理 OnCopyData:

当 FooBar 是一个结构时,这工作得很好,但是现在它是一个类,我得到了这个错误:

我最初假设这是因为我的fooBar实例在堆栈上,所以我尝试将它移动到堆中,但得到了一个稍微不同的错误(如果需要,我可以在此处发布结果)。

根据MSDN的说法,“传递的数据不得包含指向接收数据的应用程序无法访问的对象的指针或其他引用。” 所以我怀疑这只有结构数据才有可能。我对么?

0 投票
2 回答
7277 浏览

c++ - 使用 WM_COPYDATA 将结构从 C++ 发送到 WPF

我有一个本机 C++ 应用程序,暂时只需要将其命令行字符串和当前鼠标光标坐标发送到 WPF 应用程序。消息发送和接收很好,但我无法将IntPtrC# 中的实例转换为结构。

当我尝试这样做时,应用程序要么毫无例外地崩溃,要么跳过转换它的代码行并接收到循环中的下一条消息。这可能意味着发生了本机异常,但我不知道为什么。

这是 C++ 程序。暂时我忽略命令行字符串并使用假光标坐标只是为了确保一切正常。

这是接收消息的 WPF 应用程序的一部分。如果整个事情不只是崩溃,则跳过 IF 语句中的第二行。

这里是结构的 C# 定义。我无休止地玩弄编组属性,却一无所获。

有任何想法吗?

0 投票
3 回答
2047 浏览

mfc - 两个对话框之间通过 WM_COPYDATA 通信的问题?

朋友们,这几天我面临的问题真的让我很头疼......它很简单......我想在两个/多个对话框之间进行通信,例如,如果有一个变量 CString 测试......我希望这个测试变量对于对话框/类是通用的(考虑到每个对话框都有单独的类)......我尝试了很多方法,一切都失败了......最后我尝试了这个 WM_COPYDATA 方法......即使现在,我也没有达到我想要的去做...

接收器类:

在上面我不知道我在做什么错误,但它没有从 CCopyDialog 类接收数据......请帮助我......

0 投票
3 回答
34213 浏览

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

我希望在进程之间发送文本。我发现了很多这样的例子,但没有一个我可以开始工作。这是我到目前为止所拥有的:

对于发送部分:

接收部分:

我不知道如何构建COPYDATASTRUCT,我刚刚放了一些似乎可行的东西。调试WM_COPYDATA案例时执行,但我再次不知道如何处理COPYDATASTRUCT.

我想在两个进程之间发送文本。

正如您可能知道的那样,我刚刚开始,我在 Code::Blocks 中使用 GNU GCC 编译器,我试图避免 MFC 和依赖项。

0 投票
3 回答
1194 浏览

c# - IPC:WM_COPYDATA + 序列化/反序列化

我目前正在开发 2 个必须相互通信的 .NET 应用程序。选择了 Simple Windows Messaging,目前它运行良好。消息中发送的数据是一个简单的字符串,但现在我创建了一个消息类,其中包含一个命令(枚举)和一个数据(字符串)成员,以及以后可能的其他成员。

当我发送这样一个消息类的实例时,它被序列化为字节,然后转换为 base64 字符串。然后使用 Windows 的 SendMessage() 将其发送出去。另一方面,我做相反的事情。最终,原始对象被恢复并在其他应用程序中可用。

虽然这种机制似乎有效,但我想知道这样做是否安全。确实,有一些开销,base64 字符串比原始字符串解决方案长得多(但我必须手动解析这个字符串以获取命令和数据部分) 可以使用 SendMessage 发送的消息是否有最大大小?

此外,我宁愿远离这个项目的 .NET 远程处理,而继续使用 SendMessage 解决方案。

有任何想法吗 ?也许使用 JSON 来限制开销?

谢谢。

鼠兔

0 投票
1 回答
829 浏览

.net - 将 WM_COPYDATA 与 Delphi-Prism 应用程序一起使用

有没有人有接收和解释 WM_COPYDATA 消息的一个很好的 delphi-prism 示例?我对如何处理消息数据结构特别感兴趣。

0 投票
1 回答
155 浏览

.net - 将 CopyData 用于提升的应用程序有什么好的替代方法

我有一个应用程序停止服务,复制文件,然后再次启动服务。我希望它显示一个进度条,没有额外的窗口,没有改变屏幕,只是让 UAC 做它的事情并从那里继续(它是一个配置程序,所以它仍然可以作为标准用户使用,副本上有盾牌图标按钮)。

它这样做的方式是通过以管理员身份打开一个单独的应用程序(另一个自己的应用程序,使其不可见,就像 msiexec 所做的那样),然后新的应用程序执行它的操作并通过 SendMessage 发回进度报告。这很好用,但事实证明 SendMessage 只能在管理员/非管理员应用程序之间以一种方式工作。重定向 StandardInput 不起作用,因为这需要关闭 ShellExecute,而“runas”需要打开 ShellExecute。

我不想使用文件,因为这会很慢并且存在安全风险(我在之前包含命令的 CopyData 消息旁边发送了一个密钥代码)。是否有另一种方法来重定向标准输入/输出?微星是如何做到的?

我为此使用 C#。

0 投票
1 回答
568 浏览

c# - 发送 WM_COPYDATA 但在接收端获取 WM_ACTIVATEAPP

我有以下情况:

我的应用程序从命令行获取一些数据。

在第一次执行后,我的应用程序始终运行一个实例,并且该实例将在内存中,直到用户明确告诉它关闭而不是在不需要时隐藏表单。

当用户第二次尝试运行应用程序时,进程启动,检查内存中是否有另一个,如果是,它会向内存中的进程发送一条 WM_COPYDATA 消息,其中包含从命令行获取的数据和退出。

当它是运行应用程序的用户时,这一切都很好。

我需要从 Microsoft Word 2003 工具栏运行它,所以我为此使用了“加载项”。问题是,当我的应用程序从该加载项(使用 Process 类)启动时,似乎已经在内存中的进程收到了 WM_ACTIVATEAPP 消息而不是 WM_COPYDATA 消息,所以我无法从加载项启动的进程。

我不知道为什么会发生这种情况以及如何解决它。我已经用谷歌搜索了几个小时,但没有任何帮助......

任何人都可以帮忙吗?

0 投票
2 回答
871 浏览

vb.net - 如何将短字符串从 Visual Basic 应用程序发送到 Delphi 应用程序?

我需要从一个 VB 应用程序向 Delphi 应用程序发送一个短字符串(小于 30 个字节,但每秒发送一次)。这可能吗,在 Windows 中使用 CopyDataStruct、WM_COPYDATA 和 SendMessage 函数?

0 投票
1 回答
1329 浏览

vb.net - 使用 SendMessage 将文本从 VB 发送到 Delphi 应用程序

) 我正在尝试从 VB 应用程序向 Delphi 应用程序发送一个短文本。这是 VB 代码:Sender Program “Sender”

这是德尔福代码:接收程序“接收”

我在这里做错了什么?可以使用 WM_COPYDATA 命令和 SendMessage 函数将字符串从 VB 发送到 Delphi 程序吗?

请帮我 :-)

F