问题标签 [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 回答
598 浏览

winapi - 在 64 位和 32 位 (WOW64) 应用程序之间使用 WM_COPYDATA 是否安全?

这里有一个关于消息的一般使用的很好的SO Q/A 会话,以及关于这是否可以在不同 32/64 位的应用程序之间工作的“讨论。然而,后者似乎专注于可能滥用正在传递的“数据指针”。所以,我在这里提出一个新问题。WM_COPYDATA

我正在努力让两个 Windows 应用程序相互通信/同步,作为第一轮方法,我正在使用 Windows Messaging 来实现这一点。现在一切似乎都很好……但我正在使用WM_COPYDATA消息在应用程序之间传递信息。

我的问题:当两个应用程序具有不同的 (32/64) 位数时,这种方法是否保证安全?我已经使用下面的代码对“客户端”和“服务器”之间的 32 与 64 构建的所有四种可能组合进行了一些测试,并且都按预期工作;但这仅仅是因为我得到了“幸运”的结果(来自可能的未定义行为),还是 WOW64 系统(特别是当服务器是 64 位而客户端是 32 时)是否负责所有必要的编组?

如果有人可以确认它可以保证工作,我将非常感谢确认这一点的“官方”链接/参考。

共享头文件:

服务器程序代码(在RegisterWindowMessage(L"HANDSHAKE");消息处理程序内):

客户端程序代码:

我特别关心客户端是 32 位但服务器是 64 位的情况;在这种情况下,它将向 32 位应用程序(尽管是 WOW64 应用程序)发送 64 位数据地址。内置的“编组”是否在 WOW64 情况下处理此问题?

0 投票
0 回答
448 浏览

javascript - 如何将 hookWindowMessage WM_COPYDATA 回调参数转换为 Electron/NodeJS 中的 JavaScript?

我们的 C++ 应用程序发送 WM_COPYDATA 消息:

在我们的 Electron 应用程序中,我们在 JavaScript 中侦听 WM_COPYDATA 消息:

我们收到消息,它给出了这个控制台输出:

我们如何在 JavaScript 中解释它,以便我们可以读取从 C++ 程序发送的字符串?

0 投票
2 回答
88 浏览

c++ - 在带有 WM_COPYDATA 消息的结构中使用 LPCTSTR 是否安全?

我有这个结构:

我准备WM_COPYDATA像这样发送数据:

在另一端:

它工作正常。我只是想知道这样改变我的结构是否可以接受:

然后使用:

并且,一旦消息被发布和处理:

使用这种LPCTSTR方法是否安全WM_COPYDATA,如果是,为什么?

0 投票
1 回答
148 浏览

c# - C# 到 C++ CopyData API

我正在开发一个自动化接口程序,并希望通过使用针对 C++的COPYDATA API的机器软件来增强功能。目标是通过我自己的软件控制和报告机器的状态。

该方法使用了迄今为止我没有任何经验的指针和内存分配。

我查看了许多其他来源,例如目前没有运气的this 。我尝试了以下代码来尝试在机器软件上运行程序。

运行此代码对两者都返回 0hwnd并且ret机器软件没有反应。

发送命令是第一步,下一步是尝试获得响应,以便我可以监控机器状态等。

0 投票
1 回答
105 浏览

c# - C# WndProc 方法未收到预期的 Msg 类型

我一直在尝试使用其记录的 COPYDATA API 与另一个软件进行通信。用户 Xanotos在我询问的这个问题中提供了非常有用的帮助,该问题的发送方法已排序并且工作正常。我遇到的问题是接收WndProc方法似乎没有捕捉到预期的响应。这是COPYDATA API文档的链接以供参考。

目前的方法如下。测试表明WndProc确实收到了消息,但不是我期望的消息,即struct取决于发送的消息。

声明:

发送方法(这些都可以正常工作并返回 true):

WndProc方法 - 这是事情没有按预期工作的地方。调用if(m.Msg == WM_COPYDATA)时从不返回 true 。GetPosition

这两个程序都是 32 位的。

任何想法为什么我没有收到预期的Msg

0 投票
0 回答
37 浏览

python-3.x - 如何在 python 中获取 WM_COPYDATA

我正在尝试用win32做一些小工作(应该是什么)。我基本上只需要发送一条消息并等待回复。

  1. 我需要我的 python 脚本/程序的 HWND 或窗口句柄来实际发送消息。
  2. 我需要从最终程序接收 WM_COPYDATA 消息。

我可以使用 ColonelFai1ure#0706 在 python discord 服务器上提供的脚本找到我的 python 程序的 HWND:

虽然我必须将我的 PyCharm 实例保留为活动窗口,但它工作正常,我现在可以使用 HWND 发送消息!

所以我发送一条消息:

有用!最终程序接收到我的消息并执行我需要它做的工作,这是输出:

现在我需要从最终程序接收 WM_COPYDATA 到我的 hwnd,我修改了一些在这里找到的 py2 代码:

不幸的是,消息永远不会出现。我正在使用 PyCharm 来运行它,如果它有所作为的话。

我现在不知道该做什么,互联网上的教程很少或用 python 2 编写。感谢任何帮助,教程链接,一些代码,任何东西。

0 投票
1 回答
133 浏览

c++ - 是否可以使用 WM_COPYDATA 发送窗口句柄?

我正在尝试使用 WM_COPYDATA IPC 方法发送 HWND。到目前为止,当发送一个字符串 LPCTSTR 时它可以工作。

但是当使用 HWND 时,消息甚至没有到达......

PVOID 应该能够指向任何 afaik。

我的 HWND 都已设置,并且上述两种方法都将 0 作为 LRESULT 返回。我该如何调试?还是有什么根本性的错误?