2011-06-24 18 views
0

私はIRテレビコントローラをコンピュータに追加しています。これまでは、コントローラのデータを読み込み、キーをマップし、JAVAロボットクラスとプロンプトコマンドを使用して多数の関数を割り当てました。SendMessage()は1つではなく複数のメッセージを送信しています

再生/一時停止、停止音量+音量 - 機能を作成したいと思います。問題は、javaを介してdiretlyで行うことはできませんです。私はそれを行う正しい方法が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; 
} 

が、その代わりに、それはノンストップを送信し続けるだけで1つのメッセージを送信する:例えば、コードPORは、再生/ Paseの機能は次のようになります。

質問があります。もちろん、コードが正しく機能していないのは、最初です。休憩所がないか、何かありますか?

第2は、ウィンドウハンドラ手段に〜0(または0xFFFF)を割り当てることです。

ありがとうございます。私はあらゆる種類のソリューションに対応しています。

答えて

1

MSDN SendMesageは:このパラメータはHWND_BROADCAST((HWND)が0xFFFF)である

場合、メッセージが無効又は不可視未所有ウィンドウを含む、システム内のすべてのトップレベルウィンドウに送られ、ウィンドウを重ね、そしてポップアップウィンドウ。子ウィンドウにメッセージは送信されません。

SendMessageによるブロードキャストは、すべてのウィンドウに同期して送信されます。このメッセージの処理方法はアプリケーションによって異なります。

はい - このアプローチは、聞こえるほど危険です。あなたはHWND_BROADCASTなしであなたが望むことをする別の方法を見つけることができますか?

RGDS、 マーティン

+0

私はのFindWindow()を使用し、それが魅力のように働きました。 (返信の最後にあるコード)。 システムトレイに混合物をどのようにしてColume +/volume -/muteメッセージを送信するのですか? ありがとう –

0

〜0はHWND_BROADCASTです。メッセージは、システム内のすべての最上位ウィンドウに送信されます。このプログラムは、メッセージを一度だけ送信します。プログラムが何度も実行されるか、メッセージが複数のウィンドウで処理される可能性があります。

これを調べるにはSpy ++を使用してください。 Spy ++はMicrosoft SDKとVisual Studioの一部です。

1

アイブ氏は、クライアントとして、ローカルネットワーク上のWebブラウザのみを使用して、私のメディアPC走行mediaportalを制御するためのJava Webサーバを書こうと同じ問題に遭遇しますが、私は何に限らよjava.robotクラス内にのみ存在します。

私は、Javaから呼び出されたexeを使う考えは正しいと思います。個々のexeファイルを持つ代わりにすべてのメッセージを処理するプログラムを見ているかもしれません。 は、私は、これはあなたが探しているもののようであるかもしれないと思う:

再生/一時停止/停止機能の場合

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

関連する問題