WM_CLOSEについて – プログラミング – Home

通知
すべてクリア

[解決済] WM_CLOSEについて


シジミ
 シジミ
(@シジミ)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

機種はWindowsXPです。
常駐プログラムにいかのような作業をさせたところ、

SendMessage(GetForegroundWindow(),WM_CLOSE,NULL,NULL);

普通のアプリケーションなら、一番手前のウィンドウが閉じるのですが、
エクスプローラーのウィンドウは閉じてはくれません。

送るメッセージが違うのか、送り方が悪いのか、それともエクスプローラーが拒否して
いるのか原因が分かりません。

どなたか、ご存じの方教えてください。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

エクスプローラを閉じたい場合は、WM_CLOSEではなく
WM_SYSCOMMANDでSC_CLOSEを指定しないとダメらしいです。

ですので、

HWND hWnd = ::GetForegroundWindow();
if ( hWnd )
{
TCHAR szClassName[ 256 ];
::GetClassName( hWnd, szClassName, 256 );
if ( !_tcscmp( szClassName, _T( ExploreWClass ) ) ||
!_tcscmp( szClassName, _T( CabinetWClass ) ) )
{
::SendMessage( hWnd, WM_SYSCOMMAND, SC_CLOSE, 0L );
}
else
{
::SendMessage( hWnd, WM_CLOSE, 0L, 0L );
}
}

てな、感じでしょうか。


返信引用
んー
 んー
(@んー)
ゲスト
結合: 19年前
投稿: 14
 

直接の回答じゃないけど、SPY++で見てみれば?

エクスプローラの×クリックしたらWM_CLOSE飛んでたよ
(SendMessageじゃなくPostMessageだったけど)


返信引用
んー
 んー
(@んー)
ゲスト
結合: 19年前
投稿: 14
 

書いてる間にレスが…
確かにWM_SYSCOMMAND (SC_CLOSE)も飛んでますね


返信引用
シジミ
 シジミ
(@シジミ)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

有り難うございました。
ウィンドウメッセージは多すぎて全部把握できていませんでした。
確かに、SPY++では飛んでましたね。
Blueさんのようにやると、閉じました。
いやあ、奥が深いですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました