Win32API ウィンドウの情報を取得する GetWindowInfo
ウィンドウの情報を得るには、GetWindowInfo関数を用いる。
GetWindowInfo関数のプロトタイプは、以下の通り。
BOOL GetWindowInfo( HWND hwnd, PWINDOWINFO pwi );
第二引数のWINDOWINFO構造体は、WinUser.h にて、以下のように定義されている。
typedef struct tagWINDOWINFO { DWORD cbSize; RECT rcWindow; RECT rcClient; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus; UINT cxWindowBorders; UINT cyWindowBorders; ATOM atomWindowType; WORD wCreatorVersion; } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
GetWindowInfo関数を用いた簡単なサンプル
デスクトップの情報を取得し、デスクトップ領域の座標を表示する。#include <Windows.h> #include <stdio.h> int main() { HWND hDesktop = GetDesktopWindow(); WINDOWINFO windowInfo; windowInfo.cbSize = sizeof(WINDOWINFO); GetWindowInfo(hDesktop, &windowInfo); printf("bottom=%d, left=%d, right=%d, top=%d\n", windowInfo.rcWindow.bottom, windowInfo.rcWindow.left, windowInfo.rcWindow.right, windowInfo.rcWindow.top); return 0; }
実行結果
bottom=1050, left=0, right=1680, top=0
ウィンドウの情報を取得する他の関数として、GetWindowRect関数では、指定されたウィンドウのスクリーン座標を取得する。
#include <windows.h> #include <stdio.h> int main() { HWND hWnd; RECT rect; hWnd = GetDesktopWindow(); GetWindowRect(hWnd, &rect); printf("bottom=%d, left=%d, right=%d, top=%d\n", rect.bottom, rect.left, rect.right, rect.top); return 0; }
さらに、もうひとつのウィンドウの情報を取得する関数として、GetWindowPlacement関数では、指定されたウィンドウの表示状態、および通常表示のとき、最小化されたとき、最大化されたときの位置を返す。
#include <windows.h> #include <stdio.h> int main() { //タスクバーのウィンドウハンドルを取得する HWND hWnd = FindWindowEx(NULL, NULL, TEXT("Shell_TrayWnd"), NULL); WINDOWPLACEMENT placement; GetWindowPlacement(hWnd, &placement); printf("ptMaxPosition.x=%d, ptMaxPosition.y=%d\n", placement.ptMaxPosition.x, placement.ptMaxPosition.y); printf("ptMinPosition.x=%d, ptMinPosition.y=%d\n", placement.ptMinPosition.x, placement.ptMinPosition.y); printf("rcNormalPosition.bottom=%d, rcNormalPosition.left=%d, rcNormalPosition.right=%d, rcNormalPosition.top=%d\n", placement.rcNormalPosition.bottom, placement.rcNormalPosition.left, placement.rcNormalPosition.right, placement.rcNormalPosition.top); switch (placement.showCmd) { case SW_HIDE: puts("SW_HIDE"); break; case SW_MINIMIZE: puts("SW_MINIMIZE"); break; case SW_RESTORE: puts("SW_RESTORE"); break; case SW_SHOW: puts("SW_SHOW"); break; case SW_SHOWMAXIMIZED: puts("SW_SHOWMAXIMIZED"); break; case SW_SHOWMINIMIZED: puts("SW_SHOWMINIMIZED"); break; case SW_SHOWMINNOACTIVE: puts("SW_SHOWMINNOACTIVE"); break; case SW_SHOWNA: puts("SW_SHOWNA"); break; case SW_SHOWNOACTIVATE: puts("SW_SHOWNOACTIVATE"); break; case SW_SHOWNORMAL: puts("SW_SHOWNORMAL"); break; default: puts("Unknown"); break; } return 0; }
参考
http://msdn.microsoft.com/ja-jp/library/cc364758.aspx (GetWindowInfo)
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms632610(v=vs.85).aspx (WINDOWPLACEMENT構造体)
http://msdn.microsoft.com/ja-jp/library/cc364769.aspx (GetWindowRect)
http://msdn.microsoft.com/ja-jp/library/cc364767.aspx (GetWindowPlacement)