我正在为电脑添加一台红外电视控制器。到目前为止,我设法读取控制器数据,映射键并使用JAVA机器人类和提示命令分配大量函数。
我现在想创建播放/暂停,停止音量+和音量 - 功能。问题是它无法通过java直接完成。我知道正确的方法是使用JNI,但我现在没有时间学习它。
我找到的解决方案是创建仅包含SendMessage函数的exe文件。例如,Play / Pase功能的代码为:
#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;
}
该程序有效,但不是只发送一条消息,而是不停地发送。
我不得不质问。当然,第一个是代码无法正常工作的原因。是否有遗失命令缺失或什么?
其次是将~0(或0xFFFF)分配给windows处理程序意味着什么。
谢谢,我愿意接受任何解决方案。
答案 0 :(得分:1)
MSDN SendMesage:
如果此参数为HWND_BROADCAST((HWND)0xffff),则会将消息发送到系统中的所有顶级窗口,包括禁用或隐藏的无主窗口,重叠窗口和弹出窗口;但邮件不会发送到子窗口。
使用SendMessage同步广播发送到所有这些窗口。如何处理此消息取决于应用程序。
是的 - 这种方法听起来有风险。如果没有HWND_BROADCAST,你能找到另外一种方法吗?
RGDS, 马丁
答案 1 :(得分:1)
我遇到了同样的问题,尝试编写一个java网络服务器来控制运行mediaportal的媒体PC,只使用本地网络上的Web浏览器作为客户端,但我仅限于java.robot类中的内容。
我认为使用从Java调用的exe的想法是正确的,也许看一个执行所有消息的程序而不是单独的exe文件。 我想这可能就像你在寻找的那样:
答案 2 :(得分:0)
~0是HWND_BROADCAST。该消息将发送到系统中的所有顶级窗口。该程序只发送一次消息。程序可能会执行多次,或者在多个窗口中处理消息。
使用Spy ++对此进行调查。 Spy ++是Microsoft SDK和Visual Studio的一部分。