【问题标题】:SendMessage() is sending multiple messages instead of only oneSendMessage() 正在发送多条消息,而不是只发送一条
【发布时间】:2011-06-24 05:09:01
【问题描述】:

我正在将 IR 电视控制器添加到计算机。到目前为止,我设法使用 JAVA 机器人类和提示命令读取了控制器数据、映射键并分配了大量功能。

我现在想创建播放/暂停、停止音量+ 和音量- 功能。问题是它不能通过java直接完成。我知道正确的方法是使用 JNI,但我现在没有时间学习它。

我找到的解决方案是创建只包含 SendMessage 函数的 exe 文件。例如,播放/暂停功能的代码是:

#include <windows.h>

#define WM_APP_COMMAND 0x319
#define PLAY_PAUSE 0xE0000

int main() {
  SendMessage((HWND)(~0), WM_APP_COMMAND, 0, PLAY_PAUSE);
  return 0;
}

该程序可以正常工作,但它不是只发送一条消息,而是不停地发送。

我不得不质疑。首先,当然是代码无法正常工作的原因。是否缺少 break 命令或其他什么?

其次是为 Windows 处理程序分配 ~0(或 0xFFFF)的含义。

谢谢,我愿意接受任何解决方案。

【问题讨论】:

    标签: java c windows sendmessage


    【解决方案1】:

    MSDN 发送消息:

    如果该参数为HWND_BROADCAST((HWND)0xffff),则将消息发送到系统中的所有顶层窗口,包括禁用或不可见的无主窗口、重叠窗口和弹出窗口;但消息不会发送到子窗口。

    使用 SendMessage 进行广播会同步发送到所有这些窗口。此消息的处理方式取决于应用程序。

    是的 - 这种方法听起来很冒险。如果没有 HWND_BROADCAST,你能找到另一种方法来做你想做的事吗?

    Rgds, 马丁

    【讨论】:

    • 在播放/暂停/停止功能的情况下,我使用了 FindWindow(),它就像一个魅力。 (回复底部的代码)。但是我如何发送 colume +/ volume - / mute 消息在系统托盘中执行 Mixe?谢谢
    【解决方案2】:

    我在尝试编写一个 java webserver 来控制我的媒体 PC 运行 mediaportal 时遇到了同样的问题,只使用本地网络上的 web 浏览器作为客户端,但我仅限于 java.robot 类中的内容。

    我认为使用从 Java 调用的 exe 的想法是正确的,也许看看一个处理所有消息而不是单独的 exe 文件的程序。 我认为这可能就像您正在寻找的那样:

    http://wiki.team-mediaportal.com/index.php?title=1_MEDIAPORTAL_1/17_Extensions/System_%26_Utilities/SendMessage

    【讨论】:

      【解决方案3】:

      ~0 是 HWND_BROADCAST。该消息被发送到系统中的所有顶级窗口。该程序只发送一次消息。可能是程序执行了多次,或者消息在多个窗口中处理。

      使用 Spy++ 对此进行调查。 Spy++ 是 Microsoft SDK 和 Visual Studio 的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2020-08-04
        • 2020-05-13
        • 1970-01-01
        • 2019-04-14
        • 2020-08-16
        相关资源
        最近更新 更多