タスクトレイに常駐させているのを落とすには?

解決


GEORGE  2003-06-17 00:03:46  No: 107532  IP: [192.*.*.*]

デスクトップにアイコンを置いていて、それを実行させた場合タスクトレイにすでに存在したらタスクトレイの方を一度落としてまたタスクトレイに置くようにしたいのですが、どうやって二重に起動したかとかの判断などもわかりません。
そこでどういう命令を使ったらいいかなどいくつかヒントを頂きたいのですが…
よろしくお願い致します。

編集 削除
Lorely  2003-06-17 03:15:16  No: 107533  IP: [192.*.*.*]

hPrevInstanceというメンバが二重起動防止に使えます。
(App.hPrevInstanceだったかな?)
他にはCreateMutexを使う手もあります。

アプリケーションを終了させるには
アプリケーションのハンドルを取得して
SendMessageなどでメッセージを送るのが一般的だと思います。

編集 削除
Loreley  2003-06-17 03:25:07  No: 107534  IP: [192.*.*.*]

>アプリケーションのハンドルを取得して

EnumWindows
GetWindowsText
APIを使います・・・がタスクトレイだめかも

その場合はスナップショットを作成して
みていくことになりますね

CreateToolhelp32SnapShot
Process32First
Process32Next

のAPIだったかな。

編集 削除
GEORGE  2003-06-17 17:09:08  No: 107535  IP: [192.*.*.*]

回答ありがとうございます。
二重起動の分はできました。

編集 削除
Loreley  2003-06-17 19:11:21  No: 107536  IP: [192.*.*.*]

アプリケーションを終了させる点について、
ちょっと安っぽいやり方になりますが、
たとえばCドライブの一番上(つまりc:\)に
テキストファイルでもバイナリファイルでもいいですが、
なにかファイルを置いておきます、
そのファイルの中身を定期的にチェックして、
あるデータ(たとえば"1"という文字)だったら自ら終了する。
という手もあります
そういう形にしておけば

終了させる側のプログラムは、ファイルの中身を書き換えると
終了させたい側のプログラムは終了してくれます

手作業で書き換えられるので、
あまり良いやり方とは言いませんが・・・
こんな手もありますということで

編集 削除