プロが教える店舗&オフィスのセキュリティ対策術

Windowsのプロセス関連のAPIを勉強中です。

タスクマネージャでアプリケーションを強制終了させようとすると、正常終了できるときはしようとしますよねぇ。
これはAPIのTerminateProcessでは決してできなそうなのですが、アプリケーションに正常終了を促すのはどうやればよろしいんでしょうか。

自分であれこれ考えた結果、CreateRemoteProcessでExitProcessを実行するスレッドを、対象のプロセスに植え付けるぐらいしか思いつかなかったのですが、これは正しいんでしょうか(試してません)。

A 回答 (3件)

こんにちは。

itohhといいます。

>プロセスIDからウィンドウのハンドルを得る方法がわからないのですが、
>どうしたらよいでしょう。
自分でCreateProcessしたときに取得したプロセスIDでしょうか?
それですと簡単です。

ちょっと時間がないので、参考になるサイトを載せておきますのでそちらをご覧になってください。

・Visual C TechTips
URL:http://techtips.belution.com/ja/vc/

・新しいプロセスを作成し、そのプロセスが作成したウィンドウハンドルを取得するには?
URL:http://techtips.belution.com/ja/vc/0024/
    • good
    • 0
この回答へのお礼

EnumThreadWindowsですね。
Get~とかQuerry~とかばっか調べてて、Enumまでは気が付きませんでした。
プロセスが持ってるスレッドのIDはわかるので、これはかなり利用できそうです。
ありがとうございました。

お礼日時:2002/02/13 00:06

こんにちは。

itohhといいます。

VBアプリケーションでもWM_CLOSEメッセージはOKだと思いますよ。
もしかしたら、WM_DESTROYメッセージかもしれませんが。

ウィンドウを持たないアプリケーションについては、難しいですね。
アプリケーションがどういった状態で待ちに入っているか判らないわけですよね?
(メッセージ待ちなのか、ロックオブジェクトで待っているのか、sleepで待っているのか...)
ご自身で作成するアプリケーションならば、
ロックオブジェクトで待っていてSetEventなどで終了を通知されるまで待つ
という方法もあるとは思います。
    • good
    • 0
この回答へのお礼

そっか、VBがWM_CLOSEを受け取れなかったら、ログオフ時に正常終了できるはずがありませんよね。
そうすると、プロセスIDからウィンドウのハンドルを得る方法がわからないのですが、どうしたらよいでしょう。
VCのウィンドウプログラミングはしたことがないので。

お礼日時:2002/02/12 16:04

こんにちは。

itohhといいます。

>タスクマネージャでアプリケーションを強制終了させようとすると、
>正常終了できるときはしようとしますよねぇ。
これは、メッセージを受け付けることが出来る状態だからですよね。

WM_CLOSEメッセージを投げるというのはどうでしょうか?

WindowsプログラムならWM_CLOSEメッセージを受け取る処理は組み込まれていて
当たり前と思うのですが。
    • good
    • 0
この回答へのお礼

それだと、ウィンドウを持っていないアプリケーションやVBアプリケーションに対応できないと思ったので、甘いと思ったのです。
もちろんExitProcessはVBでは正常終了しませんが。

コンソールアプリケーションはやはり正常終了されるのはムリでしょうか?

お礼日時:2002/02/11 13:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!