>> 796
たまたま最近似たようなことをやりました。
EnumThreadWindowsでウィンドウを列挙して、自分以外のウィンドウをディセーブルすれば良いかと。

HWND hMyWnd;
std::list<WndStatus> WndStatusList;

// ウィンドウを列挙
void Disable()
{
EnumThreadWindows(GetWindowThreadProcessId(hMyWnd, 0), EnumThreadWndProc, 0);
}

// ウィンドウ列挙コールバックの中で自分以外のウィンドウをディセーブル
BOOL CALLBACK EnumThreadWndProc(HWND hWnd, LPARAM lParam)
{
if (hWnd != hMyWnd)
{
// 自分以外のウィンドウの状態を保存
WndStatus x;
x.hWnd = hWnd;
x.bEnable = IsWindowEnabled(hWnd);
WndStatusList.push_back(x); // 元に戻すときはこの内容をリストアする

// ディセーブル
EnableWindow(hWnd, FALSE);
}
return TRUE;
}