2つのexeで動かしたいのですが…

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
学生

2つのexeで動かしたいのですが…

#1

投稿記事 by 学生 » 2年前

学校の課題で力学体験装置を作っているのですが、Unityでマウスの座標に合わせて映像が変化するプログラムを作り、visuals tudioでマウスの座標に合わせてモータを制御するプログラムを組んだのですが、2つのexeを同時に起動させても手前のウィンドウのプログラムでしか座標の取得やキー入力が反映されないのですが、2のexeで同時に座標などを取得するのは出来ないのでしょうか?もし、解決法などありましたら教えてください。ちなみに言語はUnityがC♯でモータ制御プログラムはC++です。

アバター
usao
記事: 1887
登録日時: 11年前

Re: 2つのexeで動かしたいのですが…

#2

投稿記事 by usao » 2年前

Unityの事は知らんけども,
C++側に関しては
ウィンドウにメッセージが降ってくるのを受動的に待つような形とせずに,能動的に状態判定すればいいんじゃないの?
(Win32 なら GetAsyncKeyState とか GetCursorPos とか使って)

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: 2つのexeで動かしたいのですが…

#3

投稿記事 by tk-xleader » 2年前

Visual Studioで言語がC++ということなので、Windows APIを直叩きしているという前提で回答するならば、WM_MOUSEMOVE などの入力デバイス系のメッセージは、Foreground状態のWindowに送信されるはずなので、背面のWindowのプロシージャでは受け取れないはずです。

それならどうすれば良いのかといえば、usao さんがおっしゃるように、GetAsyncKeyState やGetCursorPos といったwinapi関数を定期的に呼び出してキーボード・マウスボタンの押下状態やカーソル位置を取得すればよいということになります。
その上でもう少し補足すると、ウィンドウメッセージに頼らないで自力でポーリングをする方法として、次のような方法があります。
1 Windowタイマーを設定し、定期的に発行される WM_TIMER メッセージをウィンドウプロシージャで受け取って入力デバイスの状態をチェックする方法。
2 メッセージループをPeekMessageを使って実装し、メッセージループ内で入力デバイスの状態をチェックする方法。
3 入力デバイスチェック用のスレッドを立てて、入力デバイスチェック用のループを作る方法。
どの方法がいいのかというのは、学生さんがプログラムでのモーターの制御をどの程度の応答精度で行いたいかによります(通常は、1->3の順番で応答精度は高くなるはずです)。

返信

“C言語何でも質問掲示板” へ戻る