2011-06-24 106 views
0

我正在向電腦添加IR電視控制器。到目前爲止,我設法讀取控制器數據,映射密鑰並使用JAVA機器人類和提示命令分配大量功能。SendMessage()發送多條消息,而不是隻發送一條

我現在想創建播放/暫停,停止音量+和音量 - 功能。問題是不能通過java直接完成。我知道正確的做法是使用JNI,但我現在沒有時間去學習它。

我找到的解決方案是創建僅包含SendMessage函數的exe文件。例如,代碼POR播放/磷酸酶的功能是:

#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)。

謝謝,我願意接受任何形式的解決方案。

回答

1

MSDN SendMesage:

如果這個參數是HWND_BROADCAST((HWND)0xFFFF)時,該消息被髮送到所有頂級窗口在系統中,包括禁用或不可見的無主窗口,重疊的窗口,和彈出窗戶;但該消息不會發送到子窗口。

使用SendMessage進行廣播同步發送到所有這些窗口。該消息的處理方式取決於應用程序。

是的 - 這種方法聽起來很冒險。如果沒有HWND_BROADCAST,你能找到另一種方法去做你想做的事嗎?

RGDS, 馬丁

+0

在播放/暫停的情況下/停止我用FindWindow函數()函數和它的工作就像一個魅力。 (代碼在答覆的底部)。 但是我如何發送colume +/volume -/mute消息在系統托盤中執行Mixe? 謝謝 –

0

〜0是HWND_BROADCAST。該消息被髮送到系統中的所有頂級窗口。該程序只發送一次該消息。程序可能執行很多次,或者消息在多個窗口中處理。

使用Spy ++來調查這一點。 Spy ++是Microsoft SDK和Visual Studio的一部分。

1

伊夫遇到同樣的問題,試圖寫一個java web服務器來控制我的媒體PC僅使用本地網絡客戶端上的Web瀏覽器中運行mediaportal但我有限的什麼僅在java.robot類中。

我認爲使用從Java調用的exe文件的想法是正確的,也許看一個程序可以完成所有的消息,而不是單獨的exe文件。 我認爲這可能是像你在找什麼:

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