2009-07-27 9 views
3

私はバックグラウンドでいくつかのことをチェックするWindowsアプリを作ろうとしており、システムトレイアイコンを介してユーザーに知らせる。システムトレイアイコンを使用してバックグラウンドプロセスを作成する

このアプリはNot C++で作成されており、.netやJavaに切り替えるオプションはありません。

ユーザーがアプリを停止したい場合は、トレイアイコンを使用します。

アプリがあるためシステムトレイ側でサービスすることはできませんし、それがユーザーのコンピュータ上で何かをインストールせずに実行する必要があるため、一般的なWin32のプログラム構造(RegisterClass、WndProcメソッドを使用して

(それは単一の.exeです)など)私はどのように私は離れてウィンドウのメッセージループを実行するいくつかのコードを配置することができます知りません。 CreateProcess()またはCreateThread()を使用する必要がありますか?マルチスレッド環境を扱う正しい方法ですか?

CreateProcess()/ CreateThread()を使用する必要がある場合、どうすれば2つのスレッド間でコミニケーションできますか?

おかげで、私はあなたがこれを行うには、新しいプロセスを作成したい疑う)

+0

あなたの質問は実際には多くの質問です。 1.バックグラウンドプロセスを作成するにはどうすればよいですか? 2. 2つのスレッド/プロセスをどのように通信させるのですか? 3.システムトレイアイコンを作成して使用するにはどうすればよいですか? –

+0

あなたはそうです。私は数字2がより複雑であると思う:) – HyLian

+0

確かに...そして、あなたはそれらの問題を別々に解決するなら有用な答えを得ることにもっと成功するだろうと思う:-) –

答えて

0

は、あなたのアプリケーション内のスレッドを作成します。これを行うAPIはCreateThreadです。しかし、C++を使用している場合は、実際にCコードを最初から作成するのではなく、フレームワークとクラスライブラリの使用を調査する必要があります。

アプリケーションに属するすべてのスレッドは、アプリケーションのグローバル変数を共有するため、通信に使用できます。このようなマルチスレッドアクセスをクリティカルセクションのようなもので保護する必要があります。

+0

本当に私は1つのスレッドを作成する必要があり、 Win32 APIに非常に密接に関連しています。私はCreateThread()がその仕事をすることができると思います。 しかし、どうすれば2つのスレッド間でコミニケーションを行うことができますか? – HyLian

0

を参照してくださいさて、最初に私はあなたが本当に別のスレッドで、あなたの監視コードを実行する必要があるかどうかを検討したいです。いくつかの値やシステム状態を定期的にポーリングしているのであれば、おそらくタイマーを使ってメインスレッド上のすべてを実行できます。それがオプションではないと仮定して、すでに提案されているようにCreateThreadを使用して別のワーカースレッドを作成します。メインスレッドに不可視のメッセージウィンドウを作成します。作業者がメインスレッドを更新する必要がある場合、ウィンドウにメッセージを投稿する必要があります。メインスレッドは、必要に応じてシステムトレイアイコンを更新することによって応答します。

関連する問題