void get_mon_rect(HMONITOR hMon, RECT *r) { if (hMon) { MONITORINFO mi; mi.cbSize = sizeof(mi); if (pGetMonitorInfoA(hMon, &mi)) { *r = mi.rcMonitor; //*r = mi.rcWork; return; } } //SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0); r->top = r->left = 0; r->right = GetSystemMetrics(SM_CXSCREEN); r->bottom = GetSystemMetrics(SM_CYSCREEN); }
void get_workarea (HWND hwnd, RECT * w, RECT * s) { static HMONITOR (WINAPI *pMonitorFromWindow)(HWND hwnd, DWORD dwFlags); static BOOL (WINAPI *pGetMonitorInfoA)(HMONITOR hMonitor, LPMONITORINFO lpmi); if (NULL == pMonitorFromWindow) { HMODULE hUserDll = GetModuleHandle("USER32.DLL"); *(FARPROC*)&pMonitorFromWindow = GetProcAddress(hUserDll, "MonitorFromWindow" ); *(FARPROC*)&pGetMonitorInfoA = GetProcAddress(hUserDll, "GetMonitorInfoA" ); if (NULL == pMonitorFromWindow) *(DWORD*)&pMonitorFromWindow = 1; } if (*(DWORD*)&pMonitorFromWindow > 1) { MONITORINFO mi; mi.cbSize = sizeof(mi); HMONITOR hMon = pMonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (hMon && pGetMonitorInfoA(hMon, &mi)) { if (w) *w = mi.rcWork; if (s) *s = mi.rcMonitor; return; } } if (w) { SystemParametersInfo(SPI_GETWORKAREA, 0, w, 0); } if (s) { s->left = s->top = 0; s->right = GetSystemMetrics(SM_CXSCREEN); s->bottom = GetSystemMetrics(SM_CYSCREEN); } }