ウィンドウを最小化したときタスクバーに入らないようにするには
ほとんどのアプリケーションはウィンドウを最小化するとタスクバーに入りますが、最小化した際にタスクバーに入らずに最小化したウィンドウを表示したいことがあります。
例えば、新規でデスクトップを作成した場合は、新規デスクトップ上ではexplorer.exeが動作していないので、タスクバーがありません。
この状態でウィンドウを最小化すると最小化されているアプリケーションがわからなくなってしまいます(Alt+Tabにより切り替えはできます)。
そこで、すべてのウィンドウにおいて、最小化した際にタスクバーに入らずに最小化したウィンドウを表示するように変更する必要が出てきます。
これは、SystemParametersInfo () API で SPI_SETMINIMIZEDMETRICS を指定することにより行うことができます。
以下はサンプルになります。
※ 最小化の状態は必ず元に戻すようにしましょう。
■■■ spimin プロジェクト
■ main.cpp
#include <windows.h>
#include <tchar.h>
int WINAPI _tWinMain ( HINSTANCE,
HINSTANCE,
_TCHAR *,
int )
{
MINIMIZEDMETRICS *pMinimizedMetricsSrc = new MINIMIZEDMETRICS;
memset ( pMinimizedMetricsSrc, 0, sizeof ( MINIMIZEDMETRICS ) );
pMinimizedMetricsSrc->cbSize = sizeof ( MINIMIZEDMETRICS );// サイズを入れるのを忘れないように...
// 現在の最小化設定を取得
if ( !SystemParametersInfo ( SPI_GETMINIMIZEDMETRICS, sizeof ( MINIMIZEDMETRICS ), pMinimizedMetricsSrc, 0 ) )
{
return FALSE;
}
// 最小化時の表示形式を変更
MINIMIZEDMETRICS minimizedMetrics;
memset ( &minimizedMetrics, 0, sizeof ( MINIMIZEDMETRICS ) );
minimizedMetrics.cbSize = sizeof ( MINIMIZEDMETRICS );
minimizedMetrics.iArrange = ARW_BOTTOMLEFT;
minimizedMetrics.iWidth = 150;
if ( !SystemParametersInfo ( SPI_SETMINIMIZEDMETRICS,
sizeof ( MINIMIZEDMETRICS ),
&minimizedMetrics,
SPIF_SENDCHANGE ) )
{
// 失敗したときは 解放
delete pMinimizedMetricsSrc;
MessageBox ( NULL,
_TEXT ( "SystemParametersInfo 失敗しました(1)" ),
_TEXT ( "エラー" ),
MB_OK | MB_ICONSTOP );
return 0;
}
MessageBox ( NULL,
_TEXT ( "ウィンドウを最小化したとき、タスクバーに入らないようにしました。\n何かアプリケーションを最小化してみてください。" ),
_TEXT ( "確認" ),
MB_OK );
// 元の状態へ戻す
if ( !SystemParametersInfo ( SPI_SETMINIMIZEDMETRICS,
sizeof ( MINIMIZEDMETRICS ),
pMinimizedMetricsSrc,
SPIF_SENDCHANGE ) )
{
// 失敗したときは 解放
delete pMinimizedMetricsSrc;
MessageBox ( NULL,
_TEXT ( "SystemParametersInfo 失敗しました(2)" ),
_TEXT ( "エラー" ),
MB_OK | MB_ICONSTOP );
return 0;
}
delete pMinimizedMetricsSrc;
MessageBox ( NULL,
_TEXT ( "ウィンドウを最小化したとき、タスクバーに入るように戻しました。" ),
_TEXT ( "確認" ),
MB_OK );
return 0;
}
|
|