トップレベル・ウィンドウのハンドルを取得し、そのウィンドウをZ座標の最前面へ移動
ここでは、トップレベル・ウィンドウのHandleを列挙し、そのHandleのウィンドウをZ座標の最善面へ移動する方法を示します。
ただし、非表示のウィンドウやタスクバーに格納されているウィンドウなどはZ座標の最善面へ移動されません。
【使用するAPI】
[ヘッダー]
Winuser.hで宣言、Windows.hをインクルード
[インポートライブラリ]
User32.lib
[API]
EnumWindows : トップレベル・ウィンドウのHandleを列挙
EnumWindowsProc : EnumWindowsを実行すると呼び出されるコールバック(CALLBACK)関数
GetWindowText : タイトルバーのテキストを取得
BringWindowToTop : ウィンドウをZ座標の最善面へ移動
SetForegroundWindow : ウィンドウをアクティブにし、そのスレッドをZ座標の最善面へ移動
(APIの詳細に付いては、MSDNライブラリを参照して下さい。)
【サンプル】
//取得したタイトルバーのテキスト、ハンドルを格納する配列
CStringArray m_strWinTxt;
int m_WinCount = 0;
HWND m_Handle[999];
//EnumWindowsを実行すると呼び出されるコールバック(CALLBACK)関数
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam)
{
char buf[99];
//-----------------------------------------------------
//Windowのタイトルを取得
GetWindowText(hwnd, buf, 99);
if(hwnd){
//Windows Titleを格納して、次のHandleを取得
m_strWinTxt.Add(buf);
return(true);
}
else{
//Windows Handleの列挙を止める
return(false);
}
}
void CWinhandleDlg::OnButton1()
{
int i;
//-----------------------------------------------------
//Window Handleとタイトルの列挙
boolean result = EnumWindows(EnumWindowsProc, 0);
//列挙したWindow Titleをリストボックスへ出力
CListBox* myLIST1 = (CListBox *)GetDlgItem(IDC_LIST1);
for( i = 0; i < m_strWinTxt.GetSize(); i++){
myLIST1->AddString(m_strWinTxt.GetAt(i));
}
}
//Windows HandleのWindowを最前面へ移動(BringWindowToTop)
BOOL UseBringWindowToTop(HWND hwnd)
{
//Windowを最前面へ移動
BringWindowToTop(hwnd);
return(true);
}
//Windows HandleのWindowを最前面へ移動(SetForegroundWindow)
BOOL UseSetForegroundWindow(HWND hwnd)
{
//Windowを最前面へ移動
SetForegroundWindow(hwnd);
return(true);
}
//リスト・ボックスで選択したWindowをBringWindowToTopを使って前面に移動
void CWinhandleDlg::OnButton2()
{
int index;
CListBox* myLIST1 = (CListBox *)GetDlgItem(IDC_LIST1);
index = myLIST1->GetCurSel();
//取得したWindows HandleのWindowを最前面へ移動
UseBringWindowToTop(m_Handle[index]);
}
//リスト・ボックスで選択したWindowをSetForegroundWindowを使って前面に移動
void CWinhandleDlg::OnButton3()
{
int index;
CListBox* myLIST1 = (CListBox *)GetDlgItem(IDC_LIST1);
index = myLIST1->GetCurSel();
//取得したWindows HandleのWindowを最前面へ移動
UseSetForegroundWindow(m_Handle[index]);
}