>ソフトを起動した時点で、例えば「メモ帳」が起動していたら、アクティブでなくても終了させるようにしたいのですが。
>アクティブのタイトルを取得スル方法は知っていますが、アクティブでないウィンドウタイトルを取得する事って出来ますか?
え〜と、質問の内容は、あるプログラムから別のプログラムを終了させるために
非アクティブのウィンドウタイトルを取得する方法を知りたいということで
よろしいでしょうか?
>aplselでできます。
ANTARESさんの記述を見て、aplsel命令で起動中であるか調べて、
sendmsg命令で、終了メッセージを送信すれば出来るんじゃないかと
思いましたが、aplsel命令では、起動中か否かが判別できるだけで、
検索条件にヒットしたウィンドウハンドルが分かるわけではないのですね^^;
またこの方法だと、実行するときにウィンドウタイトルが分かっていないと
いけませんし^^;
↓作ってしまった確認スクリプト
#include "hspext.as"
// マクロ宣言
#define TEST_WINDOW_TITLE "無題 - メモ帳"
#define WM_QUIT 0x12
// グローバル変数宣言
g_hWndAnthor = 0 // 別アプリケーションのウィンドウハンドル
g_nSearchId = 0 // アプリケーションを検索する開始ID
g_bActive = 0 // 起動しているか否かのフラグ
g_strTitle = 0 // 正式なウィンドウタイトル
// 指定のアプリケーションを検索する
aplsel TEST_WINDOW_TITLE, g_nSearchId
// 戻り値を退避しておく
g_bActive = stat
g_strTitle = refstr
// アプリケーションが見つからなかった場合
if(g_bActive = 1) {
mes TEST_WINDOW_TITLE + "は、起動していません"
// アプリケーションが見つかった場合
} else {
mes TEST_WINDOW_TITLE + "は、起動しています"
mes "正式なウィンドウタイトルは、" + g_strTitle + "です。"
// 見つかったウィンドウに終了メッセージを
// 送信しようと思ったんだけど・・・
// sendmsg g_nSearchId, WM_QUIT, 0, 0
}
起動中のウィンドウを調べる方法をググってたらありました。
↓ウィンドウの列挙
http://wisdom.sakura.ne.jp/system/winapi/win32/win142.html
記事を読みましたら、EnumWindows関数を使用するみたいですが、
第1引数に自作のコールバック関数のポインタを渡さないと
いけないみたいです。
自作のコールバック関数をDLL用にエクスポートし、
HSP側の#funcで自作のコールバック関数を登録し、
varptrでEnumWindows関数に自作関数のポインタを渡せばいいのかもしれません^^;
>窓口さんへ
以前のスクリプトを含めて
(
http://hsp.tv/play/pforum.php?mode=all&num=32595)
窓口さんのスクリプトが、プロセス関連のAPIを調べるきっかけになりました。
ありがとうございます。m(__)m
今後も教養のために参考にさせていただきます。