機種はWindowsXPです。
常駐プログラムにいかのような作業をさせたところ、
SendMessage(GetForegroundWindow(),WM_CLOSE,NULL,NULL);
普通のアプリケーションなら、一番手前のウィンドウが閉じるのですが、
エクスプローラーのウィンドウは閉じてはくれません。
送るメッセージが違うのか、送り方が悪いのか、それともエクスプローラーが拒否して
いるのか原因が分かりません。
どなたか、ご存じの方教えてください。
エクスプローラを閉じたい場合は、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 );
}
}
てな、感じでしょうか。
直接の回答じゃないけど、SPY++で見てみれば?
エクスプローラの×クリックしたらWM_CLOSE飛んでたよ
(SendMessageじゃなくPostMessageだったけど)
書いてる間にレスが…
確かにWM_SYSCOMMAND (SC_CLOSE)も飛んでますね
有り難うございました。
ウィンドウメッセージは多すぎて全部把握できていませんでした。
確かに、SPY++では飛んでましたね。
Blueさんのようにやると、閉じました。
いやあ、奥が深いですね。