- PR -

SendMessage/PostMessageについて

1
投稿者投稿内容
penpen
常連さん
会議室デビュー日: 2006/01/19
投稿数: 22
投稿日時: 2007-06-22 01:21
いつもお世話になっております。

VB6にて、プロセス一覧を表示&一覧のプロセスを選択して終了させるプログラムを
作成しているのですが、自分のプロセスに対してはよいのですが、他のユーザーの
プロセスを終了させる方法を知りたいのですが、ご教示頂けませんでしょうか。

ちなみに、TerminateProcess等の強制終了は使いたくありません。
SendMessageをつかってWM_QUITメッセージは使えないでしょうか。

よろしくお願いいたします
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-06-22 01:25
その process の ACL で許可されていないと無理です。

Default だと Administrators group に所属している user じゃないと無理でしょう。おそらく。
_________________
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-06-22 06:33

>SendMessageをつかってWM_QUITメッセージは使えないでしょうか

SendMessageを使う方法を思いついたなら、
人に聞くよりも試したほうが早いでしょう。
penpen
常連さん
会議室デビュー日: 2006/01/19
投稿数: 22
投稿日時: 2007-06-22 09:42
れい様 ちゃっぴ様

ご返答ありがとうございます。

プロセスを終了させるユーザーは、Administrators権限を持つユーザーで行わせる
予定です。

FindWindowでウィンドウハンドルを取得して、SendMessageで指定したウィンドウに
WM_QUITメッセージを送ることはできることは確認しております。

他のユーザーのプロセスを終了させる際、FindWindowを使って他のユーザーの
ウィンドウハンドルを取得することは可能のでしょうか?

よろしくお願いいたします。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-06-22 11:40
こんにちは。

「他のユーザーのプロセス」というのが「別のデスクトップのプロセス」というのであれば、
ウィンドウメッセージを送ることはできないようです。

INFO: サービスとデスクトップ ウィンドウ ステーション
引用:

ウィンドウ メッセージは、同一のデスクトップのプロセス間で送信のみできます。 別のデスクトップに関連付けられたプロセスを介して送信できません。



追記:
ということは、送信元プロセス/スレッドを送信先のウィンドウステーション/デスクトップに所属させてやれば、メッセージ送信は可能ってことなのかも?


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-06-22 12:05 ]
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-06-22 14:56
引用:

他のユーザーのプロセスを終了させる際、FindWindowを使って他のユーザーの
ウィンドウハンドルを取得することは可能のでしょうか?



それは試して無理だったのでしょうか?
それとも試していないのでしょうか?


れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-06-26 01:15
もう見てないかもしれませんが。

FindWindowsを用いれば他のプロセスのウィンドウも勿論取得できます。
もともとは全てのプロセスのウィンドウを取得できましたが、
ステーションの概念ができてからは
違うステーションのウィンドウは取得できません。

他のプロセスを終了させたい場合、

1 WM_QUIT
2 TerminateProcess

の順で呼ぶのが普通だと思います。
PostThreadMessageで呼びます。

普通のまともな窓なら1の段階で終了できますが、
メッセージループが死んでたり
そもそもメッセージキューを持っていない場合は
2でないと殺せません。

SendMessageやPostMessageはウィンドウに送るので、
ウィンドウのないスレッドやプロセスは死にません。

WM_CLOSEはウィンドウを閉じたい時に、
システムやユーザーがウィンドウに対して送るメッセージです。
アプリケーションはキャンセルできます。
DefWindowProcにWM_CLOSEが送られるとウィンドウが閉じます。
勿論、アプリケーションによってはこれだけで殺せます。

WM_DESTROYはウィンドウがデスクトップから削除されたことを通知するための
メッセージで、システムが対象のウィンドウのWndProcに送ります。
本来はこのメッセージでウィンドウが閉じる必要はありませんが、
リソースのクリーンアップを行ったりするのに使いますので、
場合によってはプロセスを(大抵はエラーを吐きつつ)殺せます。

以上はWin2kの時代の知識です。
XPやVista、.Net Frameworkでの振舞いは自分で調べてください。
最近はセキュリティの問題もあるので
変わっているかもしれません。

メソッドはたかが3種類、メッセージは3種類です。
総当りで試すのもたいした手間ではありません。
ネットにもたくさん資料がありますので、簡単でしょう。
1

スキルアップ/キャリアアップ(JOB@IT)