Lately, Intel HD Graphics is painful to use. Something about the brightness and contrast is not right. The result is headache after just about 15 minutes of use. This is a driver problem because the same card on Linux does not induce headaches; or even using Windows without IGfx drivers - a bit too bright but the eyes seem to cope.
Minimum brightness and contrast on Intel HD 5500 is just too high. Using the Power Saving features of the driver the brightness and contrast is lowered much further to a comfortable level. Only problem is power saving only works on battery (not AC) and brightness and contrast is automagically lowered and raised depending on the image currently displayed on screen. Very irritating.
@jimmy_m Is it possible to programmatically lower the brightness to the lowest level that the hardware permits. Am trying to do this using the Windows API and it just isn’t working.
Google fails me and Linux is not for me. Currently using Flux but it does not help that much.
Any other tech head. @Deorro, @The.Black.Templar, etc assist where you can.
I use Win 8.1. A step above seven but away from 10 madness. The latest intel drivers are the problem. A few years ago IGfx drivers were just drivers. Nowadays they add a bunch of background services and features for ‘premium experience’. That’s what causing my problem. It’s now not possible for a user to lower brightness to the absolute minimum as it was on older Intel drivers.
The default is not usable. Too bright and contrasty. And that’s the lowest allowed by the Igfx control panel. If their app can push the brightness lower than minimum, they should let users do it too.
What do you mean by too bright? Use the hardware keys on the keyboard if ni laptop to reduce the brightness. Default works fine for me when using Photoshop. Never had a problem
Very interesting, never used it to just reduce brightness (you can create some real havoc on a user with it ) but i believe DeviceIOControl in kernel32 should work, however it will probably be limited to the values already predefined by the driver, you will probably have to make an api call to query them. so will have have to make to calls to DeviceIOControl, one to query the supported values and another one to set
I think am lost. I will read up on DeviceIOControl this evening. I also noticed that capabilities are listed as zero on driver properties. My first code has a weird error and my second attempt is just a temporary black screen!
Attempt 1:
[CODE]BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
// We skip all this trouble if the monitor is not the primary monitor
MONITORINFOEXW mix;
ZeroMemory(&mix, sizeof(MONITORINFOEXW) );
mix.cbSize = sizeof(MONITORINFOEXW);
BOOL bSuccess = GetMonitorInfoW(hMonitor, &mix);
if ( !bSuccess || (bSuccess && !(mix.dwFlags & MONITORINFOF_PRIMARY)) )
{
// Move to next monitor.
return TRUE;
}
DWORD dwNumOfPhysicalMonitors = 0UL;
if (!GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &dwNumOfPhysicalMonitors) )
{
DisplayError( L"GetNumberOfPhysicalMonitorsFromHMONITOR" );
return FALSE; // Stop enumerating monitors
}
LPPHYSICAL_MONITOR lpPhysicalMonitors = (LPPHYSICAL_MONITOR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, dwNumOfPhysicalMonitors * sizeof(PHYSICAL_MONITOR));
if ( !lpPhysicalMonitors )
{
// Mem allocation error
return FALSE;
}
if ( !GetPhysicalMonitorsFromHMONITOR(hMonitor, dwNumOfPhysicalMonitors, lpPhysicalMonitors) )
{
HeapFree(GetProcessHeap(), 0, lpPhysicalMonitors);
DisplayError( L"GetPhysicalMonitorsFromHMONITOR" );
return FALSE;
}
for (DWORD i = 0; i < dwNumOfPhysicalMonitors; i++)
{
// Get monitor capabilities
DWORD dwMonitorCapabilities = 0UL;
DWORD dwSupportedColourTemps = 0UL;
BOOL bSuccess = GetMonitorCapabilities( lpPhysicalMonitors[i].hPhysicalMonitor,
&dwMonitorCapabilities, &dwSupportedColourTemps );
if ( !bSuccess )
{
DisplayError(TEXT("GetMonitorCapabilities") );
continue;
}
// Needs to support brightness control
if ( !(MC_CAPS_BRIGHTNESS & dwMonitorCapabilities) )
{
continue;
}
DWORD dwMinimumBrightness = 0;
DWORD dwCurrentBrightness = 0;
DWORD dwMaximumBrightness = 0;
if (GetMonitorBrightness(lpPhysicalMonitors[i].hPhysicalMonitor,
&dwMinimumBrightness, &dwCurrentBrightness, &dwMaximumBrightness))
{
// Aaaaaaaargh!
// Shit don't even get here dawg.
//
}
else {
DisplayError( L"GetMonitorBrightness" );
}
}
DestroyPhysicalMonitors(dwNumOfPhysicalMonitors, lpPhysicalMonitors);
HeapFree(GetProcessHeap(), 0, lpPhysicalMonitors);
// Continue enumeration
return TRUE;
@TerribleWaste will give it a try once i get some free time and get back to you, on the blank screen, you are probably setting a value thats not supported, i think if you set say 12 and it only supports multiples of 10 it will cause such an error
Just get Windows 10 …I Don know y u still use 8.1 .windows 7 I understand …8.1 makes no sense at all. Anyways is this issue their in windows if not install 10 -copy drivers and registry and then go roll back if it still shit install manually had a lap that had hardware limitations but it was a reversal of this situation.