The Tips for Developers > 他のウィンドウを最小化する

他のウィンドウを最小化する(最終更新日 2002/09/21)

対象ウィンドウのハンドル取得
自分のアプリケーションで管理しているウィンドウを最小化するのは容易なことであるが、他のアプリケーションのウィンドウを最小化するときには、該当ウィンドウのウィンドウハンドルを取得する必要がある。

以下では、ダイアログベースのアプリケーションを作成して、ボタンが押下されるタイミングでメモ帳を最小化・最大化させるプログラムを作成する。

一般的に、ウィンドウのウィンドウハンドラを取得する際には、ここでは Win32API の FindWindow 関数を使用する。書式は以下のとおりである。
HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName)
lpClassName クラス名かアトムを指定。ウィンドウのウィンドウハンドルを取得するときは、NULLを指定
lpWindowName ウィンドウタイトルを指定。NULLを指定すると、あらゆるウィンドウ名が該当する。
この関数を用いて、メモ帳のウィンドウハンドルを取得する場合は以下のようにコーディングする。メモ帳のタイトルは "無題 - メモ帳" であると仮定する。
HWND hNotePad = ::FindWindow(NULL, "無題 - メモ帳");
ここでは、MFCアプリケーションに Win32API を使用しているため、::FindWindow 関数を使用している。
他ウィンドウの最小化・最大化
ウィンドウハンドルの取得が行われた後、該当ウィンドウを最小化・最大化するわけであるが、ここでは Win32API の ShowWindow 関数を使用する。
BOOL ShowWindow( HWND hWnd, int nCmdShow)
hWnd 対象ウィンドウのウィンドウハンドル
nCmdShow ウィンドウの表示状態
上記の関数の nCmdShow パラメータには以下の種類がある。
ウィンドウの動作
SW_HIDE ウィンドウを非表示にし、次のレベルのウィンドウをアクティブにする。
SW_MAXIMIZE ウィンドウを最大化する。
SW_MINIMIZE ウィンドウを最小化し、次のレベルのウィンドウをアクティブにする。
SW_RESTORE 元のサイズ・位置に戻してウィンドウをアクティブに表示する。
SW_SHOW ウィンドウをアクティブにして、現在のサイズ・位置で表示する。
SW_SHOWDEFAULT アプリケーションを起動させたプログラムの設定した値に基づき、ウィンドウを表示する。
SW_SHOWMAXIMIZED ウィンドウをアクティブにして最大化する。
SW_SHOWMINIMIZED ウィンドウをアクティブにして最小化する。
SW_MINSHOWNOACTIVE ウィンドウを最小化する。アクティブ・非アクティブの関係はそのまま維持される。
SW_SHOWNA ウィンドウを現在の状態で表示する。アクティブウィンドウはそのまま維持される。
SW_SHOWNOACTIVE ウィンドウを直前の状態に戻す。アクティブウィンドウはそのまま維持される。
SW_SHOWNORMAL ウィンドウをアクティブにして表示。最大化・最小化しているときはサイズ・位置を元に戻す。
これらを用いて、以下のようにウィンドウを制御する。
int nCmd;
if(::IsIconic(hNotePad) == TRUE){
 nCmd = SW_SHOWNOACTIVATE;
} else {
 nCmd = SW_SHOWMINNOACTIVE;
}

if(::ShowWindow(hNotePad, nCmd) == FALSE)
 MessageBox("ERROR");
上記項目と同様、ここでもMFCアプリケーションにWin32APIを使用しているため、各関数は ::xxxx となっている。

::IsIconic 関数は該当ウィンドウハンドルを有するウィンドウが最小化されているかを判定する関数である。
(TRUE で最小化、FALSE でそれ以外)

これらを組み合わせることにより、他アプリケーションのウィンドウを操作することができる。

サンプルはこちらから。