At least thirteen Monitor Configuration functions exist. Those include GETs and/or SETs for brightness, color temperature, contrast, display area position & size, factory defaults and more. Some models may have limited Monitor Configuration support.
The following code sample includes calls to several Monitor Configuration functions, in particular those reading and changing the brightness of a monitor.
#DEFINE MONITOR_DEFAULTTONEAREST 2 DO declare LOCAL hMonitor, cMonitorName, hPhysMonitor,; nPhysMonitorCount, cPhysMonitorArray, nResult * find out on which monitor * the main VFP window resides hMonitor = MonitorFromWindow(_vfp.hWnd,; MONITOR_DEFAULTTONEAREST) * find out the number of physical monitors * associated with the hMonitor handle nPhysMonitorCount=0 = GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor,; @nPhysMonitorCount) IF nPhysMonitorCount = 0 ? "No physical monitor detected." RETURN ENDIF * allocate space for the array * of PHYSICAL_MONITOR structures cPhysMonitorArray = REPLICATE(CHR(0), 4096) * retrieves the physical monitors data nResult = GetPhysicalMonitorsFromHMONITOR(hMonitor,; nPhysMonitorCount, @cPhysMonitorArray) IF nResult = 0 ? "GetPhysicalMonitorsFromHMONITOR() failed:",; GetLastError() RETURN ENDIF * this pseudo-handle starts with 0 and increments * for each following physical monitor hPhysMonitor = buf2dword(SUBSTR(cPhysMonitorArray, 1,4)) ? "Physical Monitor handle:", hPhysMonitor cMonitorName = SUBSTR(cPhysMonitorArray, 5) cMonitorName = SUBSTR(m.cMonitorName, 1,; AT(CHR(0)+CHR(0), cMonitorName)) ? "Monitor name:", STRCONV(cMonitorName,6) LOCAL capMonitor, capColorTemp STORE 0 TO capMonitor, capColorTemp * takes about a second to return IF GetMonitorCapabilities(hPhysMonitor,; @capMonitor, @capColorTemp) <> 0 ? "Monitor Cap flags:", capMonitor ? "Monitor Color Temp flags:", capColorTemp ENDIF LOCAL minBrightness, curBrightness, maxBrightness STORE 0 TO minBrightness, curBrightness, maxBrightness * retrieving the brightness value (%) for the monitor IF GetMonitorBrightness(hPhysMonitor,; @minBrightness, @curBrightness, @maxBrightness) <> 0 ? "Brightness min, current, max:",; minBrightness, curBrightness, maxBrightness * setting the brightness * uncomment to try * = SetMonitorBrightness(hPhysMonitor, 100) ELSE ? "GetMonitorBrightness() failed:",; GetLastError() ENDIF * this is the must on exit: closes the array of open * physical monitor handles = DestroyPhysicalMonitors(nPhysMonitorCount,; @cPhysMonitorArray) * end of main PROCEDURE declare DECLARE INTEGER MonitorFromWindow IN user32; INTEGER hWindow, INTEGER dwFlags DECLARE INTEGER GetLastError IN kernel32 DECLARE INTEGER GetMonitorCapabilities IN dxva2; INTEGER hMonitor, LONG @pdwMonitorCapabilities,; LONG @pdwSupportedColorTemperatures DECLARE INTEGER GetPhysicalMonitorsFromHMONITOR IN dxva2; INTEGER hMonitor, LONG dwPhysicalMonitorArraySize,; STRING @pPhysicalMonitorArray DECLARE INTEGER GetNumberOfPhysicalMonitorsFromHMONITOR IN dxva2; INTEGER hMonitor, LONG @pdwNumberOfPhysicalMonitors DECLARE INTEGER DestroyPhysicalMonitors IN dxva2; LONG dwPhysicalMonitorArraySize, STRING @pPhysicalMonitorArray DECLARE INTEGER GetMonitorBrightness IN dxva2; INTEGER hMonitor, LONG @pdwMinimumBrightness,; LONG @pdwCurrentBrightness, LONG @pdwMaximumBrightness DECLARE INTEGER SetMonitorBrightness IN dxva2; INTEGER hMonitor, LONG dwNewBrightness FUNCTION buf2dword(cBuffer) RETURN Asc(SUBSTR(cBuffer, 1,1)) + ; BitLShift(Asc(SUBSTR(cBuffer, 2,1)), 8) +; BitLShift(Asc(SUBSTR(cBuffer, 3,1)), 16) +; BitLShift(Asc(SUBSTR(cBuffer, 4,1)), 24) }
No comments:
Post a Comment