ページ 11

ウインドウ破棄

Posted: 2016年11月10日(木) 17:37
by TISAproject
表示しているウインドウを破棄するプログラムを教えてください

Re: ウインドウ破棄

Posted: 2016年11月13日(日) 21:44
by たかせ
「表示しているウインドウを破棄する」についていまいちよくわかりません。
例えばメモ帳(NOTEPAD.EXE)が実行されているときにABなど自作のプログラムでメモ帳を強制終了させることでしょうか?
タスクマネージャーで強制終了させる機能と類似したことを実現したいのでしょうか?

Re: ウインドウ破棄

Posted: 2016年11月14日(月) 22:50
by TISAproject
プログラムで表示しているwindowを消すのです。

Re: ウインドウ破棄

Posted: 2016年11月15日(火) 00:37
by たかせ
TISAproject さんが書きました:プログラムで表示しているwindowを消すのです。
もう一度確認したいのですが
①ノーマルウインドウのプログラムを起動して表示中にそれを破棄(プログラム終了)する方法
②ダイアログボックスがあるノーマルウインドウのプログラムを起動して実行中に表示中のダイアログボックスのウインドウを破棄する方法
③タスクマネージャーの機能と類似した方法
 つまり実行中/表示中のノーマルウインドウ系プログラム(メモ帳、ワード、エクセルなど)を強制終了する機能
どちらでしょうか?

Re: ウインドウ破棄

Posted: 2016年11月15日(火) 16:40
by TISAproject
たかせ さんが書きました:③タスクマネージャーの機能と類似した方法
 つまり実行中/表示中のノーマルウインドウ系プログラム(メモ帳、ワード、エクセルなど)を強制終了する機能
ですね

Re: ウインドウ破棄

Posted: 2016年11月17日(木) 22:41
by たかせ
表示中のウインドウのハンドルがわかれば以下の方法でできます。
例(これは何らかの方法でウインドウのハンドルの値が判明したとき)
DIM HWNHND AS HANDLE
HWNHND = &h0016075a AS HANDLE 'ウインドウのハンドルを設定
SendMessage(HWNHND,WM_CLOSE,0,0) 'ウインドウの閉じるボタンを押されたことを通知

ウインドウのハンドルはウインドウクラスまたはウインドウタイトルを基にWIN32 API FindWindowで取得します。
なおウインドウクラスがわからなくてもウインドウタイトルのみでも取得できます。というか私はそうしてます。
FindWindowについてはABのヘルプに載ってますので詳細はこちらをご確認下さい。

私自身あまりよく理解できていませんが、
WM_CLOSEメッセージはウインドウの閉じるボタンを押されたことを通知するもので強制的に終了するものではありません。
しかしながらプログラムの作りに依存しますが、WM_CLOSEメッセージを対象のウインドウに送ると基本的にウインドウ系のプログラムは終了します。
2017.10.31修正